我想在我的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”中的所有子类别,但不是当前的子类别。
最合适的回答,由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;