it-swarm.com.de

Überprüfen Sie, ob der Beitragstyp eine Laufzeit hat

Ich habe einen benutzerdefinierten Beitragstyp namens articles. Ich habe auch eine Taxonomie namens subject erstellt. Jeder Artikel hat ein Thema, genau wie Beiträge Kategorien haben.

Nun zum Problem. Wenn ich auf dem page-articles.php (page-slug.php) bin, muss es überprüfen, welches Thema der Artikel hat. Wie kann ich das machen?! Ich habe tagelang im Internet gesurft, ohne eine Lösung zu finden.

Was ich denke ist, dass ich irgendwie das Taxonomie-Thema überprüfen muss, wenn es einem Kriterium entspricht. Mögen:

if (is_term('news', 'subject'){
// do this
}

Aber ich kann wirklich nicht herausfinden, wie es funktioniert! Der is_term macht das nicht und ich kann auch keine andere Funktion finden.

6
Andreas Olsson
if( has_term( 'jazz', 'genre' ) ) {
    // do something
}

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

10
Gavin

Ich habe den folgenden Code ausprobiert und er funktioniert - ist es das, wonach Sie suchen?

<?php
    // grab your custom post type and output them all
    query_posts('post_type=articles&posts_per_page=-1');

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

        // you can output your title, permalink, etc. anywhere within the loop

        // get all items in your custom taxonomy
        $terms = get_the_terms($post->ID, 'Subject');

        // loop through each term and perform your check
        foreach ( $terms as $term ) {
            if($term->name == 'Term you are checking for') {
                // do stuff here
            }
        }
    endwhile; endif;
?>

Ersetzen Sie "Begriff, nach dem Sie suchen" oben durch den tatsächlichen Namen des Themas, mit dem Sie suchen, und nicht durch die Schnecke.

Bearbeiten: Ich bin kein Experte für die Leistung von Datenbanken. Ich bin mir also nicht sicher, ob dies der optimale Weg ist, um die gewünschten Informationen abzurufen. Ich bin offen für Beiträge anderer.

3
Ryan

Ich hatte selbst einen interessanten Kampf damit.

Ich verwende http://codex.wordpress.org/Function_Reference/get_the_termshttp://codex.wordpress.org/Function_Reference/is_object_in_term

Ich musste Kategorienüberschriften und andere Metadaten abhängig vom Vorhandensein von Taxonomie-Tags anzeigen.

Ich habe unvorhersehbare Ergebnisse erhalten, als is_object_in_term nach einem ARRAY bestimmter Tags gesucht hat, aber vielleicht ist das, was ich getan habe, für jemand anderen von Nutzen. Ich habe es schließlich mit NULL zum Laufen gebracht, aber ich musste nur prüfen, ob eine Taxonomie existiert, und ALLE darin enthaltenen Begriffe wurden auf den angezeigten Beitrag angewendet, damit ich bestimmte Anzeigeelemente ausgeben konnte.

Ich gehe davon aus, dass die Aktienbeispiele auf der Codex-Seite hilfreich sein sollten, wenn Sie nur nach EINEM Begriff suchen. So etwas wie...

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

Mein relevanter Code unten:

 $heading_nicename = array('Category','Neighborhoods','Zip Codes','Member Agencies','Nearest Public Transportation');
 $tax_slug = array('category','neighborhoods','Zip_codes','member_agencies','nearest_public_transportation');
 $heading_key = 0;
 $termindex = 0;`

  foreach ( $tax_slug as $taxonomy ) {
  //used to spit out terms as links
  $object_terms = wp_get_object_terms($post->ID, $taxonomy, array('fields' => 'all'));

  //used in a check to see if tax terms even apply to 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 'taxonomy: '.$taxonomy.'<br/>';
    //echo 'terms: '.$o_list.'<br/>';

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

 //Ends up being a check for ANY term under a taxonomy
    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( __( "View all posts in %s" ), $term->name ) . '" ' . '>' . $term->name.'</a>';
  //clean up commas
  if ($termloop !== ($endindex - 1)){
    echo ', ';
    $termloop++;
  }
  $termindex++;
}
    echo '</p>';

  }`
1
Chrisdigital

Haben Sie versucht, wp_get_object_terms zu verwenden?

Etwas in der Art von

$article_subjects = wp_get_object_terms($post->ID, 'subject');
0
Wyck

wenn jeder Artikel einen Betreff hat, müssen Sie nicht ob prüfen, ob er einen Betreff hat, oder? Dann können Sie so etwas verwenden:

<?php echo get_the_term_list( $post->ID, 'subject', __('Subject: ', 'theme-name'), '  ', '' ); ?>
0
user2015