Поддержка Проблемы и решения Хранение данных в wp_posts и wp_postmeta

Просмотр 15 ответов — с 76 по 90 (всего 145)
  • Модератор Yuri

    (@yube)

    можно ли далее в рамках данного произвольного цикла извлечь определенные мета-поля отдельно для каждой категории выбранных постов ?

    А почему нет?

    @yube , т.е. в данном произвольном цикле

    $query = new WP_Query( 
        array(
        'post_type' => 'post',
        'post_status' => 'private',
        'posts_per_page'   => -1
      )
    );
    $posts = $query->posts;

    я выбираю все нужные мне записи и затем в цикле foreach ($posts as $post) с помощью функции get_the_terms( $post->ID, 'category' ) проверяю категорию каждого поста (у меня все посты имеют только одну категорию) и в зависимости от категории извлекаю и суммирую мета-поля в определенные переменные, наверное алгоритм такой? а как учитывать наличие определенного значения meta_value в meta_key у определенной категории поста ? ещё один цикл ?

    в результате получилось в рамках данного произвольного цикла извлечь и обработать в foreach ($posts as $post) определенные мета-поля отдельно для каждой категории выбранных постов. @yube , может быть Вы подскажете идею, как в рамках каждой категории при извлечении мета-полей выбирать их учитывая meta_value определенного meta_key.
    Т.е. сейчас у меня 9 параметров на выходе, а должно получиться 90 т.к. у каждой категории имеется 10 видов населенных пунктов (meta_key=’вид населенного пункта’ meta_value=’одно из 10 значений’). Вот кусочек кода:

    foreach ($posts as $post) 
        {
            $terms = get_the_terms( $post->ID, 'category' );
            if( $terms )
            {
    	       $term = array_shift( $terms );
            }          
            $term_post = $term->slug;
            if ($term_post == 'heat')
            {
                $heat_price = get_post_meta($post->ID, 'price', true);
                $heat_power = get_post_meta($post->ID, 'power', true);
                $sum_heat_price += $heat_price;
                $sum_heat_power += $heat_power;
                $heat = 1;
            }
            if ($term_post == 'water')
            {    // и так далее
    Модератор Yuri

    (@yube)

    Извините, ничего нового не подскажу.
    if/elseif, switch/case — всё как обычно в делается php.

    @yube , спасибо, буду разбираться. Здесь наверное есть 2 варианта — 1) делать 10 объектов WP_Query, в каждом используя разную переменную запроса мета-данных 'meta_value' => вид населенного пункта и далее проверять выбранные посты по категории как я и делал. Так ведь можно наверное ? и второй вариант — один объект WP_Query и как вы сказали: if/elseif, switch/case

    @yube , ещё раз прошу прощения за беспокойство. Голову ломаю не получается найти ошибку. Создал новый объект WP_Query, но он не получает ни одного поста, проблема в параметре ‘tag’ => $area_type — если его убрать, то посты извлекаются, но мне нужно извлечь посты определенной категории с определенной меткой (в $area_type передаю слаг метки)

    $query = new WP_Query(
        array(
        'post_type' => 'post',
        'post_status' => 'private',
        'posts_per_page' => -1,
        'tag' => $area_type,
        'tax_query' => array(
            array(
                'taxonomy' => 'category',
                'field'    => 'name',
                'terms'    => $category
                ),
            ),
        )
    );

    В чем моя ошибка ?

    Модератор Yuri

    (@yube)

    нужно извлечь посты определенной категории

    Для этого и существует tax_query.

    @yube , Но нужно извлечь посты определенной категории с определенной меткой, попробовал так:

    'tax_query' => array(
        'relation' => 'AND',
            array(
                'taxonomy' => 'category',
                'field'    => 'name',
                'terms'    => $category
                ),
            array(
                'taxonomy' => 'post_tag',
                'field'    => 'slug',
                'terms'    => $area_type
                ),
            ),

    Всё равно не работает. Метки ведь тоже таксономии, такая запись ‘tax_query’ тоже не верна ?

    Попробовал использовать meta_query (в произвольных полях у меня так же содержится тип населенного пункта), т.е. выбираю только определенную категорию у которой есть определенное произвольное поле с определенным значением (таких записей у меня не одна, а получаю ноль)

    'meta_query' => array(
            array(
                'key' => 'area_type',
    	    'value' => $area_type
                ),
            ),
        'tax_query' => array(
            array(
                'taxonomy' => 'category',
                'field'    => 'name',
                'terms'    => $category
                ),
            ),

    @yube , если будет возможность помогите, пожалуйста, натолкните на верный путь так сказать ))

    Модератор Yuri

    (@yube)

    Метки ведь тоже таксономии, такая запись ‘tax_query’ тоже не верна ?

    Конечно, таксономия. Похоже на правду. Проверьте соответствие ‘field’ тому, что в переменных.

    Модератор Yuri

    (@yube)

    Посмотрите, какие SQL-запросы генерируются с этими параметрами, попробуйте выполнить их в PMA. Возможно, увидите, что там не так, что лишнее или чего не хватает.

    и параметр meta_query я тоже верно прописал ?
    да, пока что как бы я не пробовал, не получается
    @yube , чтобы посмотреть, какие SQL-запросы генерируются с этими параметрами и выполнить их в phpMyAdmin, нужно установить плагин который вы упоминали ранее, не напомните его название ?

    Модератор Yuri

    (@yube)

    @yube , благодаря Вам и этому плагину кажется нашел свою ошибку. Проблема при добавлении записи из фронт-энда и установке для нее в этот момент меток функцией wp_set_post_tags ():

    Функция создаст новые метки, если не найдет указанные. Если указать название (в кириллице), то функция создаст метку. При этом: название будет названием, слаг слагом (обработается как обычно).

    Я привязываю метки через название в кириллице и обнаружил, что у меня создается новая метка с таким же названием которое есть, но с другим id.
    т.е лучше привязывать метки по id ? или можно и по слагу ?

    и тогда может быть существует штатная функция, чтобы определить id метки через её слаг или название?

Просмотр 15 ответов — с 76 по 90 (всего 145)
  • Тема «Хранение данных в wp_posts и wp_postmeta» закрыта для новых ответов.