Ich verwende den folgenden Code, um den Titel von WordPress- Posts und -Seiten zu ändern . Aber es ändert auch die Titel der Navigationsmenüelemente, die ich vermeiden möchte.
Ich möchte den Titel von Posts und Seiten in ändern: Homepage , alle Archivseiten und alle Widgets (Widget für aktuelle Posts, Widget für zufällige Posts usw.)
Sowohl im Stapelüberlauf als auch im WP-Stapelaustausch gibt es ähnliche Fragen, die die Verwendung der in_the_loop()
Funktion vorschlagen . Leider funktioniert es bei mir nicht, denn wenn ich es platziere, wirkt es sich auch auf die Seitenleisten-Widgets aus.
Das heißt, wenn ich in_the_loop()
Funktion, the_title
Filter wirkt sich nicht auf recent posts widget
, random post widget
usw.
Wie kann ich also the_title
Filter für Nur post
und page
Titel anwenden , aber nicht für Menütitel?
function pppp_title_update( $title, $id = null ) {
if ( ! is_admin() ) {
if(is_singular(array('post','page')) || is_archive() || is_home()){
if(in_the_loop()){
$current_post_id = get_the_ID();
$new_titile = get_post_meta($current_post_id, 'pp_new_title',true);
return $new_titile;
}
}
}
return $title;
}
add_filter( 'the_title', 'pppp_title_update', 10, 2 );
if( ! is_nav_menu_item( $id ) ){ ... }
innerhalb Ihres Filterrückrufs versucht , das Filtern des Titels von Navigationsmenüelementen zu vermeiden?if( ! is_nav_menu_item( $id ) )
Mit check wird ein benutzerdefinierter Link zum Navigationsmenüelement ausgeschlossen. Wenn es sich bei dem Navigationsmenüelement selbst jedoch um eine Seite oder einen Beitrag handelt, wird er zweimal mit demthe_title
Filter gefiltert . In diesem Fall funktioniert diese Bedingung nur einmal (dh nicht, wennthe_title
zum Filtern des ursprünglichen Beitrags- / Seitentitels im Menü ausgelöst wird).Antworten:
Problembeschreibung:
Lassen Sie mich zuerst die Frage umformulieren. Du möchtest:
Setzen Sie allen einen neuen Titel
post
und geben Sie ihnpage
aus einem Metafeld ein.Sie möchten, dass dies überall geschieht (Startseite, einzelne Seite, Widgets usw.)
Sie möchten jedoch nicht, dass diese Titeländerung erfolgt, wenn sich der Titel im Navigationsmenü befindet.
Lösung:
Bevor ich Ihnen den CODE gebe, möchte ich zunächst einige Punkte erläutern (basierend auf Ihrem CODE):
So ändern Sie die Titel aller Beiträge und Seiten:
Sie kennen die Verwendung von
the_title
Filtern bereits. Wenn Sie jedoch auf alle Titel abzielenpost
undpage
diese eingeben möchten (jedoch keine benutzerdefinierten Beitragstypen), gilt folgende Bedingung:wird nicht funktionieren. Beispielsweise wird der benutzerdefinierte Beitragstyp auf einer Archivseite oder der Startseite geändert. Diese Bedingung prüft nicht, ob der Titel, den wir filtern, ein
page
oder einpost
Typ ist. Stattdessen wird überprüft, ob die Seite selbst entweder eine Singular- (post
oderpage
) oder eine Archivseite (Kategorie, Tag usw.) oder die Startseite ist. Daher sind auch benutzerdefinierte Beitragstypen auf diesen Seiten betroffen. Wenn sich auf einer benutzerdefinierten Post-Typ-Seite (Singular) ein Widget befindet, sind diese Logikpage
oderpost
Titel in diesem Widget dort nicht betroffen.Um dies zu beheben, benötigen wir eine andere Prüfung, wie zum Beispiel:
Warum der Titel des Navigationsmenüs ebenfalls geändert wird und wie Sie ihn stoppen können:
WordPress wendet den
the_title
Filter zweimal auf den Titel der Navigationsmenüelemente an (wenn die Menüelemente vorhandenen Posts oder Seiten entsprechen).Zuerst als entsprechender Beitrags- oder Seitentitel. Dies geschieht in der
wp_setup_nav_menu_item()
Funktion derwp-includes/nav-menu.php
Datei.Dann als Menüelementtitel selbst. Dies geschieht in der
Walker_Nav_Menu
Klasse.Für Ihre Anforderung müssen wir den
the_title
Filter beide Male stoppen .Glücklicherweise hat WordPress zwei Filter:
pre_wp_nav_menu
Brände vor dem Filtern von Menütiteln undwp_nav_menu_items
Brände nach dem Filtern von Menütiteln. Mit diesen beiden Filtern können wir also zuerst denthe_title
Filter für Titel von Navigationsmenüelementen entfernen und dann denthe_title
Filter für andere Titel wieder hinzufügen .CODE
Sie können den folgenden CODE in der
functions.php
Themendatei oder als separates Plugin verwenden:quelle
Der WordPress-Navigationseditor kann den Menütitel unabhängig vom Titel des Beitrags / der Seite ändern.
Wenn Sie mehr automatisierten Lösungscode benötigen, wird der Titel des Beitrags / der Seite überall mithilfe des
the_title
Filters ersetzt, der Standardtitel des Menüelements wird jedoch mithilfe des Filters wiederhergestelltnav_menu_item_title
.quelle
Wenn Sie das Post-Objekt haben (get_the_ID (); oder $ post-> ID; sind im Wesentlichen identisch), siehe /programming/22351038/get-the-current-page-id-inside-wordpress- Plugin-Seite , dann sollten Sie auch in der Lage sein, entweder https://developer.wordpress.org/reference/functions/get_post_type/ zu verwenden, um den Typ zu überprüfen oder
quelle