Как получить только term_ids из get_the_terms в WordPress

РЕШИТЬ

Я нашел свой ответ.

Моя проблема была (как многие из вас уже сказали мне), что я кодировал и расшифровывал свои вещи. то, что я делаю сейчас, это то, что я удалил кодирование и декодирование и изменил это:

array_push($results, array(
'id' => $id,
'tax' => get_the_terms( $post->ID, 'type', $id ),

));

к этому:

array_push($results, (object) array(
'id' => $id,
'tax' => get_the_terms( $post->ID, 'type', $id ),

));

Теперь я могу получить свой налог следующим образом:

foreach($value->tax as $tax){

echo  $tax->name . ', ' ;

}

без ajax, запутавшего мою петлю, скопировав первую найденную таксономию и поместив ее на каждый элемент.

Спасибо всем за помощь.


ПРОБЛЕМА, РЕШЕННАЯ ВЫШЕ ^

Я создаю веб-сайт WordPress, который использует пользовательский фильтр AJAX, который
связан с моими пользовательскими категориями.

Это моя функция Ajax-filter.php:

function filter() {
$results = array();if (!empty($the_query->posts))
{
foreach ($the_query->posts as $post)
{
$id = $post->ID;
array_push($results, array(
'id' => $id,
'tax' => get_the_terms( $post->ID, 'type', $id ),

));
}
}
wp_reset_postdata();

$someJSON = json_encode($results);
// Convert JSON string to Object
$someObject = json_decode($someJSON);

foreach($someObject as $key => $value) {
echo $value->title;

}
die;
}
add_action( 'wp_ajax_filter', 'filter' );
add_action( 'wp_ajax_nopriv_filter', 'filter' );

Мой вопрос:

Как я могу использовать мои данные из налог в Термин-идентификатор так, как я использую в
мой Ajax-filter.php? использовать мои данные ($ Ценностно> название)

Array
(
[0] => Array
[title] => title
[tax] => Array
(
[0] => WP_Term Object
(
[term_id] => 54
)

)

)

-5

Решение

Во-первых, хорошо сделано при создании минимального примера вашего кода, нам легче увидеть проблему и как помочь 🙂

Теперь к вашему вопросу:

Есть 2 вопроса, прежде чем вы даже дойдете до своего актуального вопроса

  1. get_the_terms принимает только 2 параметра — вам не нужно передавать третий параметр $ id. Идентификатор передается в 1-м параметре уже
  2. get_the_terms возвращает массив, потому что с сообщением может быть связано несколько терминов. Вам нужно будет подумать, как обрабатывать несколько терминов.

Обрабатывать один термин на пост

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

Обновите свой код следующим образом — объяснение того, что делает, находится в комментариях:

  if (!empty($the_query->posts)){
foreach ($the_query->posts as $post){

// add this before you push the the values to your $results array

// get an array with the term_ids only
$term_ids = array();
$term_objs = get_the_terms( $post->ID, 'type' );

// get_the_terms returns an array of WP_Term objects
foreach ($term_objs as $term_obj)
$term_ids[] = $term_obj->term_id; // get the id from the WP_Term object

// $term_ids could have many ids, so for the purpose of your example
// we're just going to get the first one
// You will need to decide how you'll handle multiple ids
if ($term_ids) $term_id = $term_ids[0];

$id = $post->ID;
array_push($results, array(
'id' => $id,
[...] // your other values here
'tax' => $term_id, // add just the single term id value
));
}
}

Это будет все это для вашего $results массив следующим образом:
массив
(
[0] => Массив
(
[title] => title
[налог] => 54
)
)

Теперь вы можете получить доступ к термину id в вашем цикле следующим образом $value->taxнапример,

foreach($someObject as $key => $value) {
echo $value->title;
echo $value->tax; // or whatever you want to do with it....
}

Обрабатывать несколько терминов на пост

Если вы хотите обработать несколько терминов, вы можете нажать $term_ids массив:

           foreach ($term_objs as $term_obj)
$term_ids[] = $term_obj->term_id;

array_push($results, array(
'id' => $id,
[...] // your other values here
'tax' => $term_ids, // add the array of  term ids
));

… а затем перебрать массив при получении:

foreach($someObject as $key => $value) {
$term_ids = $value->tax;
foreach ($term_ids as $term_id)
echo $term_id; // or whatever you want to do with it....
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector