在单个帖子页面上列出所有类别,但不包括当前帖子类别

时间:2016-05-13 作者:wpuser

我想显示类别列表,不包括用户正在导航的当前单个帖子的类别。列表显示在single.php 样板

我正在使用此代码显示所有类别,工作正常,但我找不到排除当前帖子类别的方法:

<ul class="submenu-category">
  <?php
    // your taxonomy name
    $tax = \'category\';

    // get the terms of taxonomy
    $terms = get_terms( $tax, $args = array(
      \'hide_empty\' => false, // do not hide empty terms
    ));

    // loop through all terms
    foreach( $terms as $term ) {

        // Get the term link
        $term_link = get_term_link( $term );

        if( $term->count > 0 )
          // display link to term archive
          // echo \'<a href="\' . esc_url( $term_link ) . \'">\' . $term->name .\'</a>\';
          echo \'<li><a data-filter=".\'. $term->slug .\'" href="javascript:void(0)" >\' . $term->name .\'</a></li>\';

        elseif( $term->count !== 0 )
          // display name
          echo \'\' . $term->name .\'\';
    } ?>
</ul>
有什么想法可以实现吗?

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

这里的想法是使用查询对象的ID来获取post术语(,因为我们很可能在这里的循环之外,如果在循环内部,只需使用get_the_ID())。从那里,我们可以使用wp_list_pluck() 获取所有术语ID并将其传递给get_terms() exclude 参数

只是一个注释,如WordPress V4。5,分类法应作为$args, 我会处理这两个案子

4.5之前

// Set all our variables
$taxonomy = \'category\';
$post_id  = $GLOBALS[\'wp_the_query\']->get_queried_object_id();
$args     = [
    \'hide_empty\' => false
];

// Get the ID\'s from the post terms
$post_terms = get_the_terms( $post_id, $taxonomy );
if (    $post_terms
     && !is_wp_error( $post_terms )
) {
    $term_ids = wp_list_pluck( $post_terms, \'term_id\' );

    // Get all the terms with the post terms excluded
    $args[\'exclude\'] = $term_ids;
}

$terms = get_terms( $taxonomy, $args );

V 4.5+版本

// Set all our variables
$taxonomy = \'category\';
$post_id  = $GLOBALS[\'wp_the_query\']->get_queried_object_id();
$args     = [
    \'taxonomy\'   => $taxonomy,
    \'hide_empty\' => false
];

// Get the ID\'s from the post terms
$post_terms = get_the_terms( $post_id, $taxonomy );
if (    $post_terms
     && !is_wp_error( $post_terms )
) {
    $term_ids = wp_list_pluck( $post_terms, \'term_id\' );

    // Get all the terms with the post terms excluded
    $args[\'exclude\'] = $term_ids;
}

$terms = get_terms( $args );

SO网友:cjbj

首先,您需要一个包含当前帖子所有类别的数组:

$current_cats = wp_get_post_categories(); // assuming you are in the loop
然后,您必须循环遍历$current\\u cats并从$terms中删除项目

    foreach( $current_cats as $cat ) {
        if (($key = array_search($cat, $terms)) !== false) {
            unset($terms[$key]);
            }
        }
希望这能奏效。

相关推荐

显示作者姓名PHP(自制插件)

我有一个需要帮助的问题,因为我自己找不到解决办法。我接管了一个网站,之前有人在那里创建了一个自制插件。。使用默认插件“Contact Form 7”,用户可以在页面上创建帖子。()https://gyazo.com/c8b20adecacd90fb9bfe72ad2138a980 )关于自行创建的插件“Contact Form 7 extender”,帖子是通过PHP代码在后台生成的(https://gyazo.com/115a6c7c9afafd2970b66fd421ca76a3)其工作原理如下:如果