Controllare se il tipo di post ha un termine

30 mar 2011, 07:26:47
Visualizzazioni: 30.1K
Voti: 6

Ho un tipo di post personalizzato chiamato articles. Ho anche creato una tassonomia chiamata subject. Ogni articolo ha un soggetto, proprio come i post hanno le categorie.

Ora il problema. Quando mi trovo su page-articles.php (page-slug.php), devo controllare quale soggetto ha l'articolo. Come posso farlo?! Ho navigato sul web per giorni senza trovare alcuna soluzione.

Quello che penso è che in qualche modo devo controllare la tassonomia subject se corrisponde a determinati criteri. Tipo:

if (is_term('news', 'subject'){
// fai questo
}

Ma non riesco proprio a capire come funziona! La funzione is_term non fa questo, e non riesco a trovare nessun'altra funzione!

2
Commenti

Usare has_term ?

t31os t31os
30 mar 2011 13:08:28

Giusto per chiarire, stai chiedendo come verificare se un argomento specifico è associato a un determinato articolo, oppure un modo per elencare gli argomenti di un articolo? Ho visto risposte per entrambi i casi tra le soluzioni proposte, e non è chiaro quali affrontino meglio la tua situazione senza saperlo.

Justin Bell Justin Bell
30 set 2014 01:37:45
Tutte le risposte alla domanda 5
1
10
if( has_term( 'jazz', 'genre' ) ) {
    // fai qualcosa
}

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

13 dic 2012 01:45:52
Commenti

@user4310, Il primo parametro è il termine che stai cercando e il secondo parametro è la tassonomia a cui appartiene quel termine.

s_ha_dum s_ha_dum
13 dic 2012 02:25:56
0

Ho provato il codice qui sotto e funziona -- è questo che stavi cercando?

<?php
    // recupera il tuo custom post type e li mostra tutti
    query_posts('post_type=articles&posts_per_page=-1');

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

        // puoi mostrare titolo, permalink, ecc. in qualsiasi punto del loop

        // ottieni tutti gli elementi della tua tassonomia personalizzata
        $terms = get_the_terms($post->ID, 'Subject');

        // scorri ogni termine e fai il tuo controllo
        foreach ( $terms as $term ) {
            if($term->name == 'Termine che stai cercando') {
                // fai qualcosa qui
            }
        }
    endwhile; endif;
?>

Sostituisci 'Termine che stai cercando' qui sopra con il nome effettivo del subject che vuoi verificare, non lo slug.

Modifica: Non sono un esperto di performance del database, quindi non sono sicuro che questo sia il modo ottimale per recuperare le informazioni che cerchi -- sono aperto a suggerimenti da altri.

30 mar 2011 08:02:07
1

Ho avuto anch'io una lotta interessante con questo problema.

Ho utilizzato http://codex.wordpress.org/Function_Reference/get_the_terms http://codex.wordpress.org/Function_Reference/is_object_in_term

Dovevo mostrare intestazioni di categorie e altri metadati in base alla presenza di tag di tassonomia.

Ho ottenuto risultati imprevedibili con is_object_in_term controllando un ARRAY di tag specifici, ma forse ciò che ho fatto può essere utile a qualcun altro. Alla fine ho risolto usando NULL, ma avevo solo bisogno di verificare se una tassonomia esistesse e QUALSIASI termine sotto di essa fosse applicato al post visualizzato, così da poter mostrare determinati elementi.

Presumo che se stai cercando solo UN termine, gli esempi standard nella pagina del codex dovrebbero aiutare. Qualcosa come...

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

Il mio codice rilevante qui sotto:

 $heading_nicename = array('Categoria','Quartieri','Codici Postali','Agenzie Membro','Trasporto Pubblico più Vicino');
 $tax_slug = array('category','neighborhoods','zip_codes','member_agencies','nearest_public_transportation');
 $heading_key = 0;
 $termindex = 0;`

  foreach ( $tax_slug as $taxonomy ) {
  //usato per mostrare i termini come link
  $object_terms = wp_get_object_terms($post->ID, $taxonomy, array('fields' => 'all'));

  //usato per verificare se i termini della tassonomia si applicano al post
  $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 'tassonomia: '.$taxonomy.'<br/>';
    //echo 'termini: '.$o_list.'<br/>';

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

 //Alla fine è un controllo per QUALSIASI termine sotto una tassonomia
    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( __( "Visualizza tutti i post in %s" ), $term->name ) . '" ' . '>' . $term->name.'</a>';
  //pulizia delle virgole
  if ($termloop !== ($endindex - 1)){
    echo ', ';
    $termloop++;
  }
  $termindex++;
}
    echo '</p>';

  }`
2 giu 2013 05:54:49
Commenti

la prima porzione di codice ha funzionato per il mio caso.

breezy breezy
19 apr 2017 23:26:37
0

Hai provato a usare wp_get_object_terms?

Qualcosa del genere

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

se ogni articolo ha un argomento, non devi controllare se ha un argomento, giusto? Allora puoi usare qualcosa come questo:

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