2010-07-28 22 views
9

¿Hay alguna manera de obtener todas las publicaciones de una taxonomía en Wordpress?Obtenga todas las publicaciones de la taxonomía personalizada en Wordpress

En taxonomy.php, tengo este código que recibe las publicaciones del término relacionado con el término actual.

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

Me gustaría crear una página con todas las publicaciones de la taxonomía, independientemente del término.

¿Hay una manera simple de hacer esto, o tengo que consultar la taxonomía de los términos, entonces ellos bucle Comedero, etc.

Respuesta

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

Con que te gustaría publicar el primer artículo, yo puede crear un foreach; loop:

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

Esa manera en que se los enumera, si quieres publicar todos ellos, -mi Solución crear un bucle de wordpress normales dentro del foreach uno, pero tiene que tener algo como:

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; 

Puse algo muy similar here.

+2

en la línea con ' 'taxonomía'=> '$ term_name'' necesita ser doblemente citado como este ''taxonomy' =>" $ term_name "', o mejor no hay citas como esta ''taxonomy' => $ term_name', o mejor aún omite la asignación anterior y solo usa' 'taxonomía' => $ term-> slug'. Dicho esto, el método mostrado [ha quedado en desuso en favor de] (http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters) usando ''tax_query' => array (...)'. Espero que esto ayude. – MikeSchinkel

+0

Lo siento, el retraso ... tienes razón. Modifiqué mi respuesta en consecuencia :) –

+0

¡Excelente! Juntos espero que nuestros esfuerzos ayuden a otros. – MikeSchinkel

11

@PaBLoX hizo una muy buena solución, pero yo mismo hice una solución que es un poco complicada y no necesita consultar todas las publicaciones cada vez para cada uno de los términos. y ¿qué pasa si hay más de un término asignado en una sola publicación? ¿No hará la misma publicación varias veces?

<?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; 
    ?> 

esta función m_explode es una función personalizada que puse en el archivo functions.php.

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; 

     } 

ACTUALIZACIÓN

Nosotros no requieren m_explode función de esta costumbre. La función wp_list_pluck() hace exactamente lo mismo. Así que simplemente podemos reemplazar m_explode con wp_list_pluck() (los parámetros serían los mismos). SECO, ¿verdad?

+0

¡muchas gracias por esto! :) realmente me ayudó mucho. – Woppi

0

Mientras está en el bucle de consulta de términos, puede recopilar todas las referencias de publicaciones en una matriz y usarlas más adelante en una nueva WP_Query.

$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

A diferencia de los tipos de publicaciones, WordPress no tiene una ruta para la babosa taxonómica en sí.

Para hacer la propia babosa taxonomía lista de todos los mensajes que tienen cualquiera de los términos de la taxonomía asignado, es necesario utilizar el EXISTS operator of tax_query in WP_Query: El ejemplo anterior

// 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; 
    } 
} 
Cuestiones relacionadas