Cómo obtener una lista de categorías asignadas al post actual
Las dos funciones siguientes están diseñadas para devolver una lista de posts que comparten la misma categoría que el post actual que se está viendo en single.php
Sin embargo, cuando hago var_dump en $cat (que debería ser una lista de las categorías asignadas al post actual), no obtengo lo que espero. ¿Necesito deserializar el array antes de pasarlo a la consulta 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;
}
// Obtener posts relacionados por categoría
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>";
}
}

Puedes usar get_the_category()
Devolverá un array de IDs de categorías pertenecientes al post actual.
$post_cats = array();
$categories = get_the_category();
foreach($categories as $cat) :
array_push($post_cats, $cat->cat_id);
endforeach;
Luego el array $post_cats tendrá una lista con todos los IDs.

Cuando hago var_dump(get_the_category($post->ID)); parece que estoy obteniendo todos los objetos de categoría. ¿Puedo pasar un argumento para limitar la respuesta a una lista de cat_id's?

No puedes limitar la respuesta solo a los IDs, pero podrías intentar algo como esto para obtener un array con solo los IDs. (revisa mi respuesta, editada)

Gracias Pippin, he actualizado mi pregunta con tus sugerencias. Estoy obteniendo array(1) { [0]=> NULL } cuando hago var_dump($cat). Esperaba obtener '10,7'

Puedes obtener solo un array de IDs así con wp_get_object_terms()
:
wp_get_object_terms($id, 'category', array('fields' => 'ids'))
Nota que get_the_category()
almacena en caché los resultados y obtener los IDs desde su retorno podría ser más eficiente que obtener los IDs por separado con esto.

Gracias Rarst, ¿necesito deserializar el array antes de pasarlo a $myqueryCurrent y $myposts?

@Scott B según tu código actual necesitarás recorrer el array para negar los valores y añadirlos a la cadena. Creo que sería más simple usar category__not_in
en lugar de cat
y simplemente pasar un array de IDs.

He editado el código. Solo necesitaba ejecutar el método implode en la variable. Parece que funciona. Solo necesito eliminar el post actual del bucle de salida.
