Agregue algunos ID de publicación específicos a wp_query

2

He seguido los argumentos para obtener publicaciones recientes,

$args = array(
    'date_query' => array( array( 'after' => '1 week ago' ) ),  
    'posts_per_page' => 15,
    'ignore_sticky_posts' => 1,
    'meta_key' => 'post_views_count',
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    'cat' => '-907,-908,-909'
);

Ahora necesito incluir algunos identificadores específicos para la misma consulta. Así que intenté seguir, pero no funciona

$highlights = array('8308', '8315');

$args = array(
    'date_query' => array( array( 'after' => '1 week ago' ) ),  
    'posts_per_page' => 15,
    'ignore_sticky_posts' => 1,
    'meta_key' => 'post_views_count',
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    'cat' => '-907,-908,-909',
    'post__in' => $highlights
);

Ahora solo me da esas dos publicaciones.

    
pregunta Janith Chinthana 22.10.2015 - 09:53

2 respuestas

3

Esta es otra forma de hacerlo, especialmente si necesita trabajar con el objeto de consulta. El problema con la combinación de consultas es que pierde la corrección del objeto de consulta.

Mi idea aquí es ejecutar dos consultas separadas, una muy magra para obtener ID de publicación de la consulta date_query y luego fusionar las dos matrices de ID de publicación y luego pasar esas ID a la consulta WP_Query adecuada.

( NOTA: este código requiere al menos PHP 5.4 )

$highlights = [8308, 8315];

$args = [
    'date_query'          => [
        [
            'after'       => '1 week ago' 
        ]
    ],
    'posts_per_page'      => 13,
    'meta_key'            => 'post_views_count',
    'orderby'             => 'meta_value_num',
    'order'               => 'DESC',
    'cat'                 => '-907,-908,-909',
    'post__not_in'        => $highlights,
    'fields'              => 'ids' // ONLY GET POST ID's, VERY LEAN QUERY
];
$q = get_posts( $args );

$merged_ids = array_merge( $highlights, $q );

Tenga en cuenta que ahora, los puntos destacados están delante de la consulta, y las publicaciones de $ q se ordenan por fecha. Si necesita conservar este pedido, simplemente agregue 'orderby' => 'post__in', a los argumentos de la consulta a continuación

if ( $merged_ids ) {
    $args_final = [
        'post__in'            => $merged_ids,
        'posts_per_page'      => -1,
        'orderby'             => 'post__in',
        'ignore_sticky_posts' => 1
    ];
    $query_final = new WP_Query( $args_final );

    // Run your loop
}
    
respondido por el Pieter Goosen 22.10.2015 - 12:23
2

No estoy seguro, es esta la mejor manera, pero tengo éxito con el siguiente código.

$highlights = array('8308', '8315');

$args1 = array(
    'post__in' => $highlights
);

$args2 = array(
    'date_query' => array( array( 'after' => '1 week ago' ) ),  
    'posts_per_page' => 13,
    'ignore_sticky_posts' => 1,
    'meta_key' => 'post_views_count',
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    'cat' => '-907,-908,-909',
    'post__not_in' => $highlights
);

$query1 = new WP_Query($args1);
$query2 = new WP_Query($args2);

$products = new WP_Query();
$products->posts = array_merge( $query1->posts, $query2->posts );
$products->post_count = $query1->post_count + $query2->post_count;

$products es la matriz de publicaciones final.

    
respondido por el Janith Chinthana 22.10.2015 - 10:27

Lea otras preguntas en las etiquetas