我知道以前有人问过这个问题。但我被困住了,找不到出路。
我正在使用Ajax将外部信息加载到我的站点。最初,所有信息都是一次加载的,但由于数据量很大,Ajax成为了一种必要。
使用第三方开发的插件从外部CMS访问信息。
在Ajax中,我必须使用插件的do_shortcode
. 但它失败了。未返回任何结果。当它直接放在页面模板的代码中时,它会完美地工作。
我使用了我发现的最佳实践来创建Ajax通信(即使用wp_ajax
和wp_ajax_nopriv
用于JS脚本的回调、注册、排队和本地化)。
我测试了Ajax连接,可以来回发送消息。但是如上所述,短代码是一件总是失败的事情。
我还没有联系到插件开发人员。所以我想问,在尝试将短代码与wp\\U ajax结合使用时,是否还有其他需要注意的事情。
提前谢谢。
编辑:我正在添加代码,以便它可以帮助:
在函数中。php
// AJAX HOOKS TO LOAD PRODUCTS\' INFO
add_action(\'wp_ajax_get_product_info\', \'get_product_info\' );
add_action(\'wp_ajax_nopriv_get_product_info\', \'get_product_info\' );
// SHOULD RUN SHORTCODE TO GET PRODUCT INFORMATION AND SEND IT BACK TO JS SCRIPT
function get_product_info() {
//Checks the nonce and kills the script if wrong
$nonce = $_POST[\'nonce\'];
if ( ! wp_verify_nonce( $nonce, \'return_posts\' ) )
die ( \'Wrong nonce!\');
//Process Info
$pid = $_POST[\'product_id\'];
header(\'Content-type: text/html\');
// Returns the shortcode
echo do_shortcode("[ps_product_list id_product=".$pid." tpl=product-grid-exclusives.tpl]");
// We don\'t want anything else to run
exit;
}
// REGISTERS, LOADS & LOCALIZES product-store-ajax.js
if (!function_exists(\'load_scripts\')) {
function load_scripts() {
if ( !is_admin() && is_category(\'teaser-online-exclusives\') ) {
wp_register_script( \'product-ajax\', get_stylesheet_directory_uri().\'/js/product-store-ajax.js\', array( \'jquery\' ), \'\', true );
wp_enqueue_script(\'product-ajax\');
wp_localize_script(
\'product-ajax\',
\'productajaxvars\',
array(
\'ajax_url\' => admin_url( \'admin-ajax.php\' ),
\'nonce\' => wp_create_nonce( \'return_posts\' ),
\'callback\' => \'get_product_info\'
)
);
}
}
}
add_action(\'wp_enqueue_scripts\', \'load_scripts\');
和JS文件:
(function( $ ) {
$(function() {
$.ajax({
url: productajaxvars.ajax_url,
data: {
action: productajaxvars.callback, // callback defined in functions.php
nonce : productajaxvars.nonce,
product_id: 82},
success: function( response ) {
alert(response);
},
type: "POST",
});
});
})( jQuery );