2016-04-29 16 views
0

Wir 10 Kategorien haben, sagen A, B, C, D, etcKategorien mit den Beiträgen erhalten, die bestimmten Tag enthalten

Wir haben 1 Tag, sagen tag

Die Funktion get_categories alle Kategorien erhalten, haben Beiträge in ihnen (standardmäßig), aber was wir brauchen, ist die gleiche Funktion, nur müssen wir nur Kategorien mit Posts bekommen, die ein bestimmtes Tag haben.

So Kategorie A hat 5 Beiträge mit dem Tag tag, Kategorie B keine hat, Kategorie C hat 3. Dann will ich A und C in dieser Liste sehen.

Ist es möglich, get_categories per Tag zu filtern?

aktualisieren 1

Versuchte

$terms = get_terms(array(
      'taxonomy' => 'category', 
      'hide_empty' => true, 
      'meta_query' => array(
       array(
        'key'  => 'tag', 
        'value' => 'my-tag-slug', 
        'compare' => '=', 
       ), 
      ), 
     )); 

Auch mit Tag-ID versucht. Es sind die Standardpostkategorien und -Tags, die ich verwende.

Antwort

1

Verwenden get_terms() statt und die Verwendung der meta_query args machen Sie verwenden können: https://developer.wordpress.org/reference/functions/get_terms/

Etwas wie:

$terms = get_terms(array(
    'taxonomy' => 'category', 
    'hide_empty' => true, 
    'meta_query' => array(
     array(
      'key'  => 'tag', 
      'value' => 'tag', 
      'compare' => '=', 
     ), 
    ), 
)); 

Dies unterscheidet sich je nachdem, welche Version von Wordpress Sie verwenden - so überprüfen die Dokumentation.

Betrachten Sie https://codex.wordpress.org/Class_Reference/WP_Query für mehr auf den 'Meta_query' Teil der Argumente.

UPDATE

so etwas wie diese (Tonwechsel try {tag-Slug} zum gewünschten tag slug

// Get the categories 
$terms = get_terms(array(
    'taxonomy' => 'category', 
)); 

// Loop through them 
foreach($terms as $term) { 
    // Get the posts in that category with the required tag 
    $args = array(
    'category_name' => $term->name, 
    'tax_query'  => array(
     array(
      'taxonomy' => 'post_tag', 
      'field'  => 'slug', 
      'terms'  => '{tag-slug}' 
     ) 
    ) 
); 
    $posts_array = get_posts($args); 

    foreach ($posts_array as $value) { 
    // save what you need here - maybe an array for each category with the posts so you can run a count on them? 
    } 

} 
+0

Danke, ich habe es versucht, aber es scheint nicht zu funktionieren Ich bekomme ein leeres Array Ich bin auf 4.5.1, also ist Ihr Code in Ordnung Ich kann auch nichts finden, das sich auf Tags auf https://codex.wordpress.org/Class_Reference/WP_Meta_Query oder sonst auf Google bezieht .. – Richard

+0

Aktualisiert meine Frage – Richard

+0

Können Sie Ihre Version meines Codes zeigen - so kann ich sehen, was Ihre Kategorie und Metanamen sind.Mein Beispiel wird nicht funktionieren, wenn Sie es nur kopieren und einfügen wie es ist. –

Verwandte Themen