Hauptkategorie abrufen, wenn mehr als eine ausgewählt ist?
Lesezeit: 4 Minuten
Wie kann ich in WordPress zur primären Kategorie zurückkehren?
Ich verwende die folgende Schleife. Wenn alle drei aktiviert sind, wird nur der letzte Begriff zurückgesetzt. Ich möchte sicherstellen, dass es die primäre Kategorie ist.
@ lazyme114 Nicht unbedingt, kann sehen, wohin Sie damit wollten. Ich denke, um sicher zu sein, sollte es nicht so gemacht werden.
– Rauben
30. März 2017 um 10:36 Uhr
einen versuch wert ich dachte das foreach($term_list as $term) { $name[] = $term; } echo $name[0];
– faul114
30. März 2017 um 10:42 Uhr
@ lazyme114 Ich werde es versuchen, nicht wirklich viele Optionen.
– Rauben
30. März 2017 um 10:45 Uhr
hier eine Lösung für eine ähnliche Frage: https://stackoverflow.com/a/57996959/6036169
– Felipe Sanches
18. September 2019 um 17:26 Uhr
David Vielhuber
Dies ist keine native WordPress-Funktion, sondern eine Funktion von Yoast SEO (siehe hier).
Sie können den Primärstatus wie folgt überprüfen:
<?php
$term_list = wp_get_post_terms($post->ID, 'category', ['fields' => 'all']);
foreach($term_list as $term) {
if( get_post_meta($post->ID, '_yoast_wpseo_primary_category',true) == $term->term_id ) {
// this is a primary category
}
}
?>
Wenn Sie benutzerdefinierte Taxonomien verwenden, verwenden Sie den meta_key
_yoast_wpseo_primary_CUSTOM_TAXONOMY
stattdessen.
Ah, das würde den Mangel an Dokumentation erklären! Ich werde das mal ausprobieren und sehen, ob es funktioniert. Vielen Dank.
– Rauben
7. April 2017 um 14:55 Uhr
Danke für dieses nützliche Code-Snippet! Wenn ich mich beim Abrufen der Begriffsliste nicht irre, sollte der 3. Parameter array(“fields” => “all”) sein, sonst erhalten Sie nur die Namen aller Begriffe und können die term_id nicht vergleichen, wenn Sie die $term_list durchlaufen. Zumindest war es so, als ich es probiert habe.
– Luckyfella
22. Februar 2018 um 11:16 Uhr
Der Kommentar von @Luckyfella ist korrekt – der obige Code funktioniert nicht so wie er ist. Sie müssen array(“fields” => “names”) in array(“fields” => “all”) ändern. Sie können eine Zeichenfolge nicht mit einem ID-Wert vergleichen
– Charlie Standard
13. Juli 2018 um 17:42 Uhr
Danke für den Hinweis, behoben.
– David Vielhuber
13. Juli 2018 um 21:32 Uhr
Ich glaube nicht, dass diese Lösung in der neuen Yoast SEO-Version mehr funktioniert.
– WPZA
14. November 2018 um 21:31 Uhr
Wenn Sie das Plugin „The SEO Framework“ anstelle von „Yoast SEO“ verwenden:
$taxonomy = 'category';
$post_id = get_the_ID();
$terms = wp_get_post_terms($post_id, $taxonomy, ['fields' => 'all']);
$primary_term = intval(get_post_meta( $post_id, '_primary_term_' . $taxonomy, true ));
foreach($terms as $term) {
if( $primary_term == $term->term_id ) {
// this is a primary category
}
}
Um sicherzustellen, dass die Seite nicht kaputt geht, wenn Yoast deaktiviert wird, sollten Sie den Code einschließen
if ( class_exists('WPSEO_Primary_Term') ) { }
Diese Methode hat bei mir mit neueren Versionen von Yoast funktioniert. Scheint viel sauberer zu sein, als ein for each auszuführen, um jede Kategorie in jedem Beitrag zu überprüfen. Meine einzige Ergänzung wäre Folgendes einzuschließen: if (is_wp_error($term)) { } damit Sie feststellen können, ob es keinen primären Satz gibt.
wird primär immer oben sein
– faul114
30. März 2017 um 10:32 Uhr
@ lazyme114 Nicht unbedingt, kann sehen, wohin Sie damit wollten. Ich denke, um sicher zu sein, sollte es nicht so gemacht werden.
– Rauben
30. März 2017 um 10:36 Uhr
einen versuch wert ich dachte das foreach($term_list as $term) { $name[] = $term; } echo $name[0];
– faul114
30. März 2017 um 10:42 Uhr
@ lazyme114 Ich werde es versuchen, nicht wirklich viele Optionen.
– Rauben
30. März 2017 um 10:45 Uhr
hier eine Lösung für eine ähnliche Frage: https://stackoverflow.com/a/57996959/6036169
– Felipe Sanches
18. September 2019 um 17:26 Uhr