Cambiar el título_título () de una página dinámicamente

9

Estoy desarrollando un complemento que no usa un tipo de publicación personalizada, sino tablas de base de datos independientes. Es un complemento que muestra una lista de cursos con enlaces que llevan a las diferentes páginas de detalles del curso, donde el usuario puede suscribirse a un curso.

En el estado actual, estoy usando un shortcode para obtener los datos de los complementos en una página con una plantilla de página personalizada (page-courses.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 éxito de envío de formularios). 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 el footer.php tengo una función que incluye enlaces de pie de página con wp_nav_menu() , así que puedo definirlos en Apariencia > Menús Pero con el filtro de arriba, 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.

Al intentar agregar una etiqueta condicional in_the_loop() , los enlaces de pie de página siguen 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: filtrar 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 funciona.

¿Cómo puedo cambiar the_title() mientras que solo afecta al título de la página actual que se muestra que no afecta a los enlaces en el pie de página ?

Edit 2 - Solution

Así que finalmente lo puse en funcionamiento:

<?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.

    
pregunta Gchtr 28.01.2013 - 22:39

4 respuestas

4

Yo usaría el is_page_template() condicional:

if ( is_page_template( 'page-courses.php' ) ) {
    // The current page uses your
    // custom page template;
    // do something
}

Editar

Debería usar este condicional dentro de su devolución de llamada de filtro:

function wpse83525_filter_the_title( $title ) {
    if ( is_page_template( 'page-courses.php' ) ) {
        return 'Custom Title';
    }
    return $title;
}
add_filter( 'the_title', 'wpse83525_filter_the_title' );

Ahora, para aislar solo los títulos de las páginas que usan su plantilla de página, puede aprovechar el otro parámetro pasado a the_title : $id . Ya que conoce el Id. De la publicación para la cual se filtra el título, puede consultar el meta _wp_page_template post y asegurarse de que sea igual a la plantilla de su página:

function wpse83525_filter_the_title( $title, $id ) {
    if ( 'page-courses.php' == get_post_meta( $id, '_wp_page_template', true ) ) {
        return 'Custom Title';
    }
    return $title;
}
add_filter( 'the_title', 'wpse83525_filter_the_title', 10, 2 );

Editar 2

Si desea apuntar a la página "Cursos" específicamente, use is_page() con la barra de página 'courses' , o el título de la página de 'Courses' :

function wpse83525_filter_the_title( $title ) {
    if ( is_page( 'Courses' ) ) {
        return 'Custom Title';
    }
    return $title;
}
add_filter( 'the_title', 'wpse83525_filter_the_title' );

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 sólido.

    
respondido por el Chip Bennett 29.01.2013 - 16:09
1

Si solo desea editar el título de la página actual, use el in_the_loop() condicional, como en:

add_filter( 'the_title', 'modify_onpage_title', 10, 2);

function modify_onpage_title( $title , $id = null ) {

    if(!in_the_loop()){
        // returns early if not relevant (as in custom menu loops)
        return $title;
    }

    // Tweak your title
    $title = "Yolo! ". $title;
    return $title;
}
    
respondido por el pixeline 08.11.2016 - 13:08
0

Intente usar etiquetas condicionales para asegurarse de que the_title() solo se modifique en las páginas que desee.

    
respondido por el theMojoWill 29.01.2013 - 15:50
0

Si bien is_page_template() funcionará, prefiero colocar 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 archivo.

    
respondido por el Mark Kaplun 29.01.2013 - 17:58

Lea otras preguntas en las etiquetas