2017-01-25 1 views
0

У меня есть ACF поле повторителя под названием «courier_pricing _% _ цена» и пытается запросить сообщения как этотACF ретранслятор запросов не работает с% в поданной имени

$args = array(
'posts_per_page' => -1, 
'post_type'  => 'courier', 
'meta_query' => array(
    'relation'  => 'AND', 
    array(
     'key'  => "courier_pricing_%_price", 
     'compare' => ">=", 
     'value'  => '30', 
    ), 
) 
); 

но мне кажется, «%» в имени поля не работает

запрашиваемый SQL является:

SELECT wp_posts.* FROM wp_posts INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) WHERE 1=1 AND ( 
    (wp_postmeta.meta_key = 'courier_pricing_%_price' AND wp_postmeta.meta_value = '30') 
) AND wp_posts.post_type = 'courier' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'acf-disabled' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_posts.menu_order, wp_posts.post_date DESC 

, кажется, линия с

wp_postmeta.meta_key = 'courier_pricing_%_price' 

проблема я изменю «=» на «LIKE» и протестировать запрос в PHPMyAdmin и работает нормально

Я использовал ACF проклятье https://www.advancedcustomfields.com/resources/query-posts-custom-fields/

пожалуйста, любая помощь, чтобы решить эту проблему и Большое спасибо заранее

ответ

0

нашел это решение https://support.advancedcustomfields.com/forums/topic/meta-query-the-repeater-field/

и я использовал меньший путь, как это:

function whereCourier($where) 
{ 
    $where = str_replace("meta_key = 'courier_pricing_%_price'", "meta_key LIKE 'courier_pricing_%_price'", $where); 
    return $where; 
} 

function searchCourier() 
{ 
    $meta_query[] = [ 
     'relation' => 'AND', 
     [ 
      'key' => "courier_pricing_%_price", 
      'compare' => ">=", 
      'value' => '30', 
     ], 
    ]; 

    $args = [ 
     'posts_per_page' => -1, 
     'post_type' => 'courier', 
     'meta_query' => $meta_query 
    ]; 

    add_filter('posts_where', 'whereCourier'); 
    $query = new WP_Query($args); 
    remove_filter('posts_where', 'whereCourier'); 

    return $query; 
} 

$query = searchCourier(); 
if($query->have_posts()){ 
    while ($query->have_posts()) { 
     $query->the_post(); 
     echo get_the_ID(); 
    } 
} 
Смежные вопросы