покажите, что теги пользовательского сообщения вводят ТОЛЬКО

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

wp_tag_cloud();

который генерирует список тегов с прекрасными ссылками, но он показывает теги нормальных сообщений с ним. Я пытался запросить сообщения как это:

query_posts( array( 'post_type' => 'archive' ) );
if ( have_posts() ) : 
    while ( have_posts() ) : 
        the_post();
        the_tags('<ul><li>','</li><li>','</li></ul>');
        wp_reset_query();
    endwhile; 
endif;

но это показывает теги в дублирующихся загрузках. например, если у меня был тег как test, это сказало бы test,test,test и так далее.

Это - код, который объявляет теги

'taxonomies' => array('post_tag')

Кто-либо знает способ отобразить список тегов, которые характерны для моего пользовательского типа сообщения только?

4
08.05.2014, 04:44
4 ответа
 
     query_posts( 'post_type'=> 'custom_post_type_name' );
     if ( have_posts() ) : while ( have_posts() ) : the_post();
     $custom_post_tags = get_the_tags();
     if ( $custom_post_tags  ) {
        foreach( $custom_post_tags as $tag ) {
           $tags_arr[] = $tag -> name; 
        }
     }
     endwhile; endif;
     if( $tags_arr ) {
         $uniq_tags_arr = array_unique( $tags_arr );
         foreach( $uniq_tags_arr as $tag ) {
             // LIST ALL THE TAGS FOR DESIRED POST TYPE
             $tag_link = get_term_by('name', $tag, 'post_tag');
             echo 'term_id). '" title="'.$tag.'">' .$tag. '';
         }
    }
-1
19.02.2020, 22:12
  • 1
    Фантастическое огромное спасибо! Единственная вещь - это, dosen't содержат ссылку на тег, Вы знаете, как сделать это? –  user34466 24.06.2013, 13:41
  • 2
    Да просто необходимо включить это вышеупомянутое эхо цикла foreach" <литий> <href = '". $sanitizeTag"'. заголовок = "'. $tag. '$tag "> </a> </литий>"; –  S kumar 24.06.2013, 13:51
  • 3
    эй я просто настроил свой код мало, в то время как использование вышеупомянутый код и голосует за меня если Вы действительно удовлетворенный моим решением. –  S kumar 24.06.2013, 14:17
  • 4
    Спасибо, но его показ того же тега дважды, когда я использую тот код все еще! –  user34466 24.06.2013, 14:37
  • 5
    = array_unique ($tags_arr); удалит дублирующееся значение, просто пробуют не существует что-то, пошел не так, как надо, я предполагаю. Они - действительно то же, или походит на некоторый пробел или точку с ним. проверьте его в свои теги. Поскольку его мой рабочий код. –  S kumar 24.06.2013, 14:52
query_posts( 'post_type'=> 'custom_post_type_name' );
     if ( have_posts() ) : while ( have_posts() ) : the_post();
     $custom_post_tags = get_the_tags();
     if ( $custom_post_tags  ) {
        foreach( $custom_post_tags as $tag ) {
           $tags_arr[] = $tag -> name; 
        }
     }
     endwhile; endif;
     if( $tags_arr ) {
         $uniq_tags_arr = array_unique( $tags_arr );
         foreach($tags_arr as $tag ) {
             // LIST ALL THE TAGS FOR DESIRED POST TYPE
             $sanitizeTag =  sanitize_title($tag);

$current_tag = get_term_by('name', $tag, 'post_tag');

             echo '<a href="' . get_tag_link($current_tag->term_id). '">' .$tag. '</a>';
         }
    }

Это даст список тегов со ссылками на тег.

-1
19.02.2020, 22:12
  • 1
    Потрясающий, Это показывает ссылку теперь, но после тестирования правильно это все еще показывает дубликаты, у меня есть два сообщения с тем же тегом 'теста', и это показывает тест дважды, когда я использую тот код –  user34466 24.06.2013, 14:12
  • 2
    проверяет заголовок/краткий заголовок тега, который Вы используете. Должно быть что-то, что делает обоих тегами, чтобы не быть идентичным. Иначе array_unique должно быть, решил эту проблему. –  Rohit Pande 24.06.2013, 14:17
  • 3
    я удалил все теги и добавил новые и протестировал снова, я использую, только один отмечает не дублирование его в администраторе, только в том, когда он показывает –  user34466 24.06.2013, 14:27
  • 4
    Код работает теперь? или необходимо ли больше вносить изменения? –  Rohit Pande 24.06.2013, 14:30
  • 5
    Работа, все еще показывая удваивается! –  user34466 24.06.2013, 14:32

@user34466 Это должно работать для решения дублирующейся проблемы:

                <ul>
            <?php
                query_posts(array( 'post_type'=> 'work' ));
                if ( have_posts() ) : while ( have_posts() ) : the_post();
                    $custom_post_tags = get_the_tags();
                if ( $custom_post_tags ) {
                    foreach( $custom_post_tags as $tag ) {
                        $tags_arr[] = $tag -> name;
                    }
                }
                endwhile; endif;
                if( $tags_arr ) {
                    $uniq_tags_arr = array_unique( $tags_arr );
                 foreach( $uniq_tags_arr as $tag ) {
                     // LIST ALL THE TAGS FOR DESIRED POST TYPE
                     $sanitizeTag =  sanitize_title($tag);
                     $tag_link = get_term_by('name', $tag, 'post_tag');
                     echo '<li><a href="'. get_tag_link($tag_link->term_id).'">' .$tag. '</a></li>';
                     }
                 }
             ?>
            </ul>

Удачи!

-1
19.02.2020, 22:12
  • 1
    Объясните, почему это было на самом деле полезно.Спасибо. –  kaiser 08.05.2014, 04:44

Вышеупомянутые решения работают правильно, но точно не оптимизированы. Вот метод, который запрашивает ту базу данных ONCE для данных, которые Вы ищете, и дает Вам список объектов термина. Это может принять post_type аргумент, и если Вы не будете предоставлены, то будет использовать post_type текущего глобального объекта $post.

function post_type_tags( $post_type = '' ) {
    global $wpdb;

    if ( empty( $post_type ) ) {
        $post_type = get_post_type();
    }

    return $wpdb->get_results( $wpdb->prepare( "
        SELECT COUNT( DISTINCT tr.object_id ) 
            AS count, tt.taxonomy, tt.description, tt.term_taxonomy_id, t.name, t.slug, t.term_id 
        FROM {$wpdb->posts} p 
        INNER JOIN {$wpdb->term_relationships} tr 
            ON p.ID=tr.object_id 
        INNER JOIN {$wpdb->term_taxonomy} tt 
            ON tt.term_taxonomy_id=tr.term_taxonomy_id 
        INNER JOIN {$wpdb->terms} t 
            ON t.term_id=tt.term_taxonomy_id 
        WHERE p.post_type=%s 
            AND tt.taxonomy='post_tag' 
        GROUP BY tt.term_taxonomy_id 
        ORDER BY count DESC
    ", $post_type ) );
}

Таким образом, если Вы звонили post_type_tags( 'archive' ), например, Вы получили бы список объектов термина для post_tag в порядке убывания популярности для типов сообщения 'архива'.

Можно затем испустить список ссылок как так:

$archive_tags = post_type_tags( 'archive' );

foreach( $archive_tags as $tag ) {
    echo '<a href="' . get_tag_link( $tag->term_id ). '">' . esc_html( $tag->name ) . '</a>';
}
6
19.02.2020, 22:12
  • 1
    , Просто прекрасное! Примите этот –  rAjA 03.04.2017, 06:21

Теги

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