Mat*_*rps 5 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);
Run Code Online (Sandbox Code Playgroud)
以下是我在个人类别template.php http://termbin.com/8r3x中调用短代码的方法
<?php echo do_shortcode('?ajax_filter_posts per_page="10"?'); ?>
Run Code Online (Sandbox Code Playgroud)
根据我的理解,我做错了什么,也许是在排队和本地化,但我不明白哪里是错误.此外,javascript正确加载,因为浏览器不会抱怨找不到该文件.
另外在我的模板category.php文件中,我直接调用函数,例如:
<?php $a = array('post_tag', false, false);
$pub_tag = vb_filter_posts_sc( $a );
echo $pub_tag;
?>
Run Code Online (Sandbox Code Playgroud)
它确实工作正常......
我已经分享了2016 Wordpress内置主题和黑客攻击,我在某处发生了冲突吗?
我尽可能多地搜索,但无法将其整理出来.
您没有在定义短代码的地方发布代码。
它看起来像这样add_shortcode('ajax_filter_post', ...)。您没有说明您是否提供了短代码,或者它是否位于您不负责的某些插件中。
您可以看到短代码的定义如下:
global $shortcode_tags;
print_r($shortcode_tags);
Run Code Online (Sandbox Code Playgroud)
这将(应该)为您提供一个包含所有定义的短代码的数组。如果ajax_filter_post未出现在该列表中,则说明您的短代码未定义。
根据此内容所在的位置,您可能会遇到过滤器顺序问题。也就是说,任何扩展此短代码的内容都可以在wp_enqueue_scripts已经运行之后运行。如果发生这种情况,您的 JS 代码将永远不会到达浏览器。解决方法是在每个页面上将 JS 排入队列,并且仅在出现带有短代码的内容时才使用它。例如,短代码可以输出以下 HTML:
<div class="my-shortcode-target"></div>
Run Code Online (Sandbox Code Playgroud)
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); });
Run Code Online (Sandbox Code Playgroud)
您的短代码似乎正在过滤某些内容,因此您可以将其中的 DOM 操作替换为决定显示什么和不显示什么的内容。
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |