Viendo varias páginas específicas usando WP_Query ()

2

Quiero mostrar las páginas 'famoso' y 'mensaje'.

Al usar este código, WP_query () no devuelve ningún resultado:

$args = array(
'post_type' => 'page',
'pagename' => 'famous,mschief',
'posts_per_page' => 3
);

Este código devuelve una de las 2 páginas:

$args = array(
'post_type' => 'page',
'pagename=famous,mschief',
);

Y este código devuelve las 2 páginas correctamente:

$args = array(
'post_type' => 'page',
'pagename=famous,mschief',
'posts_per_page' => 3
);

¿Por qué no funciona la primera parte del código (la única correcta para mí)? ¿Y por qué los otros dos producen estos resultados?

    
pregunta drake035 27.12.2013 - 23:08

6 respuestas

3

Si observa el objeto de consulta después de ejecutar esas consultas, verá que ninguno de esos ejemplos está haciendo lo que cree que está haciendo. El primer problema es que no se pueden combinar parámetros de matriz de consulta y matriz, y el segundo es que pagename solo se puede usar para cargar una sola página.

En este caso, te falta una cita de cierre después de pagename . Suponiendo que este es un error tipográfico, el problema se señala arriba: está buscando una sola página con slug famousmschief

$args = array(
'post_type' => 'page',
'pagename => 'famous,mschief',
'posts_per_page' => 3
);

En este caso, pagename se está ignorando y solo está buscando la página más reciente utilizando las publicaciones predeterminadas por valor de página, que parecen ser 1.

$args = array(
'post_type' => 'page',
'pagename=famous,mschief',
);

En este, el mismo problema que el anterior, pero estás cargando más páginas, así que solo estás cargando las tres páginas más recientes:

$args = array(
'post_type' => 'page',
'pagename=famous,mschief',
'posts_per_page' => 3
);

Si desea consultar varias páginas, use el argumento post__in y los identificadores de página :

$args = array(
    'post_type' => 'page',
    'post__in' => array( 23,42 )
);
    
respondido por el Milo 27.12.2013 - 23:29
2

El atributo post_name__in

A partir de WordPress 4.4 podemos usar el atributo post_name__in de la clase WP_Query . Consulte el boleto de trac # 33065 .

Ejemplo :

$args = [
    'post_name__in'      => ['famous', 'mschief'],
    'post_type'          => 'page',
   'ignore_sticky_posts' => 1,
];
    
respondido por el birgire 16.11.2015 - 19:32
0

Para la primera, tienes comillas no coincidentes en la tercera línea. Lo que parece que intentabas hacer era:

'pagename' => 'famous,mschief',
    
respondido por el hornj 27.12.2013 - 23:28
0

Puedes escribir tu propia función, utilizando un posts_where filter

function page_names_query( $n = array() ) {
  static $pages;
  if ( is_null($pages) && ! empty($n) && is_array($n) ) {
    $pages = array_filter( array_map('sanitize_title', $n) );
    if ( ! empty($pages) ) {
      // using this function itself to filter next query
      add_filter('posts_where', __FUNCTION__, 999 ); 
      return new WP_Query('post_type=page'); // return the filtered query
    } else { // no valid page names passed
      $pages = NULL;
      return new WP_Query('p=-1'); // return a WP_Query with no posts
    }
  } elseif( current_filter() === 'posts_where' && ! empty($pages) && is_string($n) ) {
    $w = ' AND post_name IN (';
    global $wpdb;
    foreach ( $pages as $page ) { $w .= $wpdb->prepare('%s,', $page); }
    $pages = NULL; // reset static variable
    remove_filter('posts_where', __FUNCTION__, 999 ); // remove filter
    return $n . rtrim($w, ',') . ')';
  }
}

después de eso, puedes usarlo así

$query =  page_names_query( array('famous','mschief') ); // return a WP_Query

if ( $query->have_posts() ) : while( $query->have_posts() ) : $query->the_post();

// your loop here

endwhile; endif;
wp_reset_post_data();
    
respondido por el gmazzap 28.12.2013 - 00:44
0

Tu pregunta necesita aclaración. Supongo que te refieres a 2 publicaciones en lugar de 2 páginas.

Puedes usar este código PHP en el archivo functions.php de tus temas secundarios para mostrar publicaciones por post i.d's.

add_action( 'pre_get_posts', 'wpsites_display_specific_posts_home_page' );

function wpsites_display_specific_posts_home_page( $query ) {

if( $query->is_main_query() && $query->is_home() ) {

    $query->set( 'post__in', array( 007, 008 ) );

    }
}

Este código solo mostrará las publicaciones con i.d's 007 y 008 en su página de inicio. Si está utilizando una página estática, este código funcionará en su página de publicaciones de acuerdo con su configuración de lectura.

Usar i.d es mejor, ya que siguen siendo los mismos, incluso cuando cambias el slug.

    
respondido por el Brad Dalton 28.12.2013 - 08:17
0

agregar categoría a la página con:

function wpc_cat_pages() {
    register_taxonomy_for_object_type('category', 'page');
}
add_action('init', 'wpc_cat_pages');

y mostrarlo con:

$args = array(
        'post_type' => 'page',
        'category' => 'categori',
        'posts_per_page' => 'number post'
);
    
respondido por el Mazgour Aziz 03.09.2018 - 10:48

Lea otras preguntas en las etiquetas