Wordpress benutzerdefinierte Post-Typ-Hierarchie und Menü-Hervorhebung (current_page_parent)

8

Ich habe einen benutzerdefinierten Post-Typ von "Portfolio" und Seite mit einer Vorlage erstellt, die alle Posts abruft, die mit diesem benutzerdefinierten Post-Typ übereinstimmen.

Das Problem ist, wenn ich in den eigentlichen Beitrag drillt, scheint der Beitrag unter "Blog" im Hauptmenü zu markieren (zeigt current_page_parent als Klasse)

Die Permalink-URL ist korrekt: www.site.com/portfolio/post-slug

Aber das Menü denkt, dass der Elternteil "Blog" ist.

Dies ist offensichtlich ein hierarchisches Problem, aber ich weiß nicht, was ich tun soll, um es zu beheben.

    
Craig 17.07.2010, 01:43
quelle

5 Antworten

10

Es scheint, dass dies ein Problem mit dem Kern-Wordpress-Code ist; Der Code, der die Menüklassen generiert, fügt Ihrer Blogseite überall current_page_parent hinzu, außer wenn statische Seitenvorlagen angezeigt werden.

(Dies wurde beiläufig in Ссылка besprochen.)

Sie können dies jedoch mit benutzerdefiniertem Code umgehen, indem Sie den Filter page_css_class verwenden. Fügen Sie beispielsweise functions.php etwas hinzu (nicht 100% getestet):

%Vor%

Ersetzen Sie 57 natürlich durch die ID Ihrer Portfolioseite. Dadurch wird current_page_parent beim Drucken der Blogseite entfernt und current_page_parent wird zu Ihrer Portfolioseite hinzugefügt, wenn entweder ein einzelnes Portfolio angezeigt oder die Portfolioseite selbst angezeigt wird.

    
user11977 17.07.2010, 03:50
quelle
5
___ qstnhdr ___ Wordpress benutzerdefinierte Post-Typ-Hierarchie und Menü-Hervorhebung (current_page_parent) ___ answer3270171 ___

Es scheint, dass dies ein Problem mit dem Kern-Wordpress-Code ist; Der Code, der die Menüklassen generiert, fügt Ihrer Blogseite überall current_page_parent hinzu, außer wenn statische Seitenvorlagen angezeigt werden.

(Dies wurde beiläufig in Ссылка besprochen.)

Sie können dies jedoch mit benutzerdefiniertem Code umgehen, indem Sie den Filter page_css_class verwenden. Fügen Sie beispielsweise functions.php etwas hinzu (nicht 100% getestet):

%Vor%

Ersetzen Sie 57 natürlich durch die ID Ihrer Portfolioseite. Dadurch wird current_page_parent beim Drucken der Blogseite entfernt und current_page_parent wird zu Ihrer Portfolioseite hinzugefügt, wenn entweder ein einzelnes Portfolio angezeigt oder die Portfolioseite selbst angezeigt wird.

    
___ answer14901749 ___

WP-Ticket: Ссылка

%Vor%     
___ antwort18744237 ___

Hier ist meine optimierte / erweiterte Version der zuvor vorgeschlagenen Lösungen, die fast vollständig automatisiert ist. Keine zusätzlichen CSS- oder Menüattribute erforderlich.

Diese Version ruft dynamisch eine Liste mit benutzerdefinierten Post-Typen ab. Wenn der aktuelle Post-Typ ein benutzerdefinierter Post-Typ ist, wird die Klasse 'current_page_parent' aus allen Menüelementen entfernt.

Außerdem prüft es jeden Menüeintrag, um zu sehen, ob es für eine Seite mit einer Seitenvorlage wie "page- {custom_post_type_slug} .php" ist, und wenn ja, wird die Klasse "current_page_parent" hinzugefügt.

Die Filterpriorität ist 1, da einige Themes den aktuellen_Seiten_Parent / etc ersetzen. Klassen mit einer Klasse wie 'aktiv' (zB 'roots' tut dies), also muss dieser Filter zuerst ausgeführt werden.

Zuletzt verwendet es 3 statische Variablen, da diese Funktion wiederholt aufgerufen wird und diese (offensichtlich) durch alle Aufrufe gleich bleiben.

%Vor%

PS. Nur um ein Manko in allen Nicht-CSS-Lösungen aufzuzeigen, die ich bisher gesehen habe, einschließlich meiner eigenen: Etwas, das nicht berücksichtigt wird, ist das Hervorheben des Menüpunktes Elternteil / Vorfahre eines Gegenstandes, der mit einer Seite verknüpft ist, die Posts des aktuellen benutzerdefinierten Posttyps anzeigt. Betrachten Sie einen benutzerdefinierten Beitragstyp "Produkt" und ein Menü wie:

%Vor%

"Produkte" ist eine Seite mit einer Vorlage "page-product.php" und zeigt eine Übersicht der Beiträge vom Typ "Produkt". Es wird aufgrund der veröffentlichten Lösung hervorgehoben. Allerdings sollte "Unternehmen" als Eltern / Vorfahr ebenfalls hervorgehoben werden, ist es aber nicht. Etwas zu beachten.

    
___ tag123menu ___ Ein Menü ist ein Benutzerschnittstellenmechanismus, der dem Benutzer die Möglichkeit bietet, Anwendungsvorgänge anzuzeigen und auszuführen. (Generisch; bitte verwenden Sie stattdessen Plattform- und / oder Sprachtags, wenn möglich) ___ tag123wordpress ___ Dieses Tag ist für programmierspezifische Fragen im Zusammenhang mit dem Content-Management-System WordPress. Fragen zur Theme-Entwicklung, WordPress-Administration, Best Practices für die Verwaltung und Serverkonfiguration stehen hier außer Frage und werden am besten bei Stack Exchange WordPress Development gestellt. ___ answer4408816 ___

Ich habe mich mehr umgesehen und einen anderen Weg gefunden, dies zu tun.

%Vor%

}

Ich habe Hilfe von diesem Beitrag erhalten und dann geändert, um auch die "current_page_parent" -Klasse von der Blog-Seite zu entfernen. Ссылка

Herzlich Vayu

    
___ tag123highlight ___ steht für Fragen, bei denen Text oder andere visuelle Elemente hervorgehoben werden. ___ tag123customposttype ___ Ein benutzerdefinierter Inhaltstyp für das Open Source CMS System WordPress. ___ answer15594737 ___

Hier ist eine Lösung, die für mich funktioniert hat, ohne dass ich meinen benutzerdefinierten Beitragstyp oder Menü-ID oder Seiten-ID im Code definieren muss:

Ссылка

%Vor%     
___ tag123hierarchical ___ Für Probleme beim Anordnen von Daten und / oder Ressourcen in einer Hierarchie. ___ qstntxt ___

Ich habe einen benutzerdefinierten Post-Typ von "Portfolio" und Seite mit einer Vorlage erstellt, die alle Posts abruft, die mit diesem benutzerdefinierten Post-Typ übereinstimmen.

Das Problem ist, wenn ich in den eigentlichen Beitrag drillt, scheint der Beitrag unter "Blog" im Hauptmenü zu markieren (zeigt current_page_parent als Klasse)

Die Permalink-URL ist korrekt: www.site.com/portfolio/post-slug

Aber das Menü denkt, dass der Elternteil "Blog" ist.

Dies ist offensichtlich ein hierarchisches Problem, aber ich weiß nicht, was ich tun soll, um es zu beheben.

    
___
Tanuki 11.09.2013 14:40
quelle
3

WP-Ticket: Ссылка

%Vor%     
meloniq 15.02.2013 19:15
quelle
0

Ich habe mich mehr umgesehen und einen anderen Weg gefunden, dies zu tun.

%Vor%

}

Ich habe Hilfe von diesem Beitrag erhalten und dann geändert, um auch die "current_page_parent" -Klasse von der Blog-Seite zu entfernen. Ссылка

Herzlich Vayu

    
Vayu Robins 10.12.2010 12:28
quelle
0

Hier ist eine Lösung, die für mich funktioniert hat, ohne dass ich meinen benutzerdefinierten Beitragstyp oder Menü-ID oder Seiten-ID im Code definieren muss:

Ссылка

%Vor%     
dtbaker 24.03.2013 03:09
quelle