WordPress插件PHP开发:从wp-options存储列表中随机选取单个值问题
问题根源
从get_option()获取到的$mc6397gh_PerList为字符串类型,你直接用array($mc6397gh_PerList)包裹后,只会生成仅含1个元素的数组,该元素就是完整的词汇列表字符串,因此随机取值永远返回整段内容,和你硬编码的多元素一维数组结构完全不符。
解决方法
分两种常用使用场景选择对应方案:
场景1:后台存储的是逗号分隔的词汇字符串(比如用户输入格式为One,Two,Three,Four)
通过explode将字符串拆分为数组,同时做输入兼容处理,修正后完整代码如下:
function mc6397gh_replace( $mc6397gh_wp_admin_bar ) { $mc6397gh_my_account = $mc6397gh_wp_admin_bar->get_node('my-account'); // 读取配置项,第二个参数为默认值,避免配置未初始化时报错 $mc6397gh_PerList = get_option('mc6397gh_MyList', 'One,Two,Three,Four'); // 按逗号拆分字符串为数组,同时去除每个词汇前后的多余空格 $mc6397gh_Rand = array_map('trim', explode(',', $mc6397gh_PerList)); // 过滤空元素,避免多输入逗号导致的无效空值 $mc6397gh_Rand = array_filter($mc6397gh_Rand); $mc6397gh_RandIndex = array_rand($mc6397gh_Rand); $mc6397gh_PerRand = $mc6397gh_Rand[$mc6397gh_RandIndex]; $mc6397gh_newtitle = str_replace( 'Howdy,', $mc6397gh_PerRand, $mc6397gh_my_account->title ); $mc6397gh_wp_admin_bar->add_node( array( 'id' => 'my-account', 'title' => $mc6397gh_newtitle, ) ); }
场景2:存储配置时直接写入数组
WordPress的update_option会自动对数组做序列化存储,get_option读取时会自动反序列化为数组,此时只需去掉多余的array()包裹即可:
// 把原代码中的 $mc6397gh_Rand = array($mc6397gh_PerList); 替换为下方代码 $mc6397gh_Rand = $mc6397gh_PerList;
补充说明
如果是面向普通用户的后台配置,推荐使用第一种逗号分隔的方案,用户输入门槛更低,无需了解数组语法。
内容的提问来源于stack exchange,提问作者Mike Hickcox
相关产品推荐
相关产品推荐

