Проверьте, имеет ли тип сообщения срок

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

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

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

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

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

6 голосов | спросил Andreas Olsson 30 MaramWed, 30 Mar 2011 08:26:47 +04002011-03-30T08:26:47+04:0008 2011, 08:26:47

5 ответов


10
if( has_term( 'jazz', 'genre' ) ) {
    // do something
}

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

ответил Gavin 13 ThuEurope/Moscow2012-12-13T03:45:52+04:00Europe/Moscow12bEurope/MoscowThu, 13 Dec 2012 03:45:52 +0400 2012, 03:45:52
3

Я пробовал код ниже, и он работает - это то, что вы ищете?

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

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

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

ответил Ryan 30 MaramWed, 30 Mar 2011 09:02:07 +04002011-03-30T09:02:07+04:0009 2011, 09:02:07
1

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

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

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

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

Я предполагаю, что если вы просто охотитесь за ОДНОМ термином, примеры использования на странице codex должны помочь. Что-то вроде ...

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

  }`
ответил Chrisdigital 2 J0000006Europe/Moscow 2013, 06:54:49
0

Вы пытались использовать wp_get_object_terms?

Что-то вдоль линий

$article_subjects = wp_get_object_terms($post->ID, 'subject');
ответил Wyck 30 MaramWed, 30 Mar 2011 08:57:55 +04002011-03-30T08:57:55+04:0008 2011, 08:57:55
0

Если в каждой статье есть тема, вам не нужно проверять , есть ли у нее предмет, не так ли? Затем вы можете использовать что-то вроде этого:

<?php echo get_the_term_list( $post->ID, 'subject', __('Subject: ', 'theme-name'), '  ', '' ); ?>
ответил George 30 MarpmWed, 30 Mar 2011 15:02:52 +04002011-03-30T15:02:52+04:0003 2011, 15:02:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132