Ich entwickle ein Plugin, das keinen benutzerdefinierten Beitragstyp verwendet, sondern separate Datenbanktabellen. Es ist ein Plugin, das eine Liste von Kursen mit Links anzeigt, die zu den verschiedenen Kursdetailseiten führen, auf denen der Benutzer dann einen Kurs abonnieren kann.
Im aktuellen Status verwende ich einen Shortcode, um die Plugins-Daten auf eine Seite mit einer benutzerdefinierten Seitenvorlage (page-course.php) zu übertragen.
Ich möchte mich jetzt the_title()
dynamisch ändern , je nach der Seite, die das Plugin anzeigt (Liste der Kurse, Seite mit Kursdetails mit Formularen, Seite mit Erfolg beim Einreichen von Formularen). Aber wenn ich das mit dem folgenden Filter mache, ändern sich auch die Links zu anderen Seiten in der Fußzeile:
<?php
add_filter('the_title', 'custom_page_title');
function custom_page_title() {
return 'Custom Title';
}
Bearbeiten
In der footer.php habe ich eine Funktion, die Fußzeilenverknüpfungen enthält, wp_nav_menu()
damit ich sie unter Darstellung> Menüs definieren kann. Mit dem obigen Filter ändern sich jedoch auch alle Links in der Fußzeile in "Benutzerdefinierter Titel". Ich möchte jedoch nur den Titel der Seite ändern, ohne die Menüverknüpfungen in der Fußzeile zu beeinflussen.
Beim Versuch, ein bedingtes Tag hinzuzufügen, sind in_the_loop()
die Fußzeilenlinks weiterhin betroffen, obwohl sie sich nicht in der Schleife befinden.
<?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 ist ähnlich wie bei dieser Frage: Filtern Sie das Problem mit dem Titel in nav , nur dass sich die betroffenen Links in der Fußzeile befinden und in_the_loop()
nicht funktionieren.
Wie kann ich Änderungen the_title()
vornehmen , während nur der Titel der aktuell angezeigten Seite und nicht die Links in der Fußzeile beeinflusst werden ?
Bearbeiten 2 - Lösung
Also habe ich es endlich geschafft:
<?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;
}
Die Datei page-listcourses.php ist eine benutzerdefinierte Beitragsvorlage, die ich der statischen Seite mit dem Namen "Kurse" zugewiesen habe.
Ich gehe davon aus, dass es vorher nicht funktioniert hat, da der Name der statischen Seite und der Dateiname der benutzerdefinierten Post-Vorlage identisch waren.
in_the_loop()
wird auf true
immer eingestellt, wenn the_post()
ausgelöst wird. Ohne zu tief in den Kern einzudringen und zu wissen, dass Navigationsmenüs selbst Schleifen sind , schätze ich, dass irgendwo auf dem Weg wp_nav_menu()
eine Schleife instanziiert und in_the_loop()
zur Rückkehr führt true
.