如何通过in_ategory的函数传递所有接收到的ID

时间:2019-07-30 作者:user3622103

有一个函数可以从主类别接收其子类别中的所有内容:

function get_cats(){
  $id       = 1;
  $tax  = \'category\';
  $children = get_term_children( $id, $tax );

  foreach ( $children as $child ) {
    $term = get_term_by( \'id\', $child, $tax );
    echo \'\'. $term->term_id .\',\';
  }
}
我需要在以下条件下传递所有接收到的ID:

if ( in_category( array( get_cats() ) ) ) {
  //
}
传输值,但不显示这些类别中的条目本身,只显示函数中的id如何将其传输到in\\u类别中?

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

不能通过将带逗号的字符串传递到array(), 这不是PHP中数组的工作方式。您的代码等效于:

if ( in_category( array( \'1,2,3,4\' ) ) ) {
}
正在检查ID为的单个类别\'1,2,3,4\', 这是不可能存在的。

对于要执行的操作,函数需要返回一个ID数组,该数组将直接传递到in_category(), 没有array():

function get_cats(){
  $id       = 1;
  $tax      = \'category\';
  $children = get_term_children( $id, $tax );
  $cats     = array(); // Prepare an array to return.

  foreach ( $children as $child ) {
    $term   = get_term_by( \'id\', $child, $tax );
    $cats[] = $term->term_id; // Add ID to the array:
  }

  return $cats; // Return the array.
}
然后:

if ( in_category( get_cats() ) ) {
  //
}
然而,需要指出的是get_cats() 功能极其冗余。您正在使用get_term_children() 获取孩子的ID,但出于某种原因,您正在循环这些ID以获取完整的学期,这样您就可以获取ID。这没有意义,因为您已经有了ID。

所以真的,你不需要get_cats() 根本不起作用。仅使用get_term_children():

$term_ids = get_term_children( 1, \'category\' );

if ( in_category( $term_ids ) ) {

}

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。