Как получить список категорий, назначенных текущей записи?
Приведенные ниже функции предназначены для возврата списка записей, которые имеют те же категории, что и текущий просматриваемый пост в single.php
Однако, когда я делаю var_dump для $cat (должен быть список категорий, назначенных текущему посту), я не получаю ожидаемого результата. Нужно ли мне десериализовать массив перед передачей его в запрос get_posts?
function get_cats()
{
$post_cats= array();
$categories = get_the_category();
foreach($categories as $cat){
array_push($post_cats, $cat->cat_ID);
}
return $post_cats;
}
// Получение связанных записей по категории
function ce4_get_related_by_category()
{
global $post;
$cat = implode(',',get_cats());
$catHidden=get_cat_ID('hidden');
$myqueryCurrent = new WP_Query();
$myqueryCurrent->query(array('cat' => "$cat,-$catHidden",'post__not_in' => get_option('sticky_posts')));
$totalpostcount = $myqueryCurrent->found_posts;
if($totalpostcount > 0)
{
echo "<ul>";
$myposts = get_posts(array('cat' => "$cat,-$catHidden",'numberposts' => $cb2_current_count));
foreach($myposts as $idx=>$post)
{
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><?php the_excerpt(); ?></li>
<?php
}
echo "</ul>";
}
}

Вы можете использовать get_the_category()
Эта функция вернет массив ID категорий, к которым принадлежит текущая запись.
$post_cats = array(); // Создаем пустой массив для хранения ID категорий
$categories = get_the_category(); // Получаем все категории текущей записи
foreach($categories as $cat) : // Перебираем все категории
array_push($post_cats, $cat->cat_id); // Добавляем ID категории в массив
endforeach;
После выполнения этого кода массив $post_cats будет содержать список всех ID категорий.

Когда я делаю var_dump(get_the_category($post->ID)); кажется, что я получаю полные объекты категорий. Можно ли передать аргумент, чтобы ограничить вывод только списком cat_id?

Вы не можете ограничить вывод только ID, но можно попробовать что-то вроде этого, чтобы получить массив только с ID. (проверьте мой ответ, отредактировано)

Спасибо, Pippin, я обновил свой вопрос с вашими предложениями. При var_dump($cat) я получаю array(1) { [0]=> NULL }. Ожидаю '10,7'

Вы можете получить массив только идентификаторов следующим образом с помощью wp_get_object_terms()
:
wp_get_object_terms($id, 'category', array('fields' => 'ids'))
Обратите внимание, что get_the_category()
кэширует результаты, и получение идентификаторов из его возвращаемого значения может быть более эффективным, чем отдельное получение идентификаторов с помощью этой функции.

Спасибо, Rarst, нужно ли десериализовать массив перед передачей в $myqueryCurrent и $myposts?

@Scott B согласно вашему текущему коду вам нужно будет пройтись по массиву, чтобы инвертировать значения и добавить их в строку. Я думаю, будет проще использовать category__not_in
вместо cat
и просто передать массив ID.

Я отредактировал код. Мне просто нужно было применить метод implode к переменной. Кажется, это работает. Теперь мне нужно только убрать текущий пост из цикла вывода.
