Ich habe einen benutzerdefinierten Beitragstyp erstellt und möchte, dass der Benutzer die statische Seite für die Archivseite auswählt. Zum Beispiel unter Seite posten. Ich möchte eine Projektseite hinzufügen: [Dropdown]
Gibt es eine Möglichkeit, der Seite mit den Leseeinstellungen eine weitere statische Seitenoption hinzuzufügen? Gibt es einen vorhandenen Haken, um ihn zu ändern?
Gibt es auch eine Möglichkeit, die ausgewählte Seite so in Pages zu markieren?
Update:
/wp/wp-admin/includes/template.php:1768
betrachten
/**
* Filters the default post display states used in the posts list table.
*
* @since 2.8.0
* @since 3.6.0 Added the `$post` parameter.
*
* @param array $post_states An array of post display states.
* @param WP_Post $post The current post object.
*/
$post_states = apply_filters( 'display_post_states', $post_states, $post );
if ( ! empty($post_states) ) {
$state_count = count($post_states);
$i = 0;
echo ' — ';
foreach ( $post_states as $state ) {
++$i;
( $i == $state_count ) ? $sep = '' : $sep = ', ';
echo "<span class='post-state'>$state$sep</span>";
}
}
Es scheint, als gäbe es Hooks für den post_state, aber wie stellen Sie ihn ein?
Schauen Sie sich auch /wp-admin/options-reading.php:83
an.
Gibt es eine Möglichkeit, die Einstellung "Lesen" zu ändern, ohne die Datei tatsächlich zu ändern?
Ich weiß nicht, ob es möglich ist, ein neues Feld direkt unter dem Dropdown-Feld "Posts page" hinzuzufügen. Ich habe zumindest keine Möglichkeit gefunden, dies zu tun.
Sie können der Seite mit den Leseeinstellungen jedoch auch ein weiteres Dropdown-Menü hinzufügen. Dies wird auf dem Boden du sein.
Um dies zu tun, müssen wir zuerst unsere neue Einstellung register
und add a new settings field
auf die standardmäßige WordPress-Seite reading
setzen:
/**
* Register and define the settings
*/
add_action('admin_init', 'prfx_admin_init');
function prfx_admin_init(){
// register our setting
$args = array(
'type' => 'string',
'sanitize_callback' => 'sanitize_text_field',
'default' => NULL,
);
register_setting(
'reading', // option group "reading", default WP group
'my_project_archive_page', // option name
$args
);
// add our new setting
add_settings_field(
'my_project_archive_page', // ID
__('Project Archive Page', 'textdomain'), // Title
'prfx_setting_callback_function', // Callback
'reading', // page
'default', // section
array( 'label_for' => 'my_project_archive_page' )
);
}
Jetzt können wir die Rückruffunktion für unser benutzerdefiniertes Feld erstellen, die unser HTML-Markup enthält:
/**
* Custom field callback
*/
function prfx_setting_callback_function($args){
// get saved project page ID
$project_page_id = get_option('my_project_archive_page');
// get all pages
$args = array(
'posts_per_page' => -1,
'orderby' => 'name',
'order' => 'ASC',
'post_type' => 'page',
);
$items = get_posts( $args );
echo '<select id="my_project_archive_page" name="my_project_archive_page">';
// empty option as default
echo '<option value="0">'.__('— Select —', 'wordpress').'</option>';
// foreach page we create an option element, with the post-ID as value
foreach($items as $item) {
// add selected to the option if value is the same as $project_page_id
$selected = ($project_page_id == $item->ID) ? 'selected="selected"' : '';
echo '<option value="'.$item->ID.'" '.$selected.'>'.$item->post_title.'</option>';
}
echo '</select>';
}
Danach haben Sie jetzt ein neues Dropdown-Feld unter Settings
> Reading
.
Das Feld ist mit allen Seiten gefüllt, Sie können eine auswählen und die Einstellung speichern.
Nun möchten Sie diese ausgewählte Seite in der Seitenliste in admin mark
. Diese Markierungen heißen state/s
. WordPress verwendet einen Filter, um diese Texte zum Titel display_post_states
hinzuzufügen.
/**
* Add custom state to post/page list
*/
add_filter('display_post_states', 'prfx_add_custom_post_states');
function prfx_add_custom_post_states($states) {
global $post;
// get saved project page ID
$project_page_id = get_option('my_project_archive_page');
// add our custom state after the post title only,
// if post-type is "page",
// "$post->ID" matches the "$project_page_id",
// and "$project_page_id" is not "0"
if( 'page' == get_post_type($post->ID) && $post->ID == $project_page_id && $project_page_id != '0') {
$states[] = __('My state', 'textdomain');
}
return $states;
}