#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 доступен только в цикле. (Мой ответ был отредактирован, чтобы отразить полный код)