Estoy desarrollando un complemento que no usa un tipo de publicación personalizado, sino tablas de base de datos separadas. Es un complemento que muestra una lista de cursos con enlaces que conducen a las diferentes páginas de detalles del curso, donde el usuario puede suscribirse a un curso.
En el estado actual, estoy usando un código corto para obtener los datos de los complementos en una página con una plantilla de página personalizada (page-course.php).
Ahora quiero cambiar the_title()
dinámicamente, de acuerdo con la página que muestra el complemento (lista de cursos, página de detalles del curso con formularios, página de envío de formulario exitoso). Pero cada vez que hago eso con el siguiente filtro, los enlaces a otras páginas en el pie de página también cambian:
<?php
add_filter('the_title', 'custom_page_title');
function custom_page_title() {
return 'Custom Title';
}
Editar
En footer.php tengo una función que incluye enlaces de pie de página wp_nav_menu()
para poder definirlos en Apariencia> Menús. Pero con el filtro anterior, todos los enlaces en el pie de página también cambian a 'Título personalizado'. Pero solo quiero cambiar el título de la página, sin afectar los enlaces del menú en el pie de página.
Intentando agregar una etiqueta condicional, in_the_loop()
los enlaces de pie de página todavía se ven afectados, aunque no están en el bucle.
<?php
add_action( 'loop_start', 'set_custom_title' );
function set_custom_title() {
if ( in_the_loop() ) {
add_filter( 'the_title', 'custom_page_title' );
}
}
function custom_page_title() {
return 'Custom Title';
}
Es similar a esta pregunta: filtra el problema del título en la navegación , solo que los enlaces afectados están en el pie de página y in_the_loop()
no funcionan.
¿Cómo puedo cambiar the_title()
mientras solo afecta el título de la página actual que se muestra sin afectar los enlaces en el pie de página ?
Edición 2 - Solución
Así que finalmente lo hice funcionar:
<?php
add_action( 'loop_start', 'set_custom_title' );
function set_custom_title() {
add_filter( 'the_title', 'wpse83525_filter_the_title', 10, 2 );
}
function wpse83525_filter_the_title( $title, $id ) {
if ( 'page-listcourses.php' == get_post_meta( $id, '_wp_page_template', true ) ) {
return 'Custom Title';
}
return $title;
}
El archivo page-listcourses.php es una plantilla de publicación personalizada que asigné a la página estática llamada 'Cursos'.
Supongo que no funcionó antes porque el nombre de la página estática y el nombre de archivo de la plantilla de publicación personalizada eran los mismos.
in_the_loop()
está configurado para true
cuando the_post()
se dispara. Sin profundizar demasiado en el núcleo, y sabiendo que los menús de navegación son en sí mismos bucles , supongo que en algún lugar del camino, wp_nav_menu()
crea una instancia de bucle y hace in_the_loop()
que regrese true
.