Obținerea unei liste de categorii atribuite postării curente

19 ian. 2011, 17:19:33
Vizualizări: 3.92K
Voturi: 1

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>";
    }
}
0
Toate răspunsurile la întrebare 2
4

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.

19 ian. 2011 17:22:19
Comentarii

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?

Scott B Scott B
19 ian. 2011 17:40:15

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)

Pippin Pippin
19 ian. 2011 17:43:47

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'

Scott B Scott B
19 ian. 2011 18:00:16

Ar trebui să fie $cat->cat_ID în Loop.

Rarst Rarst
19 ian. 2011 18:13:36
4

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.

19 ian. 2011 18:08:23
Comentarii

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

Scott B Scott B
19 ian. 2011 18:24:46

@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.

Rarst Rarst
19 ian. 2011 18:27:24

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.

Scott B Scott B
19 ian. 2011 18:36:02

@Scott B ah, am înțeles greșit puțin, am crezut că vrei să excluzi acestea în loc să le incluzi. Da, în acest caz implode va funcționa perfect.

Rarst Rarst
19 ian. 2011 18:38:46