【问题标题】:Shortcodes and javascript inclusion简码和 javascript 包含
【发布时间】:2017-05-07 14:41:36
【问题描述】:

我遇到了一个问题,即短代码只回显而不执行,即这是我在网页上实际看到的:

[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);

这是我在个人 category-template.php http://termbin.com/8r3x987654322@ 中调用简码的方式

<?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;
?>

它确实工作正常……

我已经 fork 2016 Wordpress 内置主题并从这里 hack,我在某处有冲突吗?

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

【问题讨论】:

  • 我可以看到您使用短代码的代码吗,可能在您的模板文件中?
  • 您能否在问题中发布代码的基本部分
  • 我已经使用类别模板文件的正确链接编辑了我的帖子。
  • @Panda 问题是我不确定是我的代码有问题还是与代码的其他部分存在潜在冲突,这就是我参与发布所有内容的原因。但这是我可以给 Enqueue 和本地化 pastebin.com/xRD0Janv
  • @MatthieuDucorps 是的,最好直接在问题中发布

标签: php wordpress shortcode


【解决方案1】:

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

它看起来像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 操作替换为决定显示什么和不显示什么的东西。

【讨论】:

  • 完美答案!现在我知道它没有“add_shortcode”!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 2016-01-14
  • 2018-12-12
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
相关资源
最近更新 更多