如果我使用以下硬代码,请从自定义子菜单页:
$post_id = 111;
$flightCategory = array( 25 );
wp_set_object_terms( $post_id, $flightCategory, \'flight_categories\' );
并刷新页面,它只需将所需的自定义分类术语分配给CPT。但是如果我继续下面的代码,我将从
<form>
, 它不像以前那样工作。
if( $flightID !== NULL && $flightCat !== \'-1\' && !empty( $flightCat ) ) {
$flightCount = count( $flightID );
foreach ( $flightID as $post_id ) {
$flightCategory = array( $flightCat ); //inactive = 25, active = 26
wp_set_object_terms( $post_id, $flightCategory, \'flight_categories\' );
}
$success = sprintf( __(\'<strong>SUCCESS:</strong> %d Flight information has been affected\', \'textdomain\'), $flightCount);
} else {
$error = __(\'<strong>ERROR:</strong> You can\\\'t pass any empty field\', \'textdomain\');
}
这个代码块的作用是,它简单地添加了名为“25”的新术语和slug“25”。我尝试不传递如下数组:
$flightCategory = $flightCat;
但结果是一样的。我做错了什么?
最合适的回答,由SO网友:Mayeenul Islam 整理而成
在这两种情况下,问题不在于其他方面,而在于发送给第二个参数的主要值$flightCategory
:
$flightCategory = array( 25 );
var_dump( $flightCategory );
wp_set_object_terms( $post_id, $flightCategory, \'flight_categories\' );
但在后来的版本中,不知怎么的,或者说你实际上是在传递下面这样的信息:
$flightCategory = array( \'25\' );
var_dump( $flightCategory );
wp_set_object_terms( $post_id, $flightCategory, \'flight_categories\' );
你注意到了吗
25
? 这实际上是问题的根源。因为在第一次代码转储时,您将看到:
array(1) { [0]=> int(25) }
第二个是:
array(1) { [0]=> string(2) "25" }
实际上,您传递的是一个字符串,函数理解这一点,
好的,我得到了Term name, 就这样吧。但对于一个整数,您实际上是在说,嘿,函数,现在得到了术语ID,只添加/更新ID。解决方案要解决问题,您必须做一件简单的事情:
$flightCategory = (int)$flightCat; //make it integer whatever you get
或者,$flightCategory = array( (int)$flightCat ); //make the array value integer whatever you get
了解更多有关PHP Type casting.