web-dev-qa-db-de.com

hinzufügen einer statischen Seite zu den Leseeinstellungen für den benutzerdefinierten Beitragstyp

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?

 reading settings 

Gibt es auch eine Möglichkeit, die ausgewählte Seite so in Pages zu markieren?

 enter image description here 

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?

4
YarGnawh

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;
}
4
LWS-Mo