Поддержка Проблемы и решения query posts и custom fields

  • Решено romzes5000

    (@romzes5000)


    Здравствуйте, такая проблема:
    нужно не выводить на страницу записи со определённым значением мета value.
    Проблема в том, что записи которые нужно выводить совсем не имеют этого мета key-я, и не получается составить query_posts Запрос.
    query_posts(post_type=post&meta_key=ne_glav&meta_compare=!=&meta_value=1;
    мне нужно не выводить записи с полем ne_glav = 1.

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Перед LOOP:

    $the_query = new WP_Query( array( 'posy_type' => 'post', 'meta_key' => 'ne_glav', 'meta_value' => '1', 'meta_compare' => '!=' ) );
    // берем посты, берем ключ и его значение, если не равно 1, то выдаем в эфир

    Затем изменить LOOP:

    while ( $the_query->have_posts() ) : $the_query->the_post();
    //bla bla
    endwhile;
    wp_reset_postdata(); //не забудьте

    Автор romzes5000

    (@romzes5000)

    нее. немного не так.. когда мы указываем в запросе meta_key он ищет по постам у которых в этом ключе есть какое либо значение. то есть если в посте нет meta поля ne_glav то эту запись он отсеет а мне как раз они нужны..

    Да, действительно. Попробовал сам, что предложил 🙂 Если даже оставить только meta_value != 1, то выдает совсем не то… Как-то нелогично…

    Автор romzes5000

    (@romzes5000)

    полагаю что средствами wp_query тут не обойтись. пойду через проверку на наличие произвольного поля. То есть буду брать все записи, но выводить только удовлетворяющие условию

    Ну вот я набросал «корявый код», но вроде работает. В functions.php закинул такой участок:

    function get_post_custom_field() {
        global $post;
        $mypost = get_posts(array('meta_value' => '1'));
        $new = array();
        foreach ($mypost as $post) :
        {
            $new[] = $post->ID;
        }
    endforeach;
    return $new;
    }

    То бишь мы получаем все ID со значением поля meta_value = 1
    Затем заменил цикл в выбранном файле шаблона и в exclude внес выбранные ранее ID (которые ненужные):

    $myposts = get_posts(array('exclude' => array_values(get_post_custom_field())));
    foreach ($myposts as $posts)
    {
        echo $posts->ID;
        echo $posts->post_title;
    }

    [это примерный вывод, если будете применять, то оформляйте сами :)]
    Блин, понимаю, что коряво, но вроде на тестовом работает.
    UPD использовал http://codex.wordpress.org/Template_Tags/get_posts

    Автор romzes5000

    (@romzes5000)

    Воо 🙂 спасибо. Подогнал всё как надо и работает!))

    [offtop] Может кто из коллег, подскажет более разумное и дельное 🙂 Кстати, заставили задуматься меня, я тоже планирую на кастомных полях реализоваться… буду мучиться тоже 🙂

    Автор romzes5000

    (@romzes5000)

    Да.. С custom_fields не просто подружиться)) давно с ними бьюсь.

    Автор romzes5000

    (@romzes5000)

    Упростил код
    <? query_posts(array('post_type'=>'post','showposts'=>'2','post__not_in'=>get_post_custom_field())); ?>

    Потом стандартный Loop, со всеми его возможностями.

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Тема «query posts и custom fields» закрыта для новых ответов.