Come ottenere un elenco di categorie assegnate al post corrente?
Le due funzioni seguenti sono progettate per restituire un elenco di post che condividono la stessa categoria del post corrente visualizzato in single.php
Tuttavia, quando eseguo var_dump su $cat (che dovrebbe essere un elenco delle categorie assegnate al post corrente), non ottengo ciò che mi aspetto. Devo forse deserializzare l'array prima di passarlo alla query get_posts?
// Ottiene l'ID delle categorie del post corrente
function get_cats()
{
$post_cats= array();
$categories = get_the_category();
foreach($categories as $cat){
array_push($post_cats, $cat->cat_ID);
}
return $post_cats;
}
// Ottiene post correlati per categoria
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>";
}
}

Puoi utilizzare get_the_category()
Restituirà un array di ID di categoria appartenenti al post corrente.
$post_cats= array();
$categories = get_the_category();
foreach($categories as $cat) :
array_push($post_cats, $cat->cat_id);
endforeach;
L'array $post_cats conterrà quindi una lista di tutti gli ID.

Quando eseguo var_dump(get_the_category($post->ID)); sembra che ottenga tutti gli oggetti delle categorie. Posso passare un argomento per limitare la risposta a una lista di cat_id?

Non puoi limitare la risposta ai soli ID, ma potresti provare qualcosa del genere per ottenere un array contenente solo gli ID. (controlla la mia risposta, modificata)

Grazie Pippin, ho aggiornato la mia domanda con i tuoi suggerimenti. Ottengo array(1) { [0]=> NULL } quando faccio var_dump($cat). Mi aspetterei '10,7'

Puoi ottenere un array di soli ID in questo modo con wp_get_object_terms()
:
wp_get_object_terms($id, 'category', array('fields' => 'ids'))
Nota che get_the_category()
memorizza nella cache i risultati e ottenere gli ID dal suo ritorno potrebbe effettivamente essere più efficiente che recuperare gli ID separatamente con questo metodo.

Grazie Rarst, devo deserializzare l'array prima di passarlo a $myqueryCurrent e $myposts?

@Scott B secondo il tuo codice attuale dovrai scorrere l'array per negare i valori e aggiungerli alla stringa. Penso sarebbe più semplice usare category__not_in
invece di cat
e passare direttamente l'array di ID.

Ho modificato il codice. Mi bastava eseguire il metodo implode sulla variabile. Sembra funzionare. Devo solo rimuovere il post corrente dal loop di output.
