it-swarm-eu.dev

Dynamicky změňte the_title () stránky

Vyvíjím plugin, který nepoužívá vlastní typ příspěvku, ale samostatné databázové tabulky. Je to plugin, který zobrazuje seznam kurzů s odkazy, které vedou k různým stránkám s podrobnostmi o kurzu, kde se uživatel může přihlásit k odběru kurzu.

V současném stavu používám krátký kód, aby se data zásuvných modulů dostala na stránku s vlastní šablonou stránky (page-courses.php).

Nyní chci změnit the_title() dynamicky, podle stránky, kterou plugin zobrazuje (seznam kurzů, stránka s podrobnostmi o formulářích, stránka s úspěšným vyplněním formuláře). Ale když to udělám s následujícím filtrem, změní se také odkazy na jiné stránky v zápatí:

<?php

add_filter('the_title', 'custom_page_title');
function custom_page_title() {
    return 'Custom Title';
}

Upravit

V footer.php mám funkci, která obsahuje odkazy na zápatí s wp_nav_menu(), takže je mohu definovat v Vzhled> Nabídky. S výše uvedeným filtrem se však všechny odkazy v zápatí také změní na „Vlastní titul“. Ale chci jen změnit název stránky, což nemá vliv na odkazy v zápatí.

Pokus o přidání podmíněné značky in_the_loop() zápatí odkazy jsou stále ovlivněny, i když nejsou ve smyčce.

<?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';
}

Je to podobné této otázce: filtr the_title problém v nav , jen že odkazy jsou ovlivněny v zápatí a in_the_loop() nefunguje.

Jak mohu změnit the_title() a ovlivnit pouze název právě zobrazené stránky neovlivnit odkazy v zápatí ?

Edit 2 - Řešení

Tak jsem to konečně dostal do práce:

<?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;
}

Soubor page-listcourses.php je šablona vlastního příspěvku, kterou jsem přidělil statické stránce nazvané 'Courses'.

Předpokládám, že to nefungovalo dříve, protože název statické stránky a názvu vlastní šablony šablon byl stejný.

9
Gchtr

Použil bych is_page_template() podmíněné:

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

Upravit

Použili byste toto podmíněné uvnitř vašeho zpětného volání filtru:

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' );

Chcete-li izolovat pouze názvy stránek, které používají šablonu stránky, můžete využít výhod jiného parametru předaného souboru the_title: $id. Protože víte, že ID příspěvku, pro který je název filtrován, můžete dotazovat meta _wp_page_template posta a zajistit, že se rovná vaší šabloně stránky:

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 );

Upravit 2

Pokud chcete cílit na stránku „Kurzy“, použijte stránku is_page() se stránkou slug 'courses' nebo názvem stránky 'Courses':

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

Přesto bych doporučil změnit page-courses.php na Custom Page Template , což by tento proces učinilo mnohem robustnějším.

5
Chip Bennett

Pokud chcete pouze upravit aktuální název stránky, použijte in_the_loop()conditional, jako v:

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;
}
1
pixeline

Zkuste použít podmíněné tagy aby bylo zajištěno, že the_title() bude upravováno pouze na stránkách, které chcete.

0
theMojoWill

Zatímco is_page_template() bude fungovat, dávám přednost tomu, aby tento typ kódu do šablony stránky měl celý kód, který generuje tento typ stránky v jednom souboru.

0
Mark Kaplun