从帖子中删除当前类别,但显示所有其他类别

时间:2019-05-09 作者:jeannot

我想在我的WordPress帖子中排除当前的类别,我有点受不了了,你能帮我吗?

这里有一些内容可以从这个分类ID中获取所有类别(我的类别名为“Villes”)。

$args = array( \'parent\' => 779 );
$categories = get_categories( $args );
这里有一些循环并显示我的超级结果

foreach ( $categories as $category ) {
    $value[] = array(
        \'field_5cd186302ef1c\' => $category->name,
    );
};
return $value;    
正如您所看到的,我只是将它们插入到一个数组中。但我的问题是,我想从中排除当前类别。例如,假设我的主类别中有3个子类别。

Villes(类别)

我只想显示此列表,但删除其中一个或多个(例如巴黎),因为它属于我当前的帖子。

总之,如何从列表中删除当前子类别?

因此,对于使用WP All Import Pro创建并分配给帖子的类别,我创建了另一个foreach循环,将创建的每个帖子分配给一个特殊类别。事实上,我已经用ACF为我的帖子创建了一个表单,在其中我创建了两个名为“分类法”的重复器。我有第一个中继器,它从一个名为“villes”的主要类别中检索当前的所有子类别。该代码可能更清晰:

$categories = get_the_terms( $post_id, \'category\' );
通过上面的代码,我获取了实际帖子的所有当前类别

foreach ($categories as $category ) {
    if ( $category->parent == 779 ) {    
        $value[] = array(
            \'field_5cc6f8b858135\' => $category->name,
        );
    };
}
return $value;
因此,使用foreach循环创建由$categories检索的所有术语,然后如果这些类别的“parent”等于我想要的parent\\u id(在我的示例中,这个id等于779),则将所有这些术语写入当前的repeater字段(这里的字段称为:field\\u 5cc6f8b858135)

第一个很好用,没问题,它为我检索到了好的子类别。

但是我想要第二个中继器,它包含属于“villes”(Id:779)的所有子类别(当前的除外)。这就是为什么我想创建一个循环,当前显示“villes”(ID:779)中的所有子类别,但受实际帖子影响的子类别除外。

所以,正如我所说,我试过:

$args = array( \'parent\' => 779 );
$categories = get_categories( $args );
为了定义我想要的子类别,这里是“villes”的所有孩子(ID:779)。然后,我尝试了foreach循环,将它们插入我的领域。

foreach ( $categories as $category ) {
    $value[] = array(
        \'field_5cd186302ef1c\' => $category->name,
    );
};
return $value;    
但我还有一个问题,我如何完成(或重写)这段代码,以排除所有属于实际帖子的子类别?我的目标仍然是显示“villes”中的所有子类别,但不是当前的子类别。

1 个回复
最合适的回答,由SO网友:Warwick 整理而成

首先,您需要获取当前帖子的类别,然后您可以通过get_categories 参数数组为$args[\'exclude\'].

get_categories() 使用get_terms(), 您可以查看可以使用的可用参数列表here.

我们可以通过wp_get_post_terms() 并确保通过传递它只获得ID数组,而不是对象数组array("fields" => "ids") );

$args = array( \'parent\' => 779 );

//Get the current post categories
$post_categories = wp_get_post_terms( get_the_ID(), \'category\', array("fields" => "ids") );
if ( ! empty( $post_categories ) ) {
  //Here we make use of the exclude argument
  $args[\'exclude\'] = $post_categories;
}

$categories = get_categories( $args );
然后,您可以像前面一样,使用第二个代码片段循环浏览类别。

foreach ( $categories as $category ) {
    $value[] = array(
        \'field_5cd186302ef1c\' => $category->name,
    );
};
return $value; 

相关推荐

返回LOAD_POSTS_BY_AJAX中的条件类别

我创建了一个返回最后三篇文章的短代码,并设置了一个属性,允许我根据所处的页面选择类别。function return_actu_home($atts) { ob_start(); extract( shortcode_atts( array( \'category\' => \'\' ), $atts ) ); $args = array( \'post_type\' =>