Wp запрос сортируется по количеству кликов - PullRequest
0 голосов
/ 12 июня 2019

У меня есть такой запрос, который отлично работает

$paged = 1; 
$filter_min_price = 5;
$filter_max_price = 300;
$products5_cat_term_id = 368;
$filter_brand = "Now, Garmin";
$sort_order = "ASC";

    $the_query = array(
        'post_type' => 'products5',          // name of post type.
        'tax_query' => array(
            array(
                'taxonomy' => 'products5_categories',   // taxonomy name
                'field' => 'term_id',           // term_id, slug or name
                'terms' => $products5_cat_term_id,
            )
        ),
        'posts_per_page' => 100,
        'paged' => $paged,
        'post_status' => 'publish',         
        'meta_query' => array(
            'relation' => 'AND',
            'price_clause' => array(
                'key'     => 'kixx_product_price',
                'value'   => array( $filter_min_price, $filter_max_price ),
                'type'    => 'DECIMAL(10, 2)',
                'compare' => 'BETWEEN',
            ),

            array(
                'relation' => 'OR',
                'brand_clause' => array(
                    'key'     => 'kixx_product_brand',
                    'value'   => $filter_brand,
                    'compare' => 'IN',
                ),
            ),

        ),
        'orderby' => array(
            'price_clause' => $sort_order,
            'brand_clause' => $sort_order,
        ),              

    );

Так что запрос на самом деле выглядит так:

 SELECT SQL_CALC_FOUND_ROWS  
 {$wpdb->prefix}posts.ID FROM {$wpdb->prefix}posts  
 LEFT JOIN {$wpdb->prefix}term_relationships ON ({$wpdb->prefix}posts.ID = {$wpdb->prefix}term_relationships.object_id) 
 INNER JOIN {$wpdb->prefix}postmeta ON ( {$wpdb->prefix}posts.ID = {$wpdb->prefix}postmeta.post_id )  
 INNER JOIN {$wpdb->prefix}postmeta AS mt1 ON ( {$wpdb->prefix}posts.ID = mt1.post_id ) 
 WHERE 1=1  
 AND ( {$wpdb->prefix}term_relationships.term_taxonomy_id IN (368)) 
 AND ( ( {$wpdb->prefix}postmeta.meta_key = 'kixx_product_price' AND CAST({$wpdb->prefix}postmeta.meta_value AS DECIMAL(10,2)) BETWEEN '5' AND '300' ) 
 AND (( mt1.meta_key = 'kixx_product_brand' AND mt1.meta_value IN ('Now','Garmin') ))) 
 AND {$wpdb->prefix}posts.post_type = 'products5' 
 AND (({$wpdb->prefix}posts.post_status = 'publish')) 
 GROUP BY {$wpdb->prefix}posts.ID 
 ORDER BY CAST({$wpdb->prefix}postmeta.meta_value AS DECIMAL(10,2)) ASC, 
 CAST(mt1.meta_value AS CHAR) ASC 
 LIMIT 0, 100

У меня есть плагин ThirstyAffiliates, и я хочу отсортировать этот запрос поколичество кликов ThirstyAffiliates ...

Таблица кликов ThirstyAffiliates выглядит следующим образом:
id (AutoIcrement) |link_id (целое число - идентификатор сообщения) |date_clicked (дата / время, когда произошел клик)

Когда я запускаю этот запрос, я получаю ссылки ThirstyAffiliate, отсортированные по кликам:

$query = "SELECT link_id,COUNT(*) as count FROM {$wpdb-prefix}ta_link_clicks GROUP BY link_id ORDER BY count DESC";
$results = $wpdb->get_results( $query, ARRAY_A );

... и я получаю все сообщения, отсортированные по количеству кликов(и это прекрасно работает), когда я запускаю это утверждение в одиночку, но мой вопрос: как объединить этот вид с $ the_query, чтобы я получил этот порядок сортировки вместо текущего оператора "orderby"?

Можно ли это сделатьвнутри запроса Wp напрямую?и если нет - может кто-нибудь помочь мне, как написать пользовательский запрос SQL для достижения этой цели?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...