РЕШИТЬ
Я нашел свой ответ.
Моя проблема была (как многие из вас уже сказали мне), что я кодировал и расшифровывал свои вещи. то, что я делаю сейчас, это то, что я удалил кодирование и декодирование и изменил это:
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 ) ) )
Во-первых, хорошо сделано при создании минимального примера вашего кода, нам легче увидеть проблему и как помочь 🙂
Теперь к вашему вопросу:
Есть 2 вопроса, прежде чем вы даже дойдете до своего актуального вопроса
get_the_terms
принимает только 2 параметра — вам не нужно передавать третий параметр $ id. Идентификатор передается в 1-м параметре уже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....
}
Других решений пока нет …