Agregar página estática a la configuración de lectura para el tipo de publicación personalizada

3 minutos de lectura

avatar de usuario
YarGnawh

Creé tipos de publicaciones personalizadas y quiero permitir que el usuario elija la página estática para la página de archivo. Por ejemplo, en la página Publicar. Me gustaría agregar una página de Proyectos: [ Dropdown ]

¿Hay alguna forma de agregar otra opción de página estática a la página de configuración de lectura? ¿Hay un enlace existente para modificarlo?

ajustes de lectura

Además, ¿hay alguna forma de marcar la página seleccionada como esta en Páginas?

ingrese la descripción de la imagen aquí

Actualizar:

Mirando a /wp/wp-admin/includes/template.php:1768

/**
 * 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>";
    }
}

Parece que hay ganchos para post_state, pero ¿cómo lo configuras?

También, mirando /wp-admin/options-reading.php:83

¿Hay alguna manera de modificar la configuración de lectura sin modificar el archivo?

¿Hay alguna forma de agregar otra opción de página estática a la página de configuración de lectura?

Sí.

Código:

/**
 * Adds a custom field: "Projects page"; on the "Settings > Reading" page.
 */
add_action( 'admin_init', function () {
    $id = 'page_for_projects';
    // add_settings_field( $id, $title, $callback, $page, $section = 'default', $args = array() )
    add_settings_field( $id, 'Projects page:', 'settings_field_page_for_projects', 'reading', 'default', array(
        'label_for' => 'field-' . $id, // A unique ID for the field. Optional.
        'class'     => 'row-' . $id,   // A unique class for the TR. Optional.
    ) );
} );

/**
 * Renders the custom "Projects page" field.
 *
 * @param array $args
 */
function settings_field_page_for_projects( $args ) {
    $id = 'page_for_projects';
    wp_dropdown_pages( array(
        'name'              => $id,
        'show_option_none'  => '&mdash; Select &mdash;',
        'option_none_value' => '0',
        'selected'          => get_option( $id ),
    ) );
}

/**
 * Adds page_for_projects to the white-listed options, which are automatically
 * updated by WordPress.
 *
 * @param array $options
 */
add_filter( 'whitelist_options', function ( $options ) {
    $options['reading'][] = 'page_for_projects';

    return $options;
} );

Avance:

ingrese la descripción de la imagen aquí

Además, ¿hay alguna forma de marcar la página seleccionada como esta en Páginas?

Sí.

Código:

/**
 * Filters the post states on the "Pages" edit page. Displays "Projects Page"
 * after the post/page title, if the current page is the Projects static page.
 *
 * @param array $states
 * @param WP_Post $post
 */
add_filter( 'display_post_states', function ( $states, $post ) {
    if ( intval( get_option( 'page_for_projects' ) ) === $post->ID ) {
        $states['page_for_projects'] = __( 'Projects Page' );
    }

    return $states;
}, 10, 2 );

Avance:

ingrese la descripción de la imagen aquí

Y si debe o necesita hacerlo, puede usar JavaScript/jQuery para mover el “Página de proyectos” campo a abajo la “Página de publicaciones” en el “Su página de inicio muestra” columna.

  • ¿Cómo debería llamarse el archivo de plantilla que utilizará la página de proyectos?

    – Sheedo

    30 de mayo de 2019 a las 5:39

  • @Sheedo Depende de en qué nombre le quieres dar a la plantilla.

    – Sally C.J.

    11 de junio de 2019 a las 0:25

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad