Loading shortcode with ajax

时间:2013-08-03 作者:Don\'t Wake Me Up

如果浏览器的屏幕大小特定,我会尝试加载幻灯片,也就是说,我不希望幻灯片加载到更小的移动屏幕上。幻灯片放映插件提供了一个短代码:

<?php echo do_shortcode(\'[metaslider id="8302"]\'); ?>
但当我试着加载它时。load(),它只是输出字符串,不运行php。

因此,环顾四周,似乎有几个帖子与此相关:

call shortcode in javascriptWhy might a plugin's 'do_shortcode' not work in an AJAX request?

但不幸的是,我没有足够高的声誉来发表评论,所以我提出了一个新问题。

我想知道是否有人可以帮助以非常简单的方式向不熟悉PHP的人解释这一点?

1 个回复
SO网友:s_ha_dum

不能像这样直接加载文件:

$(\'.homepage__slider\').load(\'wp-content/themes/mytheme/slider.php\');
还要注意,WordPress在中加载jQuerynoConflict mode, 所以$ 别名不工作。

如果您直接加载文件,WordPress的任何功能都无法工作。您应该使用AJAX API 这样所有内容都可以加载到WordPress上下文中。

您可以将处理PHP包装为一个函数:

function my_ajax_shortcode_wpse_108874() {
    echo do_shortcode(\'[metaslider id="8302"]\');
    die;
}
将其挂接到AJAX系统中:

add_action(\'wp_ajax_my_ajax_shortcode\', \'my_ajax_shortcode_wpse_108874()\');
add_action(\'wp_ajax_nopriv_my_ajax_shortcode\', \'my_ajax_shortcode_wpse_108874()\');
将您的请求提交到http://site/wp-admin/admin-ajax.php 并通过my_ajax_shortcode 作为Javascript发出请求时的参数。

var data = {
    action: \'my_ajax_shortcode\'
};
jQuery.post(ajax_url, data, function(response) {
    // whatever you need to do; maybe nothing
});
您可以设置ajax_url similarly to this from the Codex:

add_action( \'admin_enqueue_scripts\', \'my_enqueue\' );
function my_enqueue($hook) {
    if( \'index.php\' != $hook ) return;  // Only applies to dashboard panel

    wp_enqueue_script( \'ajax-script\', plugins_url( \'/js/my_query.js\', __FILE__ ), array(\'jquery\'));

    // in javascript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
    wp_localize_script( \'ajax-script\', \'ajax_object\',
            array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ), \'we_value\' => 1234 ) );
}

结束