Agregar página estática a la configuración de lectura para el tipo de publicación personalizada
⏰ 3 minutos de lectura
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?
Además, ¿hay alguna forma de marcar la página seleccionada como esta en Páginas?
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' => '— Select —',
'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:
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:
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 tú 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?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
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