Получить тег, присвоенный пользовательскому типу записи

#php #wordpress #custom-post-type

#php #wordpress #пользовательский тип записи

Вопрос:

Я использую WooCommerce и пометил один из products (пользовательский тип записи product ) тегом «электронный».

Сейчас я пытаюсь выполнить цикл и получить тег, назначенный этому сообщению, но в настоящее время, при попытке сбросить данные, я возвращаюсь bool(false) .

Вот мой подход:

 <?php
$args = array(
    'post_type' => 'product',
    'p' => $product_name,
    'posts_per_page' => 1
);

$loop = new WP_Query($args);

while ($loop->have_posts()):
    $loop->the_post();

    $posttags = get_the_tags();
    if ($posttags)
    {
        foreach ($posttags as $tag)
        {
            echo $tag->name;
        }
    }

    var_dump($posttags);

endwhile;
wp_reset_query();

?>
<?php
$args = array(
    'post_type' => 'product',
    'p' => $product_name,
    'posts_per_page' => 1
);

$loop = new WP_Query($args);

while ($loop->have_posts()):
    $loop->the_post();

    $posttags = get_the_tags();
    if ($posttags)
    {
        foreach ($posttags as $tag)
        {
            echo $tag->name;
        }
    }

    var_dump($posttags);

endwhile;
wp_reset_query();

?> 

Пробовали:

 <?php
global $post;

$args = array(
    'post_type' => 'product',
    'p' => $product_name,
    'posts_per_page' => 1
);

$loop = new WP_Query($args);

$product_tags = get_the_terms($post, 'product_tag');

while ($loop->have_posts()):
    $loop->the_post();

    if ($product_tags){
        foreach ($product_tags as $tag){
            echo $tag->name;
        }
    }

endwhile;
wp_reset_query(); ?> 

Но вышесказанное ничего не отражает?

Ответ №1:

Я считаю get_the_tags() , что он используется только для тегов post, а не для тегов продуктов WooCommerce. Для WooCommerce таксономия должна быть product_tag . Вы можете использовать

 <?php
$product_tags = get_the_terms( $post, 'product_tag' );
?>
 

чтобы получить теги, а затем перебирать их по мере необходимости.

Полный пример кода:

 <?php
global $post;

$args = array(
    'post_type' => 'product',
    'p' => $product_name,
    'posts_per_page' => 1
);

$loop = new WP_Query($args);

while ($loop->have_posts()):
    $loop->the_post();

    $product_tags = get_the_terms($post, 'product_tag');

    if ($product_tags amp;amp; !is_wp_error($product_tags){
        foreach ($product_tags as $tag){
            echo $tag->name;
        }
    }

endwhile;
wp_reset_query(); ?>
 

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

1. Привет, Кевин, я попробовал ваш подход, может быть, я просто неправильно его реализовал, но для меня он все еще ничего не отражает. Я отредактировал свой вопрос, чтобы продемонстрировать свой подход

2. Привет, пожалуйста, попробуйте вставить get_the_terms() внутри цикла. Это связано с тем, что в вашем случае $post object доступен только в цикле. (Мой ответ был отредактирован, чтобы отразить полный код)