2010-07-28 16 views
9

Gibt es eine Möglichkeit, alle Beiträge aus einer Taxonomie in Wordpress zu bekommen?Erhalten Sie alle Beiträge von benutzerdefinierten Taxonomie in Wordpress

In taxonomy.php, habe ich diesen Code, der die Beiträge von dem Begriff bezieht sich auf den aktuellen Begriff.

$current_query = $wp_query->query_vars; 
query_posts(array($current_query['taxonomy'] => $current_query['term'], 'showposts' => 10)); 

Ich möchte eine Seite mit allen Posts in der Taxonomie erstellen, unabhängig von der Laufzeit.

Gibt es eine einfache Möglichkeit, dies zu tun, oder muss ich die Taxonomie für die Begriffe abzufragen, dann Trog Schleife sie usw.

Antwort

8
$myterms = get_terms('taxonomy-name', 'orderby=none&hide_empty');  
echo $myterms[0]->name; 

Damit Sie den ersten Eintrag schreiben würde, yo kann dann einen foreach erstellen; Schleife:

foreach ($myterms as $term) { ?> 
    <li><a href="<?php echo $term->slug; ?>"><?php echo $term->name; ?></a></li> <?php 
} ?> 

diese Weise können sie aufzählen würde, wenn Sie alle von ihnen zu stellen, -my lösungs- eine normale Wordpress Schleife innerhalb der foreach zu schaffen, aber es hat wie etwas haben:

foreach ($myterms as $term) : 

$args = array(
    'tax_query' => array(
     array(
      $term->slug 
     ) 
    ) 
); 

// assigning variables to the loop 
global $wp_query; 
$wp_query = new WP_Query($args); 

// starting loop 
while ($wp_query->have_posts()) : $wp_query->the_post(); 

the_title(); 
blabla.... 

endwhile; 

endforeach; 

Ich postete etwas sehr ähnliches here.

+2

Das obige Beispiel auf die Zeile mit '‚Taxonomie‘=>‚$ term_name'' muss doppelt zitiert werden wie diese '' taxonomy '=> "$ term_name" ', oder besser keine Anführungszeichen wie diese' 'taxonomy' => $ term_name', oder besser noch die vorherige Zuweisung weglassen und einfach' verwenden 'Taxonomie' => $ term-> slug'. Das heißt, die gezeigte Methode [wurde zugunsten von] veraltet (http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters) mit '' tax_query '=> array (...) '. Hoffe das hilft. – MikeSchinkel

+0

Entschuldigung, die Verzögerung ... Sie haben Recht. Ich habe meine Antwort entsprechend geändert :) –

+0

Ausgezeichnet! Zusammen hoffe ich, dass unsere Bemühungen anderen helfen. – MikeSchinkel

11

@PaBLloX hat eine sehr nette Lösung gemacht, aber ich habe selbst eine Lösung gefunden, was wenig schwierig ist und nicht für alle Beiträge jedes Mal für jeden der Begriffe abfragen muss. Und was, wenn mehr als ein Begriff in einem einzigen Beitrag vergeben wird? Wird es den gleichen Beitrag nicht mehrfach rendern?

<?php 
    $taxonomy = 'my_taxonomy'; // this is the name of the taxonomy 
    $terms = get_terms($taxonomy, 'orderby=count&hide_empty=1'); // for more details refer to codex please. 
    $args = array(
     'post_type' => 'post', 
     'tax_query' => array(
        array(
         'taxonomy' => 'updates', 
         'field' => 'slug', 
         'terms' => m_explode($terms,'slug') 
        ) 
       ) 
     ); 

    $my_query = new WP_Query($args); 
    if($my_query->have_posts()) : 
     while ($my_query->have_posts()) : $my_query->the_post(); 

       // do what you want to do with the queried posts 

      endwhile; 
    endif; 
    ?> 

diese Funktion m_explode ist eine benutzerdefinierte Funktion, die ich in die functions.php Datei setzen.

function m_explode(array $array,$key = ''){  
     if(!is_array($array) or $key == '') 
      return;   
     $output = array(); 

     foreach($array as $v){   
      if(!is_object($v)){ 
       return; 
      } 
      $output[] = $v->$key; 

     } 

     return $output; 

     } 

UPDATE

wir diese Gewohnheit nicht m_explode Funktion benötigen. wp_list_pluck() Funktion macht genau das gleiche. So können wir einfach m_explode durch wp_list_pluck() ersetzen (Parameter wären gleich). TROCKEN, oder?

+0

vielen Dank dafür! :) hat mir wirklich sehr geholfen. – Woppi

0

Während Sie in der Abfrage-Schleife nach Begriffen suchen, können Sie alle Nachverweise in einem Array sammeln und diese später in einer neuen WP_Query verwenden.

$post__in = array(); 
while ($terms_query->have_posts()) : $terms_query->the_post(); 
    // Collect posts by reference for each term 
    $post__in[] = get_the_ID(); 
endwhile; 

... 

$args = array(); 
$args['post__in'] = $post__in; 
$args['orderby'] = 'post__in'; 
$other_query = new WP_Query($args); 
0

Im Gegensatz zu Post-Typen hat WordPress keine Route für den Taxonomie-Slug selbst.

Um die Taxonomie Slug sich alle Beiträge machen aufzulisten, die eine Bestimmung der Taxonomie zugeordnet haben, müssen Sie die EXISTS operator of tax_query in WP_Query verwenden:

// Register a taxonomy 'location' with slug '/location'. 
register_taxonomy('location', ['post'], [ 
    'labels' => [ 
    'name' => _x('Locations', 'taxonomy', 'mydomain'), 
    'singular_name' => _x('Location', 'taxonomy', 'mydomain'), 
    'add_new_item' => _x('Add New Location', 'taxonomy', 'mydomain'), 
    ], 
    'public' => TRUE, 
    'query_var' => TRUE, 
    'rewrite' => [ 
    'slug' => 'location', 
    ], 
]); 

// Register the path '/location' as a known route. 
add_rewrite_rule('^location/?$', 'index.php?taxonomy=location', 'top'); 

// Use the EXISTS operator to find all posts that are 
// associated with any term of the taxonomy. 
add_action('pre_get_posts', 'pre_get_posts'); 
function pre_get_posts(\WP_Query $query) { 
    if (is_admin()) { 
    return; 
    } 
    if ($query->is_main_query() && $query->query === ['taxonomy' => 'location']) { 
    $query->set('tax_query', [ 
     [ 
     'taxonomy' => 'location', 
     'operator' => 'EXISTS', 
     ], 
    ]); 
    // Announce this custom route as a taxonomy listing page 
    // to the theme layer. 
    $query->is_front_page = FALSE; 
    $query->is_home = FALSE; 
    $query->is_tax = TRUE; 
    $query->is_archive = TRUE; 
    } 
} 
Verwandte Themen