• Как получить массив IDшников постов из кастомной таксономии?

    Смотрел на функцию get_terms, но не понял как это сделать и к тому же по описанию на wp-kama он работает очень медленно.

Просмотр 14 ответов — с 1 по 14 (всего 14)
  • get_terms получает термины, а не записи.
    полагаю, что если вам надо получить все записи всех терминов определенной таксономии — то сначала через get_terms надо получить все термины таксономии, а потом уже получать все записи всех найденных терминов.
    решений много — https://stackoverflow.com/questions/3354272/get-all-posts-from-custom-taxonomy-in-wordpress

    если вам надо получить все записи всех терминов

    Нет, записи не нужны. Мне надо получить только ID всех постов из одной кастомной таксономии. Причем всех статусов, а не только опубликованных.
    Сейчас пытаюсь сделать это через WP_Query, но пока тоже не получается.

    еще раз повторю.
    нельзя получить ни записи, ни их ID по таксономии.
    только по терминам этой таксономии.
    а значит сначала надо получить ID всех терминов этой таксономии — а потом WP_Query с выборкой по терминам таксономии.

    $myterms = get_terms('taxonomy-name', 'orderby=none&hide_empty');
    
    foreach ($myterms as $term) :
    
    $args = array(
        'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash'),
        'posts_per_page' => -1,
        'tax_query' => array(
            array(
                $term->slug
            )
        )
    );
    
    //  assigning variables to the loop
    global $wp_query;
    $wp_query = new WP_Query($args);
    
    // starting loop
    while ($wp_query->have_posts()) : $wp_query->the_post();
    
    //тут засовываем в массив ID записей через get_the_ID()
    
    endwhile;
    
    endforeach;

    Как получить массив IDшников постов из кастомной таксономии?

    Если Вы сами создавали таксономию, то точно знаете, какой тип записей закреплен за ней. Если нет, то можно и посмотреть код. Или, если совсем плохо, получить тип(ы) из глобальной переменной $wp_taxonomies.

    А зная тип, можно легко получить массив всех IDов записей нужного типа

    $ids = $wpdb->get_col("select ID from $wpdb->posts where post_type='нужный_тип'");
    

    WP_Query с выборкой по терминам таксономии.

    Вот это я вчера пытался сделать и затык был именно на
    //тут засовываем в массив ID записей через get_the_ID()

    Названия и ссылки я получал, а вот как получить ID так вчера и не сообразил. Попробую ещё сегодня повоевать.

    А зная тип, можно легко получить массив всех IDов записей нужного типа

    Спасибо.
    Использовать wpdb я как-то сторонюсь, хотя возможно что в данном случае оно будет и лучше.

    хотя возможно что в данном случае оно будет и лучше.

    Практически во всех нестандартных случаях специально сконструированный запрос будет эффективнее. Да и в некоторых стандартных, кстати, тоже. Универсальность и эффективность — антагонисты.

    А зная тип, можно легко получить массив всех IDов записей нужного типа

    А вообще это не то — мне надо получить ID не по типу поста, а по одному терму таксономии. Прощу прощения если не внятно объяснил задачу.

    Посмотрел в базе и понял алгоритм: надо вначале получить ID терма таксономии, а потом уже выбрать object_id из таблицы wp_term_relationships.

    • Ответ изменён 4 года, 6 месяцев назад пользователем Derat.

    Если это не будет сильно нагло с моей стороны — я правильно составил запрос?

    $ids = $wpdb->get_col("select object_id from $wpdb->term_relationships where term_taxonomy_id=$termsid");

    $termsid — ID терма таксономии, который я предварительно получу.

    • Ответ изменён 4 года, 6 месяцев назад пользователем Derat.

    Нет. term_id и term_taxonomy_id — разные IDы, хотя их значения и совпадают в подавляющем большинстве случаев.

    Я впопыхах выше не правильно написал.

    $termsid— это ID таксономии, который я предварительно получу.
    ID терминов — это как раз то, что нужно получить.

    $termsid— это ID таксономии

    
    where term_taxonomy_id=$termsid
    

    То есть, Вы хотите сравнивать id терма с id таксономии? Круто.

    ID терминов — это как раз то, что нужно получить.

    
    select object_id
    

    Еще круче.

    Всё, достаточно, я самоизолюруюсь. Извините.

    Еще круче.

    Да я ж не знаю как составить запрос, чтобы получить все ID из object_id при определенном значении в term_taxonomy_id

    Вот например при значении 75 в term_taxonomy_id получить массив значений из ‘object_id’ — 1619, 1665, 1731.

    View post on imgur.com

    Это выборка из таблицы wp_term_relationships

    Помогите если не трудно.

    • Ответ изменён 4 года, 6 месяцев назад пользователем Derat.

    Вот сейчас проверил запрос

    $post_ids = $wpdb->get_col("select object_id from $wpdb->term_relationships where term_taxonomy_id=75");
    	foreach ( $post_ids as $post_id ) {
    	echo 'post ID = '.$post_id."<br>";
    	}
     

    Всё выводит.

    Теперь осталось разобраться с сортировкой.

    Всё, достаточно, я самоизолюруюсь. Извините.

    И всё равно спасибо за вариант с wpdb. 🙂

Просмотр 14 ответов — с 1 по 14 (всего 14)
  • Тема «Получить id записей кастомной таксономии» закрыта для новых ответов.