如何在PHP中向WordPress自定义短代码传递数组?
在PHP中向WordPress短代码传递数组的解决方案
嘿,我来帮你搞定这个问题!你的短代码目前是通过字符串接收tags参数的,要让它支持数组传递,我们需要先修改短代码函数的参数处理逻辑,然后再用正确的方式在PHP中调用它。
第一步:修改短代码函数(functions.php)
首先,我们要更新Insert_NewsBlogsByTags函数,让它既能兼容编辑器里传入的逗号分隔字符串,又能直接接收PHP里传递的数组:
function Insert_NewsBlogsByTags($attr) { // 调整默认参数,tags默认设为空数组 $a = shortcode_atts(array( 'title' => 'News', 'selector' => '#all', 'number' => 4, 'tags' => array() ), $attr); // 兼容两种传入方式:如果是字符串则转成数组,数组则直接使用 if (is_string($a['tags']) && !empty($a['tags'])) { // 按逗号分割并去除每个标签的空格 $a['tags'] = array_map('trim', explode(',', $a['tags'])); } ob_start(); the_widget( 'Fbstax_Widget_Recent_Posts_By_Categories_Tags', array( 'title' => esc_html__($a['title'], 'fbstax-theme'), 'selector' => esc_html__($a['selector'], 'fbstax-theme'), 'number' => $a['number'], 'tags' => $a['tags'] // 现在这里传递的是数组格式 ) ); // 别忘了返回输出缓冲区的内容 return ob_get_clean(); } // 如果还没注册短代码,添加这行 add_shortcode('news_blogs_by_tags', 'Insert_NewsBlogsByTags');
第二步:在PHP中调用短代码
现在有两种常用的方式在PHP里给这个短代码传递数组:
方式1:直接调用短代码函数(推荐,更高效)
如果你是在PHP模板文件里使用,直接调用函数并传入数组参数是最直接的方式:
// 准备你的参数数组 $shortcode_params = array( 'title' => 'Latest Tech Updates', 'number' => 5, 'tags' => array('technology', 'smartphones', 'ai') // 直接传递数组 ); // 调用函数并输出结果 echo Insert_NewsBlogsByTags($shortcode_params);
方式2:使用do_shortcode函数(适合需要短代码字符串的场景)
如果你的场景需要用短代码字符串格式,就把数组转成逗号分隔的字符串再传入:
// 把数组标签转成逗号分隔的字符串 $tags_list = implode(',', array('technology', 'smartphones', 'ai')); // 构造短代码字符串 $shortcode_str = "[news_blogs_by_tags title='Latest Tech Updates' number='5' tags='$tags_list']"; // 执行短代码并输出 echo do_shortcode($shortcode_str);
注意事项
- 确保
Fbstax_Widget_Recent_Posts_By_Categories_Tags这个小工具能够接收数组格式的tags参数,如果它原本只支持字符串,可能还需要调整小工具的代码逻辑来处理数组。 - 处理字符串转数组时用
array_map('trim', ...)是为了避免用户输入的标签前后有空格导致识别错误。
内容的提问来源于stack exchange,提问作者zakharov.arthur
相关产品推荐
相关产品推荐

