如何收集并输出所有已执行快捷码的所有属性?

时间:2021-04-27 作者:Severin

我想收集存储在短代码页面中的短代码的所有属性,然后将它们全部输出。我在插件中执行这些操作。

1.)在init中设置全局变量。php==>$allShortcodeAtts=数组();

2.)将ATT存储在钩子中的全局变量中

function wpdocs_bartag_func( $atts ) {
 $atts = shortcode_atts( array(
    \'foo\' => \'no foo\',
    \'baz\' => \'default baz\'
 ), $atts, \'bartag\' );
 global $allShortcodeAtts;
 $allShortcodeAtts[] = $atts;

 /* do other stuff */
 
 return "foo = {$atts[\'foo\']}";
}

function register_shortcodes() {
   add_shortcode ( \'bartag\', \'wpdocs_bartag_func\' );
}
add_action ( \'init\', \'register_shortcodes\', 10 );
3.)post\\u内容中的存款短代码=>;[bartag foo=“bar1”][bartag foo=“bar2”]

4)输出短代码的所有变量

function after_register_shortcodes(){
 global $allShortcodeAtts;

 var_dump($allShortcodeAtts);
}
add_action ( \'init\', \'after_register_shortcodes\', 999 );
全局变量中未存储任何属性。我不明白为什么?

1 个回复
SO网友:Abhik

只有在post内容(或数据库中保存的任何内容)中添加使用过的shorcodes,才能检索它们。如果在模板文件中硬编码,则无法检索它们(TBH,可以,但这不是这里的问题)。此代码可以帮助您获取帖子内容中使用的短代码。

function wpse387291_get_shortcodes() {
    global $post;
    
    $pattern = get_shortcode_regex();
    
    if (   preg_match_all( \'/\'. $pattern .\'/s\', $post->post_content, $matches ) {
        //$matches will hold the shortcodes if any
        echo \'<pre>\' . print_r( $matches, true ) . \'</pre>\';
    }
}
add_action( \'wp\', \'wpse387291_get_shortcodes\' );
你可以使用后面的任何钩子wp.

相关推荐

SHORTCODE_ATTS()中的$ATTS参数是什么?

这个WordPress developers reference page for shortcode_atts() 国家:$atts(array)(必选)用户在shortcode标记中定义的属性。但我不理解这个定义。例如,在WP Frontend Profile 插件:$atts = shortcode_atts( [ \'role\' => \'\', ], $atts ); 据我所知,shortcode\