2017-01-23 5 views
2

У меня есть пользовательский запрос, который бы мне помог конвертировать в пользовательский запрос визуального композитора. В принципе, я хотел бы исключить все сообщения из отображения в сетке сообщений, у которых есть meta_key: _is_featured_posts и его значение как да.Пользовательский запрос визуального компоновщика - исключая meta_key

// WP_Query arguments 
$args = array(
    'post_type'    => array('post'), 
    'post_status'   => array('publish'), 
    'nopaging'    => false, 
    'posts_per_page'   => '12', 
    'order'     => 'DESC', 
    'orderby'    => 'date', 
    'meta_query'    => array(
     'relation' => 'AND', 
     array(
      'key'  => '_is_ns_featured_post', 
      'value' => 'yes', 
      'compare' => 'NOT EXISTS', 
     ), 
    ), 
); 

// The Query 
$query = new WP_Query($args); 

Любая помощь будет принята с благодарностью.

Благодаря

+0

мне нужно закончить с что-то вроде следующим образом: post_type = пакет и пакет-тег = премиум & post_status = печататься. Например, в этом сообщении: \t design33.net/how-to-visual-composers-grid-custom-query –

+0

Возможный дубликат [визуального композиционного запроса Wordpress для пост-сетки] (http://stackoverflow.com/questions/30653046/visual-composer-wordpress-query-for-post-grid) –

ответ

0

Существует альтернативное решение, это не рекомендуется, но, как NOT EXISTS не работает, так что вы можете использовать следующий код. Я также проверяю решение, данное here, но оно не работает.

//to hold the post id which has _is_ns_featured_post => 'yes' 
$exclude_id = array(); 

$args_exclude = array(
    'post_type' => array('post'), 
    'post_status' => array('publish'), 
    'posts_per_page' => '-1', 
    'meta_query' => array(
     array(
      'key' => '_is_ns_featured_post', 
      'value' => 'yes', 
     ), 
    ), 
); 

$exclude_posts = new WP_Query($args_exclude); 
if (!empty($exclude_posts->posts)) 
{ 
    foreach ($exclude_posts->posts as $post) 
    { 
     $exclude_id[] = $post->ID; 
    } 
} 


$args = array(
    'post_type' => array('post'), 
    'post_status' => array('publish'), 
    'nopaging' => false, 
    'posts_per_page' => '12', 
    'order' => 'DESC', 
    'orderby' => 'date', 
    'post__not_in' => $exclude_id //exclude post_id which has _is_ns_featured_post => 'yes' 
); 

// The Query 
$query = new WP_Query($args); 
foreach ($query->posts as $post) 
{ 
    print_r($post); 
} 

Надеюсь, это поможет!

+0

Благодарим вас за ввод. Но то, что мне нужно, - это что-то вроде следующего: post_type = package & package-tag = premium & post_status = publish –

+0

Как описано в следующей ссылке: –

+0

https://www.design33.net/how-to-visual- композиторы-сетка на заказ-запрос / –

0

См: visual composer wordpress query for post grid

Попробуйте это:

$args = array(
    'post_type'    => array('post'), 
    'post_status'   => array('publish'), 
    'nopaging'    => false, 
    'posts_per_page'   => '12', 
    'order'     => 'DESC', 
    'orderby'    => 'date', 
    'meta_query'    => array(
     'relation' => 'AND', 
     array(
      'key'  => '_is_ns_featured_post', 
      'value' => 'yes', 
      'compare' => 'NOT EXISTS', 
     ), 
    ), 
); 

echo http_build_query($args); 

// Результат:

post_type%5B0%5D=post&post_status%5B0%5D=publish&nopaging=0&posts_per_page=12&order=DESC&orderby=date&meta_query%5Brelation%5D=AND&meta_query%5B0%5D%5Bkey%5D=_is_ns_featured_post&meta_query%5B0%5D%5Bvalue%5D=yes&meta_query%5B0%5D%5Bcompare%5D=NOT+EXISTS 

http://sandbox.onlinephpfunctions.com/code/5c2bc6ddd37a02fc8facf4f227176e262854b92e

Я бы рекомендовал, чтобы избежать использования массива ('пост') в если только один тип сообщения, поэтому просто используйте post_type=post&post_status=publish&nopaging=0&posts_per_page=12&order=DESC&orderby=date&meta_query[relation]=and&meta_query[0][key]=_is_ns_featured_post&meta_query[0][value]=yes&meta_query[0][compare]=NOT EXISTS

P.S. возможно %5B и %5D вам нужно будет конвертировать обратно в [ и ] через echo urldecode(http_build_query($args));

Смежные вопросы