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.

<?php $term_list = wp_get_post_terms($post->ID, 'category', array("fields" => "names"));
foreach ($term_list as $term) {
    $name = $term;
} ?>

Geben Sie hier die Bildbeschreibung ein

  • 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

Benutzeravatar von David Vielhuber
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
   }
}

Verweise:

https://github.com/sybrew/the-seo-framework/blob/4262ea703eaaa50813d8cd4ac13f4537b5c6a4cc/inc/classes/post-data.class.php#L633

Die akzeptierte Antwort funktioniert nicht, wenn Sie die Indizierung und Optimierung des Yoast-Plugins verwendet haben.

$wpseo_primary_term = new WPSEO_Primary_Term( 'category', get_the_id() );
$wpseo_primary_term = $wpseo_primary_term->get_primary_term();
$term = get_term( $wpseo_primary_term );

Dies wäre der richtige Weg, es zu tun.

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.

    – Jared Reis

    24. März 2021 um 15:46 Uhr

  • Dieses Tutorial kann auch einen Blick wert sein: joshuawinn.com/using-yoasts-primary-category-in-wordpress-theme

    – Jared Reis

    24. März 2021 um 15:53 ​​Uhr

Wenn Sie das Plugin „Yoast SEO“ verwenden:

yoast_get_primary_term_id( 'product_cat', $post->id );

Für alle, die es verwenden Rang Math SEO Plugin, können Sie verwenden:

get_post_meta( $post_id, 'rank_math_primary_category', true );

Verwandter Beitrag: https://wordpress.org/support/topic/get-primary-category-2/

Benutzeravatar von Mahfuzul Hasan
Mahfuzul Hasan

Sie können diese Funktion verwenden, um die primäre Kategorie zu erhalten

<?php
function prefix_get_primary_category($post_id) {
  if(class_exists('WPSEO_Primary_Term')) {
    $wpseo_primary_term = new WPSEO_Primary_Term( 'category', $post_id );
    $wpseo_primary_term = $wpseo_primary_term->get_primary_term();
    $the_primary_term = get_term( $wpseo_primary_term );

    if(!empty($the_primary_term) && !is_wp_error($the_primary_term)) {
      return $the_primary_term;
    }
  }

  return false;
}

1405930cookie-checkHauptkategorie abrufen, wenn mehr als eine ausgewählt ist?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy