andreasolsson
  • 0
Новичок

Проверить, есть ли в типе записи термин

  • 0

У меня есть пользовательский тип сообщений, который называется articles . Я также создал таксономию под названием subject . У каждой статьи есть тема, так же как у постов есть категории.

Теперь к проблеме. Когда я нахожусь на page-articles.php ( page-slug.php ), он должен проверить тему статьи. Как мне это сделать?! Я несколько дней бороздил просторы интернета и не нашел решения.

Я думаю, что каким-то образом я должен проверить предмет таксономии, если он соответствует критериям. Нравиться:

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

Но я действительно не могу понять, как это работает! Этого is_term не делает, и я не могу найти никакой другой функции.

Share
  1. Я попробовал приведенный ниже код, и он работает — это то, что вы ищете?

    <?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;
    ?>
    

    Замените «Термин, который вы проверяете» выше на фактическое имя субъекта, который вы проверяете, а не на слаг.

    Изменить: я не эксперт по производительности базы данных, поэтому не уверен, что это оптимальный способ получения информации, которая вам нужна, — я открыт для других.

    • 0
  2. У меня самого была интересная борьба с этим.

    Я использую http://codex.wordpress.org/Function_Reference/get_the_terms http://codex.wordpress.org/Function_Reference/is_object_in_term

    Мне приходилось отображать заголовки категорий и другие метаданные в зависимости от наличия тегов таксономии.

    Я получил непредсказуемые результаты с проверкой is_object_in_term на наличие МАССИВА определенных тегов, но, возможно, то, что я сделал, пригодится кому-то еще. В итоге я заставил его работать, используя NULL, но мне просто нужно было проверить, существует ли таксономия и ЛЮБЫЕ термины под ней применяются к просматриваемому сообщению, чтобы я мог отразить определенные элементы отображения.

    Я предполагаю, что если вы просто ищете ОДИН термин, примеры запасов на странице кодекса должны помочь. Что-то типа…

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

    Мой соответствующий код ниже:

     $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>';
    
      }`
    
    • 0
  3. Вы пробовали использовать wp_get_object_terms?

    Что-то в духе

    $article_subjects = wp_get_object_terms($post->ID, 'subject');
    
    • 0
  4. если у каждой статьи есть тема, вам не нужно проверять, есть ли у нее тема, верно? Затем вы можете использовать что-то вроде этого:

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

Оставить ответ

You must login to add an answer.