Verifică dacă tipul de postare are termen

30 mar. 2011, 07:26:47
Vizualizări: 30.1K
Voturi: 6

Am un tip de postare personalizat, numit articles. De asemenea, am creat o taxonomie numită subject. Fiecare articol are un subiect, la fel cum postările au categorii.

Acum problema. Când sunt pe page-articles.php (page-slug.php), trebuie să verific ce subiect are articolul. Cum pot face asta?! Am căutat pe internet zile întregi fără să găsesc vreo soluție.

Mă gândesc că într-un fel trebuie să verific taxonomia subiectului dacă se potrivește cu un criteriu. Cum ar fi:

if (is_term('news', 'subject'){
// execută acest cod
}

Dar chiar nu-mi dau seama cum funcționează! Funcția is_term nu face asta, și nu pot găsi nicio altă funcție!

2
Comentarii

Folosești has_term ?

t31os t31os
30 mar. 2011 13:08:28

Doar pentru a clarifica, întrebi cum poți verifica dacă un anumit subiect este asociat cu un articol dat, sau o metodă prin care poți lista subiectele pentru un articol? Am văzut răspunsuri pentru ambele situații enumerate în răspunsuri și nu este clar care dintre ele se potrivește cel mai bine situației tale fără să știm mai multe detalii.

Justin Bell Justin Bell
30 sept. 2014 01:37:45
Toate răspunsurile la întrebare 5
1
10
if( has_term( 'jazz', 'genre' ) ) {
    // fă ceva
}

http://codex.wordpress.org/Function_Reference/has_term

13 dec. 2012 01:45:52
Comentarii

@user4310, Primul parametru este termenul pe care îl căutați, iar al doilea parametru este taxonomia în care se află acel termen.

s_ha_dum s_ha_dum
13 dec. 2012 02:25:56
0

Am încercat codul de mai jos și funcționează - este acesta ceea ce cauți?

<?php
    // preia tipul tău personalizat de postări și le afișează pe toate
    query_posts('post_type=articles&posts_per_page=-1');

    if ( have_posts() ) : while ( have_posts() ) : the_post();

        // poți afișa titlul, legătura permanentă etc. oriunde în buclă

        // preia toate elementele din taxonomia personalizată
        $terms = get_the_terms($post->ID, 'Subject');

        // parcurge fiecare termen și verifică
        foreach ( $terms as $term ) {
            if($term->name == 'Termenul pe care îl verifici') {
                // efectuează acțiuni aici
            }
        }
    endwhile; endif;
?>

Înlocuiește 'Termenul pe care îl verifici' de mai sus cu numele real al subiectului pe care îl verifici, nu cu slug-ul.

Editare: Nu sunt expert în performanța bazelor de date, așa că nu sunt sigur dacă aceasta este cea mai optimă metodă pentru a obține informațiile pe care le cauți - sunt deschis la sugestii din partea altora.

30 mar. 2011 08:02:07
1

Am avut și eu o luptă interesantă cu acest lucru.

Folosesc http://codex.wordpress.org/Function_Reference/get_the_terms http://codex.wordpress.org/Function_Reference/is_object_in_term

A trebuit să afișez titluri de categorii și alte metadate în funcție de prezența etichetelor de taxonomie.

Am obținut rezultate imprevizibile cu is_object_in_term verificând un ARRAY de etichete specifice, dar poate ceea ce am făcut este util pentru altcineva. Am reușit în cele din urmă să funcționeze folosind NULL, dar trebuia doar să verific dacă o taxonomie exista și orice termeni sub ea se aplicau postării vizualizate, astfel încât să pot afișa anumite elemente.

Presupun că dacă cauți doar UN singur termen, exemplele standard de pe pagina codex ar trebui să te ajute. Ceva de genul...

if ( is_object_in_term( $post->ID, 'news', 'subject' ) ) :
echo 'DA';
else :
echo 'NU';
endif;

Codul meu relevant mai jos:

 $heading_nicename = array('Categorie','Cartiere','Coduri Poștale','Agenții Membri','Cele mai apropiate mijloace de transport public');
 $tax_slug = array('category','neighborhoods','zip_codes','member_agencies','nearest_public_transportation');
 $heading_key = 0;
 $termindex = 0;`

  foreach ( $tax_slug as $taxonomy ) {
  //folosit pentru a afișa termenii ca linkuri
  $object_terms = wp_get_object_terms($post->ID, $taxonomy, array('fields' => 'all'));

  //folosit într-o verificare pentru a vedea dacă termenii taxonomici se aplică postării
  $o_terms = get_the_terms( $post->ID, $taxonomy );

  if ( $o_terms && ! is_wp_error( $o_terms ) ) {
    $check_these_terms = array();
  }

  foreach ( $o_terms as $term ) {
    $check_these_terms[] = $term->slug;
    //echo $term->slug.'<br/>';
    }

    $o_list = join( ", ", $check_these_terms );
    //echo 'taxonomy: '.$taxonomy.'<br/>';
    //echo 'terms: '.$o_list.'<br/>';

 //rezultate imprevizibile
 //if ( is_object_in_term( $post->ID, $taxonomy, array($o_list ) ){
    //echo '<h4>'.$heading_nicename[$heading_key].'</h4>';
    //}

 //Se dovedește a fi o verificare pentru ORICE termen sub o taxonomie
    if ( is_object_in_term( $post->ID, $taxonomy, null ) ){
    echo '<h4>'.$heading_nicename[$heading_key].'</h4>';
    }

    $heading_key++;
    echo '<p>';

$endindex = count($object_terms);
$termloop = 0;
foreach ($object_terms as $term) {

  echo '<a href="' . esc_attr(get_term_link($term, $taxonomy)) . '" title="' . sprintf( __( "Vezi toate postările din %s" ), $term->name ) . '" ' . '>' . $term->name.'</a>';
  //curăță virgulele
  if ($termloop !== ($endindex - 1)){
    echo ', ';
    $termloop++;
  }
  $termindex++;
}
    echo '</p>';

  }`
2 iun. 2013 05:54:49
Comentarii

prima porțiune de cod a funcționat în cazul meu.

breezy breezy
19 apr. 2017 23:26:37
0

Ai încercat să folosești wp_get_object_terms?

Ceva de genul

$article_subjects = wp_get_object_terms($post->ID, 'subject');
30 mar. 2011 07:57:55
0

dacă fiecare articol are un subiect, nu trebuie să verifici dacă are un subiect, corect? Atunci poți folosi ceva de genul:

<?php echo get_the_term_list( $post->ID, 'subject', __('Subiect: ', 'theme-name'), '  ', '' ); ?>
30 mar. 2011 14:02:52