Obținerea unei liste de categorii atribuite postării curente
Cele două funcții de mai jos sunt concepute pentru a returna o listă de postări care au aceeași categorie ca postarea curentă vizualizată în single.php
Totuși, când folosesc var_dump pe $cat (ar trebui să fie o listă de categorii atribuite postării curente), nu obțin ceea ce mă aștept. Trebuie să deserializez array-ul înainte să-l transmit către interogarea 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;
}
//obține postări înrudite după categorie
function ce4_get_related_by_category()
{
global $post;
$cat = implode(',',get_cats());
$catHidden=get_cat_ID('ascuns');
$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>";
}
}

Puteți folosi get_the_category()
Aceasta va returna un array de ID-uri de categorii care aparțin postării curente.
$post_cats= array();
$categories = get_the_category();
foreach($categories as $cat) :
array_push($post_cats, $cat->cat_id);
endforeach;
Array-ul $post_cats va conține o listă cu toate ID-urile.

Când folosesc var_dump(get_the_category($post->ID)); se pare că primesc întregul obiect de categorii. Pot să trec un argument pentru a limita răspunsul la o listă de cat_id-uri?

Nu poți limita răspunsul doar la ID-uri, dar poți încerca ceva de genul acesta pentru a obține un array doar cu ID-urile. (verifică răspunsul meu, editat)

Mulțumesc Pippin, am actualizat întrebarea mea cu sugestiile tale. Primesc array(1) { [0]=> NULL } când folosesc var_dump($cat). Mă așteptam să obțin '10,7'

Puteți obține doar un array de ID-uri astfel cu wp_get_object_terms()
:
wp_get_object_terms($id, 'category', array('fields' => 'ids'))
Rețineți că get_the_category()
stochează în cache rezultatele și obținerea ID-urilor din returnarea sa ar putea fi de fapt mai eficientă decât preluarea ID-urilor separat cu această funcție.

Mulțumesc Rarst, trebuie să deserializez array-ul înainte să-l transmit la $myqueryCurrent și $myposts?

@Scott B conform codului tău actual va trebui să parcurgi array-ul pentru a nega valorile și a le adăuga într-un string. Cred că ar fi mai simplu să folosești category__not_in
în loc de cat
și să transmiți doar array-ul de ID-uri.

Am editat codul. Aveam nevoie doar să aplic metoda implode pe variabilă. Pare să funcționeze. Mai trebuie doar să elimin postul curent din bucla de output.
