2012-09-05 22 views
8

He escrito un código que crea automáticamente algunas publicaciones y les agrega una etiqueta. Puedo ver las etiquetas en el panel de administración "Todas las publicaciones" y puedo hacer clic en el enlace "Etiqueta" de publicaciones para obtener solo las publicaciones con las etiquetas.Wordpress: tratando de obtener mensajes por etiqueta

Sin embargo, en un complemento que escribo usando $ wp_query, sin importar los parámetros que paso, obtengo la lista completa de las publicaciones, ya sea que tengan la etiqueta que estoy buscando o no.

Aquí está mi código:

// 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(); 

Esto produce 10 resultados cuando he dicho que sólo para volver 5. En realidad sólo deben recibir 2 mensajes de vuelta ya que es el número total con la etiqueta.

Buscando en la web parece que hay muchas personas que tienen el mismo problema pero no tienen soluciones. Debo haber probado alrededor de 10 formas diferentes de especificar la etiqueta, pero el hecho de que la cantidad de publicaciones devueltas sea incorrecta sugiere que he obtenido algo completamente incorrecto o que hay algún tipo de error. La versión de Wordpress es 3.4.1 si ayuda.

¿Puede algún Wordpress pro arrojar luz sobre esto?

¡Gracias de antemano!

Respuesta

13

Prueba este

$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

No debería haber ninguna razón para restablecer el $ WP_Query original y hacer todo lo que bailando alrededor. Solo asigne a una nueva variable en su lugar. –

+0

@SheikhHeera Todo $ original_query, restablecer postdata, etc. –

+0

@ArtemRussakovskii, en ese caso no puedo usar la variable '$ wp_query' sino una diferente, por ejemplo' $ new_wp_query = new WP_Query ($ args); while ($ new_wp_query-> have_posts()): the_post(); ... '. –

12

respuesta fue hallada aquí - https://codex.wordpress.org/Template_Tags/get_posts

ejemplo siguiente muestra los mensajes etiquetados con 'jazz', bajo 'género' taxonomía personalizada, usando 'tax_query'

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

Así que para usted será

$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

En su código, intente:

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

en lugar de:

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

Para más detalles, ver https://codex.wordpress.org/Class_Reference/WP_Query#Tag_Parameters (y como se ha mencionado en una publicación duplicada reciente).

Nota: $ brand_name podría ser una matriz de cadenas, o valores separados por comas, etc., y el código anterior debería funcionar.

otra parte, trate:

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

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

Cuestiones relacionadas