Wie entdecke ich den benutzerdefinierten Beitragstyp "Slug", wenn ich mich auf einer Archivseite befinde?
Wenn zum Beispiel /products/
die archive-products.php
Vorlage ausgelöst wird, wie erhalte ich (pragmatisch) den Post Type Slug?
Vielen Dank
custom-post-types
archives
custom-post-type-archives
Ben Everard
quelle
quelle
get_queried_object()
würde in weniger Zügen zu den gleichen Informationen kommen.$posttype = get_query_var('post_type');
... Ich habe eine umfassende Alternative hinzugefügt.Ich benutze dies außerhalb der Schleife in der Vorlage archive.php, um herauszufinden, in welchem benutzerdefinierten Post-Archiv ich mich befinde.
Es ist eine Kombination der von @toscho und @Rarst empfohlenen Methoden:
Update: @majick wies darauf hin, dass dies nur funktioniert, wenn Sie den Rewrite-Slug für Ihr CPT festgelegt haben. Rewrite Slug ist optional, wenn ein CPT registriert wird, und verwendet standardmäßig post_type, wenn es nicht festgelegt ist.
quelle
Notice: Undefined property: stdClass::$rewrite in ***\wp-content\themes\marks-remarks\archive.php on line 4
Die Antworten werden verwirrend. Und vielleicht bin ich auch, aber die Schlagzeile lautet:
Wenn Sie die Zielseite eines Archivs vom Typ "Post" meinen und wenn Sie
is_post_type_archive()
zurückkehrentrue
, möchten Sie den Slug, der auf das aktuelle Anzeigearchiv reagiert :- ENDE DER BEANTWORTUNG DER FRAGE -
Erläuterung:
Sie können sich nicht auf die registrierte Schnecke verlassen . Wordpress ist auch nicht. Wenn Sie beispielsweise
get_post_type_archive_link()
Wordpress anrufen, überprüfen Sie die aktuellen Umschreiberegeln für Ihre Installation .Wo immer Sie sich befinden, innerhalb oder außerhalb des Loops, des aktuellen Archivs oder eines einzelnen Posts, kehren Sie den
get_post_type_archive_link()
Mechanismus um. (Permalinks aktiviert.)Überlegungen:
Wie hier erwähnt, können die Beitragstypen in der aktuellen Abfrage ein sein
array
. Sie können Ihre Absichten weiter verfolgen, indem Sie den gewünschten Beitragstyp herausfiltern. Beispiel:oder
Eine andere Sicht:
Woocommerce-Beispiel ist mit dem Post-Typ-Objekt "Produkte" registriert, verwendet jedoch in Wirklichkeit den umgeschriebenen Regelnamen (Shop):
quelle
Es ist zu beachten, dass, wenn
has_archive
bei der Registrierung des benutzerdefinierten Beitragstyps der Wert true festgelegt wird, das Beitragstyparchiv/cptslug/
intern neu geschrieben wird?post_type=cptslug
. Das würde also auch heißenis_post_type_archive()
, dass es wahr wird.Leider in dem die eingetragene Rewrite Slug ist unterschiedlich auf den Post - Typen, sind Sie nicht wirklich zuverlässig die bekommen
post_type
. z.B. Wenn Ihr Beitragstypmyplugin_cars
und Ihr Umschreibefehler warencars
und Sie dies erhalten müssen, schlägtmyplugin_cars
auch dies fehl (um Fehler zu vermeiden, wenn das aktuell abgefragte Objekt kein benutzerdefinierter Beitragstyp ist):Aber weil
is_post_type_archive
es stimmt, ist dies zuverlässiger:Aber Moment mal, es gibt noch mehr ... mit ein wenig Testen stellt sich heraus, dass es auch nicht so einfach ist ... Was ist, wenn Sie sich auf einer Taxonomie-Archivseite mit mehreren Beitragstypen in der Taxonomie befinden? Oder weisen Sie Beitrags-Tags einem anderen benutzerdefinierten Beitragstyp als dem Beitrag zu? Oder befinden Sie sich auf einer Autorenarchivseite? Datum Archivseite? ... oder haben sogar einen Komplex
tax_query
odermeta_query
fürWP_Query
?Die einzig verlässliche Antwort (ohne Prüfung für jeden möglichen Archivierungsfall) besteht darin, die tatsächlichen Posts in der Abfrage zu schleifen ... Hier ist die vollständige Funktion, mit der ich Singular- und Archivseiten bearbeitet habe und die es Ihnen ermöglicht, optional eine zu übergeben Benutzerdefiniertes Abfrageobjekt (oder Beitragsobjekt / Beitrags-ID für einzelne Beiträge):
Dies gibt zuverlässig (habe ich das gesagt?) Ein Array von Beitragstypen zurück, wenn mehr als einer vorhanden ist, oder eine Zeichenfolge mit dem einzelnen Beitragstyp, wenn es nur einen Typ gibt. Alles was Sie tun müssen, ist:
Beispielnutzung (nur zum Spaß):
Um den Effekt zu sehen, ändern Sie den benutzerdefinierten Beitragstyp im Code in
post
und fügen Siethumbtype-post
Ihren Beitragsminiaturbildern ein Klassenattribut hinzu ...quelle
Sie können diesen Code verwenden:
Verwenden Sie $ posttype_slug var, was auch immer Sie benötigen
quelle
$queried_object->query_var['post_type'];
dafür funktionieren ...?post_type=post
ich leer werde. Vergleichen Sie mitget_query_var('post_type');
Sie können diesen Code verwenden und dieser Code funktioniert für mich,
quelle
quelle