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';
}
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í ?
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ý.
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
}
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 );
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.
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;
}
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.
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.