wordpress自己的插件has_shortcode不起作用

时间:2015-09-14 12:40:42

标签: wordpress

我正在使用WP 4.3并且我创建了一个插件,该插件仅在我有短代码[my_sc]的单个页面中使用。

我试过这样想:

add_action('init', 'my_enqu_script');
function my_enqu_script(){
    global $post;
    $content = $post->post_content;

    if(has_shortcode($content, 'my_sc')){
        wp_register_script(......);
        wp_localize_script(......);
        wp_enqueue_script('jQuery');
        wp_enqueue_script('my_script');
    }

    function my_func(){
        //do something
    }
    add_shortcode('my_sc', 'my_func');
}

不幸的是,(has_shortcode)不起作用。任何的想法?

2 个答案:

答案 0 :(得分:1)

您不应该在add_shortcode()函数中包装my_enqu_script()位。而是添加短代码,然后将另一个函数挂钩到适当的钩子中:

function my_func(){
    //do something
}
add_shortcode('my_sc', 'my_func');

function my_enqu_script(){
    global $post;
    $content = $post->post_content;

    if ( has_shortcode($content, 'my_sc') ) {
        wp_register_script(......);
        wp_localize_script(......);
        wp_enqueue_script('jQuery');
        wp_enqueue_script('my_script');
    }
}
add_action('wp_enqueue_scripts', 'my_enqu_script');

您还应该考虑使用wp_enqueue_scripts操作挂钩,而不是init,因为init对于global $post;来说还为时过早。

答案 1 :(得分:0)

您只需要创建函数并调用函数add_shortcode()

e.g。

Tree

您还使用function my_function(){ echo 'Test'; } add_shortcode('my_sc', 'my_function'); 代替:,这可能导致失败。

您应该将其添加到;文件或创建单独的文件(最佳做法)和functions.php