2016-09-30 4 views
0

Normales Verhalten von get_terms ist nicht die Rückgabe von Termen, wenn keine Posts zugewiesen sind. Aber das ist nicht der Fall, ich kann Begriffe in Admin sehen und auch die Datenbank überprüft und alles scheint gut. Überprüfen Sie auch diesen Code:Wordpress: get_terms() gibt nichts zurück, auch wenn Begriffe Objekte haben

$p = get_post(5018); // correctly returns the post 

// works: returns the assigned term 
$post_terms = wp_get_post_terms($p->ID, 'solutions_sectors', array("fields" => "all")); 

// now the opposite: 
$first = $post_terms[0]; 
$tid = $first->term_id; 
// works: gives a list of post ids 
$term_posts = get_objects_in_term($tid, 'solutions_sectors'); 

// still, this will output an empty array: 
$terms = get_terms(array('taxonomy' => 'solutions_sectors'); 

// while this will output the right array (obviously): 
$terms = get_terms(array('taxonomy' => 'solutions_sectors', 'hide_empty' => false)); 

Also, meine Beiträge, die Bedingungen haben, aber get_terms scheint es nicht zu realisieren. Warum?

Bitte beachten Sie folgendes:

  • Ich bin mit benutzerdefinierten Post-Typen mit benutzerdefinierten Taxonomien

  • Ich verwende Polylang wie die Plug-Sprachen (aber alle Beiträge und Begriffe scheint zu sein, richtig übersetzt und zugewiesen)

Antwort

0

gefunden das Problem: das Zählfeld der term_taxonomy Tabelle leer war, und das ist, weil ich meine Beiträge-bulk gespeichert 01 mitwährend eines benutzerdefinierten Imports.

wp_insert_post() scheint einen Fehler zu haben: Es wendet die angegebenen Begriffe korrekt auf den neuen Beitrag an, aktualisiert jedoch nicht die Anzahl der Begriffe "term_taxonomy".

Die Lösung hier ist ein One-Shot-Aufruf an wp_update_term_count_now() `.

Da ich alle Begriffe IDs in einer Datei abrufen müssen, die vor der Erstellung der Taxonomien ausgeführt wurde, muss ich den Code in eine Init-Aktion einbinden.

add_action('init','reset_counts', 11, 0); 
function reset_counts(){ 
    // I'm currently using polylang so first I get all the languages 
    $lang_slugs = pll_languages_list(array('fields' => 'slug')); 

    foreach($lang_slugs as $lang){ 
    $terms_ids = get_terms(array(
     'taxonomy' => 'solutions_sectors' 
     ,'fields' => 'ids' 
     ,'lang' => $lang 
     ,'hide_empty' => false 
    )); 

    // it's important to perform the is_array check 
    if(is_array($terms_ids)) wp_update_term_count_now($terms_ids, 'solutions_sectors'); 
    } 
} 

Das hat den Trick gemacht. Nach dem Ausführen ist es wichtig, den init-Aktionsaufruf zu kommentieren.