2012-09-05 11 views
8

Ich habe einen Code geschrieben, der automatisch einige Beiträge erstellt und fügt ihnen ein Tag. Ich kann die Tags im Admin-Bereich "Alle Posts" sehen und auf den Link "Tag" der Posts klicken, um nur die Posts mit den Tags zu erhalten.Wordpress: versuchen, Beiträge per Tag zu bekommen

In einem Plugin, das ich schreibe mit $ wp_query, egal welche Parameter ich gebe, bekomme ich nur die vollständige Liste der Beiträge zurück, ob sie das Tag haben, das ich suche oder nicht.

Hier ist mein Code:

// Now retrieve all items matching this brand name . . . 
$query=new WP_Query(array('posts_per_page=5', array('tag' => array($brand_name)))); 

// The Loop 
while ($query->have_posts()) : $query->the_post(); 
    echo '<li>'; 
    the_title(); 
    echo '</li>'; 
endwhile; 

// Reset Post Data 
wp_reset_postdata(); 

Dies erzeugt 10 Ergebnisse, wenn ich ihm nur gesagt habe 5. In Wirklichkeit zurückzukehren ich nur 2 Beiträge zurückbekommen soll so dass die Gesamtzahl mit dem Tag ist.

Schauen Sie sich im Internet scheint es eine Menge Leute haben das gleiche Problem, aber keine Lösungen. Ich habe ungefähr 10 verschiedene Arten versucht, das Tag zu spezifizieren, aber die Tatsache, dass die Anzahl der zurückgegebenen Beiträge falsch ist, deutet darauf hin, dass ich entweder etwas völlig falsches habe oder einen Bug habe. Wordpress-Version ist 3.4.1, wenn es hilft.

Können irgendwelche Wordpress Pro's Licht darauf werfen?

Vielen Dank im Voraus!

Antwort

13

Versuchen Sie, diese

$original_query = $wp_query; 
$wp_query = null; 
$args=array('posts_per_page'=>5, 'tag' => $brand_name); 
$wp_query = new WP_Query($args); 
if (have_posts()) : 
    while (have_posts()) : the_post(); 
     echo '<li>'; 
     the_title(); 
     echo '</li>'; 
    endwhile; 
endif; 
$wp_query = null; 
$wp_query = $original_query; 
wp_reset_postdata(); 
+0

Es sollte kein Grund sein, den ursprünglichen $ wp_query zurückgesetzt und um all das Tanzen zu tun. Ordnen Sie es stattdessen einer neuen Variablen zu. –

+0

@SheikhHeera Die ganze $ original_query, reset postdata, etc. –

+0

@ArtemRussakovskii, in diesem Fall kann ich '$ wp_query' Variable nicht verwenden, aber eine andere, zum Beispiel' $ new_wp_query = new WP_Query ($ args); while ($ new_wp_query-> have_posts()): the_post(); ... '. –

12

Antwort wurde hier gefunden - https://codex.wordpress.org/Template_Tags/get_posts

Das folgende Beispiel zeigt Beiträge mit 'Jazz' getaggt unter 'Genre' benutzerdefinierte Taxonomie, mit 'tax_query'

$args = array(
    'tax_query' => array(
     array(
      'taxonomy' => 'genre', 
      'field' => 'slug', 
      'terms' => 'jazz' 
     ) 
    ) 
); 
$postslist = get_posts($args); 

Also für Sie es

$args = array( 
     'posts_per_page' => 5, 
     'tax_query'  => array(
      array(
       'taxonomy' => 'post_tag', 
       'field'  => 'slug', 
       'terms'  => sanitize_title($brand_name) 
      ) 
     ) 
    ); 

$postslist = get_posts($args); 
0

In Ihrem Code sein wird, versuchen:

$query=new WP_Query(array('posts_per_page=5', 'tag' => $brand_name)); 

statt:

$query=new WP_Query(array('posts_per_page=5', array('tag' => array($brand_name)))); 

Weitere Einzelheiten finden Sie https://codex.wordpress.org/Class_Reference/WP_Query#Tag_Parameters (und wie bereits erwähnt auf ein neuer Duplikat).

Hinweis: $ brand_name könnte ein Array von Strings oder kommagetrennten Werten usw. sein, und der obige Code sollte funktionieren.

Alternativ versuchen:

$myPosts = get_posts(array('tag' => $brand_name)); 

Siehe https://codex.wordpress.org/Template_Tags/get_posts

Verwandte Themen