我在使用in\\u array()时遇到了一个错误。
在下面的代码中,我将$active\\u modules作为metabox的返回。从选项页获取值的io函数。此返回值是一个数组,但in\\u array()一直抱怨它不是。
警告:in\\u array()要求参数2为数组,bool给定
我已经在同一个文件中,在这个函数的正下方添加了第二个函数,它使用相同的数组值,将此函数转储到管理通知中进行测试。我不明白为什么第一个代码不能正常工作?任何指向正确方向的指针都将不胜感激!
<?php
if ( ! defined( \'WPINC\' ) ) {
die;
}
// Array of modules in plugin to be used for autoloader and settings page.
$all_modules = array(
array(
\'id\' => \'products\',
\'title\' => \'Products\',
\'path\' => \'kdc-products/kdc-products.php\',
),
array(
\'id\' => \'services\',
\'title\' => \'Services\',
\'path\' => \'kdc-services/kdc-services.php\',
),
array(
\'id\' => \'locations\',
\'title\' => \'Locations\',
\'path\' => \'kdc-locations/kdc-locations.php\',
),
);
// This gives an error: Warning: in_array() expects parameter 2 to be array, bool given...
$active_modules = rwmb_meta( \'modules\', array( \'object_type\' => \'setting\' ), \'kdc-site-functions\' );
foreach ( $all_modules as $module ) {
if ( in_array( \'products\', $active_modules, true ) ) {
require plugin_dir_path( __FILE__ ) . $module[\'path\'];
}
}
/**
* This function works fine with the same array values as above.
*
* @return void
*/
function sample_admin_notice__success() {
$all_modules = array(
array(
\'id\' => \'products\',
\'title\' => \'Products\',
\'path\' => \'kdc-products/kdc-products.php\',
),
array(
\'id\' => \'services\',
\'title\' => \'Services\',
\'path\' => \'kdc-services/kdc-services.php\',
),
array(
\'id\' => \'locations\',
\'title\' => \'Locations\',
\'path\' => \'kdc-locations/kdc-locations.php\',
),
);
$active_modules = rwmb_meta( \'modules\', array( \'object_type\' => \'setting\' ), \'kdc-site-functions\' );
foreach ( $all_modules as $module ) {
if ( in_array( \'products\', $active_modules, true ) ) {
$my_array[] = $module[\'id\'];
}
}
?>
<div class="notice">
<p>
<?php
print_r( $my_array );
?>
</p>
</div>
<?php
}
add_action( \'admin_notices\', \'sample_admin_notice__success\' );
最合适的回答,由SO网友:Mike Baxter 整理而成
欢迎使用WPSE。我想我看到了你的问题,但无法获得rwmb_meta( \'modules\', array( \'object_type\' => \'setting\' ), \'kdc-site-functions\' )
, 我不能肯定。
您的问题似乎是在$all\\u模块之间循环,但使用in_array()
检查$active\\u模块。根据您的循环,以下是我希望阅读的内容:
// Because you are looping through $all_modules for $module, I assume you should use it...
foreach ( $all_modules as $module ) {
// If I examine $module, this should not throw and error
if ( in_array( \'products\', $module, true ) ) {
require plugin_dir_path( __FILE__ ) . $module[\'path\'];
}
}
查看您当前的代码,我假设您从
rwmb_meta()
, 然后把它放进你的
in_array()
函数导致错误。
否则,我建议你至少检查一下rwmb_meta()
函数,以确保它是一个数组:
if (is_array($active_modules) && !empty($active_modules)){
// other code here...
}
希望这能解决它!祝你好运