wordpress wp-query – WP_Query: ¿Cómo ordeno por valor meta y uso LEFT JOIN?

Pregunta:

Utilizo WordPress 4.5 y estoy tratando de modificar una consulta para usar LEFT JOIN en lugar de INNER JOIN. Pero no puedo hacer que 'relation' => 'OR' funcione. Vea la consulta a continuación. He leído varias otras publicaciones sobre esto, pero no puedo hacerlo bien.

$premium_args = array(
        'meta_query' => array('relation' => 'OR', array( 'key' => 'premium', 'value' => '1', 'compare' => '=' )),
        'tax_query' => array( array( 'taxonomy' => 'posts-from', 'field' => 'id', 'terms' => $term->term_id ) ),
            'post_type' => 'post',
        'posts_per_page' => $posts_per_page,
        'meta_key' => 'verified',
        'orderby' => 'meta_value_num',
        'order' => 'DESC',
        'paged' => $paged
    );
    $premium = new WP_Query( $premium_args);

A continuación se muestra el resultado de la consulta. ¿Cómo puedo obligarlo a usar LEFT JOIN?

REQUEST:SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )  INNER JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) WHERE 1=1  AND ( 
  wp_term_relationships.term_taxonomy_id IN (7)
) AND ( 
  wp_postmeta.meta_key = 'verified' 
  AND 
  ( 
    ( mt1.meta_key = 'premium' AND CAST(mt1.meta_value AS CHAR) = '1' ) 
    OR 
    ( mt1.meta_key = 'verified' AND CAST(mt1.meta_value AS CHAR) = '1' )
  )
) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_postmeta.meta_value+0 DESC LIMIT 0, 25

Respuesta:

WordPress también proporciona más filtros para cambiar consultas personalizadas. https://codex.wordpress.org/Custom_Queries

add_filter('posts_join', 'custom_query_join' );
$premium = new WP_Query( $premium_args);
remove_filter('posts_join', 'custom_query_join' ); // remove filter bcz not effect to another query to use after this query.

function custom_query_join( $join ){
  $join .= 'Put here join to table';
  return $join;
}

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım