Как получить все метки (теги) пользовательского типа записи по ID

18 мар. 2015 г., 10:36:51
Просмотры: 14K
Голосов: 1

Простой вопрос: как получить все метки (теги) пользовательского типа записи по ID? post_type=product.

Я пробовал использовать http://codex.wordpress.org/Function_Reference/wp_get_post_tags в своем цикле записей, но print_r ничего не возвращает.

Поэтому я попробовал этот вариант:

// Получаем все термины таксономии 'product_tag' для текущего поста
$term_list = wp_get_post_terms($post->ID, 'product_tag', array("fields" => "all"));
// Выводим массив с терминами
print_r($term_list);

И это работает - я получаю метки в print_r($term_list); Спасибо

3
Комментарии

@PieterGoosen Я пробовал стандартную функцию тегов WordPress, но мне нужно что-то кастомное, поэтому просто хочу решение. Вот что я нашел в ходе своего исследования.

sohan sohan
18 мар. 2015 г. 11:53:08

Сначала ты говоришь "print_r ничего не возвращает", а потом после твоего кода говоришь "он выдает мне теги" — он ничего не возвращает или возвращает не те теги? Ты используешь функцию правильно, насколько я могу судить, поэтому следующий шаг — убедиться, что $post->ID содержит ожидаемый ID. Затем нужно проверить, что к этому $post->ID в админке привязаны теги. И наконец, я бы перепроверил название таксономии product_tag, чтобы убедиться, что оно написано правильно.

Howdy_McGee Howdy_McGee
18 мар. 2015 г. 15:50:40

wp_get_post_tags не возвращает данные, тогда как wp_get_post_terms выдает массив данных. Разбирая его, я могу получить теги. Здесь теги также кастомного типа "product_tag" для post_type=product.

sohan sohan
19 мар. 2015 г. 12:18:46
Все ответы на вопрос 4
0

Подход через цикл: обычно файл archive-{custom_post}.php.

ПЕРВОЕ:

custom_post_plural Обозначает группу записей определенного типа.

Пример custom_post_plural: products (товары)

custom_post_singular Обозначает отдельный тип записи.

Пример custom_post_singular: product (товар)

ВТОРОЕ:

Переменная $args_custom_post_plural содержит параметры для WP_Query.

Переменная $custom_post_plural - это выполнение запроса.

Я использовал переменную $custom_post_plural_output для итерации содержимого WP_Object, конкретно с термином posts, делая содержимое "дружественным к массиву".

Как видите, я частично использовал инструкции Ahmad для вложенной итерации.

$args_custom_post_plural=array(
   'post_type' => 'custom_post_singular',
   'post_status' => 'publish', 
   'posts_per_page' => -1, 
   'fields' => 'ids', 
   'order_by' =>'id', 
   'order' => 'ASC'
);
$custom_post_plural = new WP_Query($args_custom_post_plural);
$custom_post_plural_output = $custom_post_plural->posts;
for ($i=0; $i < count($custom_post_plural_output); $i++) { 
   $tags = wp_get_post_tags($custom_post_plural_output[$i]);
   $buffer_tags ='';
   foreach ( $tags as $tag ) {
      $buffer_tags .= $tag->name . ',';
   }
}
echo $buffer_tags;

ЗАКЛЮЧЕНИЕ:

Кстати: если вы хотите использовать это в файле single-{custom_post}.php, можете использовать следующий код:

$tags = wp_get_post_tags($post->ID);
foreach ( $tags as $tag ) {
   $buffer_tags .= $tag->name . ',';
}
echo $buffer_tags;

Поскольку у вас должна быть связанная запись для отображения чего-либо.

Удачного кодинга.

P.S. @cjbj Почему, черт возьми, вы удалили мою правку, в ней что-то не так или что? Ужасное управление здесь, и очень злонамеренное, так как я не могу ответить на комментарий из-за количества моих репутационных очков.

16 авг. 2016 г. 11:07:18
0

Если вам нужно получить теги по ID записи, вы можете использовать следующую функцию. Это будет работать везде, так как метод основан на запросах к базе данных.

function sc_tf_get_tags_as_array($post_id){
        global $wpdb;
        $tbl_terms = $wpdb->prefix . "terms";
        $tbl_term_relationships = $wpdb->prefix . "term_relationships";

        $sql = "SELECT name FROM $tbl_terms WHERE term_id in (SELECT term_taxonomy_id FROM $tbl_term_relationships WHERE object_id='$post_id');";
        $results = $wpdb->get_results($sql);

        if($results){
            foreach($results as $row){
                $tags_list[] = $row->name;
            }
        }

        return $tags_list;
    }
7 июн. 2019 г. 20:08:54
0

wp_get_post_tags работает только для записей (posts), а не для других типов записей. Если посмотреть в файл /wp-includes/post.php, можно увидеть, что эта функция вызывает wp_get_post_terms с параметром $taxonomy, установленным в 'post_tag':

function wp_get_post_tags( $post_id = 0, $args = array() ) {
    return wp_get_post_terms( $post_id, 'post_tag', $args );
}

Для меток товаров (product tags) или других таксономий можно использовать функцию get_the_terms():

$tags = get_the_terms( $prod_id, 'product_tag' );
$tags_names = array();
if ( ! empty( $tags ) ) {
    foreach ( $tags as $tag ) {
        $tags_names[] = $tag->name;
    }
}
11 мар. 2019 г. 22:03:51
2
-2
global $post;
$tags = wp_get_post_tags( $post->ID );
if ( $tags ) {
    foreach ( $tags as $tag ) {
        $tag_arr .= $tag->slug . ',';
    }
    $args = array(
        'tag'           => $tag_arr,
        'post_per_page' => 10,
        'post__not_in'  => array( $post->ID ),
        'post_type'     =>'post_type_name'
    );
    $related_posts = get_posts( $args );
    if ( $related_posts ) {
        foreach ( $related_posts as $post ) : setup_postdata( $post ); ?>
            <div class="swiper-slide">
                <a class="hover-effect image-holder" href="<?php the_permalink(); ?>">
                    <?php the_post_thumbnail(); ?>
                    <i class="icon-circle icon-circle--thin fa fa-arrow-right">&shy;</i>
                </a>
            </div>
        <?php endforeach;
    }
} 
wp_reset_postdata();
3 нояб. 2015 г. 23:04:51
Комментарии

Ответы должны быть больше, чем просто фрагмент кода. Пожалуйста, внесите правку и объясните, почему это сработает.

Gabriel Gabriel
3 нояб. 2015 г. 23:33:55

Если вы — "Luis", который только что попытался отредактировать этот вопрос, пожалуйста, объедините свои учетные записи и повторите редактирование.

cjbj cjbj
16 авг. 2016 г. 10:49:43