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.
fuente
in_the_loop()
está configurado paratrue
cuandothe_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 hacein_the_loop()
que regresetrue
.Respuestas:
Yo usaría el
is_page_template()
condicional:Editar
Usaría este condicional dentro de su devolución de llamada de filtro:
Ahora, para aislar sólo los títulos de las páginas que utilizan la plantilla de página, usted puede tomar ventaja de otro parámetro que recibe
the_title
:$id
. Como conoce el Id. De la publicación para la que se está filtrando el título, puede consultar el_wp_page_template
meta de la publicación y asegurarse de que sea igual a la plantilla de su página:Editar 2
Si desea orientar específicamente la página "Cursos", úsela
is_page()
con la ficha de la página'courses'
o el título de la página de'Courses'
:Sin embargo, recomendaría cambiar
page-courses.php
a una Plantilla de página personalizada , lo que haría que todo este proceso sea mucho más robusto.fuente
get_post_meta( $id, '_wp_page_template', true )
vuelvedefault
y no sé qué hacer con esto. Cuando configuro 'page-course.php' en 'default', todos los enlaces de navegación cambian, excepto cuando engancho elthe_title
filtroloop_start
, entonces solo cambian los enlaces de pie de página. Verifiqué qué archivo de plantilla se usa, y es 'page-course.php' y no 'page.php' (que pensé que podría ser el predeterminado).Si solo desea editar el título de la página actual, use el
in_the_loop()
condicional, como en:fuente
Intente usar etiquetas condicionales para asegurarse de
the_title()
que solo se modifique en las páginas que desee.fuente
Si bien
is_page_template()
funcionará, prefiero poner este tipo de código en la plantilla de la página para tener todo el código que genera este tipo de página en un solo archivo.fuente
the_title()
? Ejemplos de código?get_header()
.the_title
es una mejor solución.