Es gibt eingebaute bedingte WordPress-Funktionen zum Testen einer Seite
if ( is_page(2) ) {
// stuff
}
Oder zum Testen, ob eine Seite ein Kind einer bestimmten Seite ist
if ( $post->post_parent == '2' ) {
// stuff
}
Aber es gibt keine eingebaute Funktion, die diese beiden Dinge kombiniert, was ein ziemlich häufiger Bedarf ist. Zum Beispiel das Laden einer speziellen CSS-Seite für einen ganzen „Zweig“ von Inhalten. Wie eine „Videos“-Seite und all ihre einzelnen Videoseiten.
Diese Funktion (zum Hinzufügen zur functions.php-Datei) erstellt eine neue logische Funktion, die auf diese Weise verwendet werden kann.
function is_tree($pid) { // $pid = The ID of the page we're looking for pages underneath
global $post; // load details about this page
if(is_page()&&($post->post_parent==$pid||is_page($pid)))
return true; // we're at the page or at a sub page
else
return false; // we're elsewhere
};
Verwendung
if (is_tree(2)) {
// stuff
}
Hey,
Wie kann ich das mit Kategorien zum Laufen bringen?
Wenn ich einfach nur `is_page` durch `is_category` ersetze, ist es für die Kategorieübersicht wahr, aber nicht für alle Artikel darin.
Paul
Das ist gut, aber es funktioniert nur eine Ebene tief.
Aus dem WordPress Codex
„Beachten Sie, dass bei mehr als einer Seitenebene die Elternseite diejenige ist, die direkt darüber liegt, und nicht die ganz oben in der Hierarchie.“
Mehr dazu im WP Codex: Bedingte Tags
P.S.
Ich hoffe, niemand hat mit diesem Snippet Geld verdient, es stammt direkt aus dem WordPress Codex.
Hinweis: Ich hatte dieses Problem „funktioniert nur eine Ebene tief“.
Aber diese Funktion funktioniert mit allen „Vorfahren“, nicht nur mit einzelnen „Kind“-Seiten.
Ebenfalls direkt aus dem WP Codex http://codex.wordpress.org/Conditional_Tags Funktion
Port 80! HEIRATE MICH.
Danke.
Port 80 – Danke!
Die `is_tree()`-Funktion von Port 80 erledigt die Aufgabe, kann aber eine Benachrichtigung auslösen, wenn PHP-Benachrichtigungen aktiviert sind. Als Workaround habe ich hinzugefügt:
if ( $root < 0) { return false; }direkt nach
$root = count($ancestors) - 1;und direkt vor
$parent = $ancestors[$root];Ich habe noch nicht viel getestet, aber bisher scheint das wie erwartet zu funktionieren.
Nun, mein „größer als“-Winkelzeichen wurde escaped, aber hier ist die Idee:
if ($root [KLEINER ALS] 0) { return false; }Ich verwende diese Version, die es ermöglicht, Seite/Kind/Enkelkind anhand des Slugs zu finden.
Ich denke, sie kann etwas Verbesserung gebrauchen und ist nicht sehr elegant, aber ich hoffe, sie hilft.
Tolles Snippet hier!
Wie kann man das verwenden, wenn man keine bestimmte Seiten-ID angeben möchte? Ich muss dynamisch prüfen, ob die aktuelle Seite, auf der ich mich befinde, Teil eines Zweigs ist (egal ob Elternteil oder Kind), und wenn ja, dann ein Menü ausgeben, basierend auf der automatisch abgerufenen Seiten-ID.
Jede Hilfe oder jeder Vorschlag wird geschätzt.
Danke dafür! :)
Danke! Brauchte das für die Sidebar meines WordPress-Themes :)
Cool, vielen Dank für das Posten! Sehr nützlich =)
Einfach großartig, danke!
Tolles Tutorial! Danke! Ich habe auch einen anderen Ansatz dafür.
Ich habe herausgefunden, dass das obige Tutorial besser ist als mein Ansatz. Ich werde diesen Ansatz von nun an verwenden.
Musste das heute angehen, und das Folgende hat perfekt für mich funktioniert (funktioniert mit jeder Verschachtelungsebene).
Danke Mann, das ist, was ich brauchte.
Hey Ryan. Das ist genau das, was mir gefehlt hat.. danke fürs Posten!
Ich bin so froh, dass Sie das gepostet haben! Port 80s Code ergab wirklich nicht viel Sinn… das hier war super kurz und effizient und machte genau das, was ich tun musste, ohne viele zufällige Variablen, die Verwirrung stiften :)
Danke!
Hallo,
Ich frage mich nur nach diesem Coding. Ich habe eine Website, die ich baue, auf der das Elternteil Kindseiten hat. Z.B. Ich habe eine Elternseite namens
ÜBER UNS (Elternseite)
Unternehmensübersicht (Kindseite)
Direktor (Kindseite)
Die Unternehmensübersicht ist in Ordnung, da es die gleiche Seite wie die Über-uns-Seite ist. Aber wenn ich auf die Direktor-Seite klicke, möchte ich, dass die Elternseite „ÜBER UNS“ ebenfalls hervorgehoben wird. Also werden beide Seiten hervorgehoben, die Kind- und die Elternseite. Das von mir gemachte Coding ist wirklich einfach. Es ist wie folgt:
ÜBER UNS – Nav-Coding.
<a class="about_us" href="”
>
und DIREKTOR – Nav-Coding.
<a href="”
class=”director”>
Gibt es ein Coding, mit dem ich sagen kann, wenn die Elternseite, auf der wir uns befinden, „ÜBER UNS“ ist, dass sie auch als ausgewählt angezeigt wird? Können Sie mir ein Beispiel schreiben?
Vielen Dank im Voraus.
Oh und der Link zur Website ist http://www.fairwayviewapartmentssamoa.com
Ich danke Ihnen außerordentlich für das Teilen. Ich bin nun schon mehrmals auf Ihrer Website gelandet, während ich nach Hilfe bei verschiedenen Dingen gesucht habe. Machen Sie weiter so und nochmals vielen Dank.
Gibt es eine Möglichkeit, dies anhand des Slugs zum Laufen zu bringen?
Ich stelle mir vor, wir müssten die ID aus dem Slug holen.
Ich werde am Wochenende damit herumspielen.
Ich bin mir nicht sicher, ob Sie das jemals herausgefunden haben, aber für diejenigen, die es wissen wollen:
Fügen Sie dies zu Funktionen hinzu.
Um dies für den Slug anstelle der Seiten-ID zum Laufen zu bringen. Und ja, `$pid` wird im Funktionsaufruf benötigt. Ich bin mir nicht sicher, aus welchem genauen Grund, aber `$slug` funktioniert dort nicht.
Das war genau das, was ich brauchte!!!
Ich habe versucht, die Untermenü-Navigationslinks auf Seiten basierend auf dem Kind eines Elternteils zu bearbeiten.
Kurz gesagt, wenn ich auf einer Kindseite war, musste das Navigationsmenü die Links des Elternteils des Kindes und nicht des Kindes selbst widerspiegeln.
Dieses Tutorial hat mir geholfen, in die richtige Richtung zu gehen. Jetzt kann ich der aktuellen Seite eine benutzerdefinierte Klasse hinzufügen!
Das hat perfekt funktioniert.
Vielen Dank.
Hallo,
Das ist genau das, was ich brauche. Und das Beste ist, dass Ihr Snippet wie am Schnürchen funktioniert! Vielen Dank :)
Vielen Dank dafür! Es hat mir den Hintern gerettet
Ich verwende diese Funktion bei fast jedem Projekt!
if (have_problem()) {
gehe zu css-tricks.com
}
Genau :d
Das ist, was ich gesucht habe.
Danke.
Toller Tipp.
Danke fürs Teilen :)
Ich liebe dieses hier immer noch (: Prost
Man könnte es so machen:
und man kann es so aufrufen:
Jetzt bekommst du ein Hallo Welt auf jeder Kindseite von myPageSlug1.
Sweet. Hat mir den Hintern gerettet!
Wie schreibt man eine Funktion, die prüft, ob **$post->post_parent** gleich einer oder mehreren IDs ist, anstatt nur einer einzelnen ID?
Chris, warum schließt du diesen Thread nicht auch ab. Du hast bereits eine Menge anderer nützlicher Threads geschlossen.
Gibt es einen Code oder eine Bedingung, die prüft, ob die aktuelle Seite eine Unterseite hat oder nicht? Ich meine nicht, dass die aktuelle Seite eine Elternseite hat oder nicht.
Ich hab's :)))
query(array(‘post_type’ => ‘page’));
$id = $post->ID;
$children = get_page_children( $id, $all_wp_pages );
if($children) {
echo “Parent”;
}
?>
Korrektur des Codes.
query(array(‘post_type’ => ‘page’));?>
<?php $id = $post->ID;
Hier ist meine Richtung. Hoffentlich ist sie für jemanden hilfreich, der sowohl die Tiefenabhängigkeit als auch spezifische Unterseitininhalte anzeigen möchte. Ich verwende hier das Plugin `list_pages_at_depth()`. Sucht nach Kindern auf der zweiten und dritten Ebene und zeigt dann einige Seiten an.
Sehr hilfreich, vielen Dank
Ich habe eine Funktion erstellt, die die aktuelle Seite und alle Elternseiten betrachtet. Sie durchsucht die Hierarchie Schritt für Schritt, um sie mit dem Slug-URL abzugleichen. Ich habe den Slug-URL anstelle der ID gewählt, da diese zwischen unseren lokalen, Staging- und Produktionsumgebungen immer unterschiedlich sind, aber die URL konsistent bleibt.
Ich habe dafür einen Gist erstellt:
https://gist.github.com/philcook/15bd50aeb8f80315d2bcaa9720c45bbb
Chris Coyier, WOW! Danke!
Diese Zeilen von Port80 scheinen ein Überbleibsel zu sein. `$parent` wird nie verwendet, daher ist `$root` auch nicht erforderlich.
Und was ist mit bbPress zum Beispiel? Weil es dort nicht funktioniert :(