短代码和javascript包含

时间:2016-12-22 03:12:11

标签: php wordpress shortcode

我遇到的问题是,短代码只是回显而未执行,即我在网页上实际看到的内容:

  

[ajax_filter_posts per_page =“10”]

这是我的function.php文件http://termbin.com/v6v5

//enqueue and localizing the Javascript.

function assets() {
    wp_enqueue_script('ajax_filter_post_mdu', get_template_directory_uri() . '/js/ajax-filter-posts.js', ['jquery'], null, true);
    wp_localize_script( 'ajax_filter_post_mdu', 'bobz', array(
        'nonce'    => wp_create_nonce( 'bobz' ),
        'ajax_url' => admin_url( 'admin-ajax.php' )
    ));
}
add_action('wp_enqueue_scripts', 'assets', 100);

以下是我在个人类别中调用短代码的方法 - template.php http://termbin.com/8r3x

<?php echo do_shortcode('[ajax_filter_posts per_page="10"]'); ?>

根据我的理解,我做错了什么,可能是在排队和本地化,但我不明白哪里是错误。此外,javascript正确加载,因为浏览器不会抱怨找不到文件。

同样在我的模板category.php文件中,我直接调用函数,例如:

<?php   $a = array('post_tag', false, false);
        $pub_tag = vb_filter_posts_sc( $a );
        echo $pub_tag;
?>

它运作正常......

我已经分享了2016 Wordpress内置主题并从这里开始攻击,我在某处发生了冲突吗?

我尽可能多地搜索,但无法将其整理出来。

1 个答案:

答案 0 :(得分:0)

您没有发布定义短代码的代码。

它看起来像add_shortcode('ajax_filter_post', ...)。如果您提供短代码,或者您在某个插件中没有负责,则您没有说明。

您可以看到如下定义的短代码:

global $shortcode_tags;
print_r($shortcode_tags);

那会(应该)给你一个包含所有已定义短代码的数组。如果该列表中未显示ajax_filter_post,则您的短代码未定义。

根据此内容的位置,您可能会遇到过滤器顺序问题。也就是说,无论是什么扩展,这个短代码都可以在wp_enqueue_scripts已经运行之后运行。如果发生这种情况,您的JS代码将永远不会进入浏览器。解决这个问题的方法是将JS放在每个页面上,只有当你的短代码出现时才使用它。例如,短代码可以输出此HTML:

<div class="my-shortcode-target"></div>

jQuery就像这样:

jQuery(() => { (($) => {
    $('.my-shortcode-target').each(() => {
        var $target = $(this);
        $.ajax({'url': bobz.ajax_url, 'data': { 'nonce': bobz.nonce } }).done((data) => {
            // Here's where you can do stuff using what was returned from your AJAX call.
            target.append($('<span>').text(data.answer));
        });
    });
})(jQuery); });

您的短代码似乎是在过滤某些东西,因此您可以将那里的DOM操作替换为决定要显示的内容和不显示内容的内容。