[英]Using a do_shortcode in wordpress via an ajax call
我有以下一段Ajax,它調用了一個php文件,該文件旨在返回簡碼的HTML內容。
Ajax調用看起來像這樣:
var PostData = "Action=refresh-cart";
jQuery.ajax({
dataType: "text",
type: 'POST',
url : '<?php echo plugins_url( 'class-booking-system/class-booking-process.php', dirname(__FILE__) );?>',
cache: false,
data : PostData,
complete : function() { },
success: function(data) {
// jQuery("#loading-img").hide();
alert(data);
// jQuery("#join-class-div-3").html(data);
}
});
PHP看起來像這樣:
<?php
require_once( ABSPATH . '/wp-includes/shortcodes.php' );
if(isset($_POST['Action'])) {
$Action = $_POST['Action'];
if($Action == "refresh-cart") {
echo do_shortcode('[woocommerce_cart]');
}
}
?>
但是,當我調用Ajax方法時,它將返回HTTP 500-我認為這意味着在此上下文中未找到do_shortcode函數。 如何使我的插件能夠通過Ajax調用此wordpress函數?
我認為您應該看看有關在插件中使用Ajax的Codex文章。 它提供了一個很好的示例,說明如何在WordPress中進行Ajax調用。
根據他們的代碼修改他們的示例,我得到如下內容:
首先,我們加載javascript。 我們還通過wp_localize_script
傳遞了一些javascript變量。 在這種情況下,我們將傳遞管理員的URL來處理所有ajax調用。
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
wp_localize_script( 'ajax-script', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
其次 ,在我們的javascript中,我們可以進行ajax調用,並定義ajax“操作”以及數據對象中所需的任何其他數據。 由於“動作”的含義有所不同,因此我將您的動作重命名為“ refresh_cart”。
jQuery(document).ready(function($) {
$.ajax({
type: 'POST',
url : ajax_object.ajax_url,
cache: false,
data : { 'action': 'my_action', 'refresh_cart': 'yes' },
complete : function() { },
success: function(data) {
// $("#loading-img").hide();
alert(data);
// $("#join-class-div-3").html(data);
}
});
});
第三 ,我們需要為我們的ajax操作設置回調。 admin-ajax.php
看起來通過所有的WordPress的預配置的動作,然后還查找添加到任何wp_ajax_$my_action_name
在后端和wp_ajax_nopriv_$my_action_name
的前端。 我假設您的問題與前端有關,並且由於在data
對象中我們將action = my_action
設置action = my_action
因此對應的動作鈎子應該是wp_ajax_nopriv_my_action
...,並附加了my_action_callback
函數。 據我所知,WordPress應該已完全加載,運行簡短代碼不應成為問題。
add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );
function my_action_callback() {
if( isset($_POST['refresh-cart']) && $_POST['refresh-cart'] == 'yes' ) {
echo do_shortcode('[woocommerce_cart]');
}
die();
}
瞧! 我認為應該這樣做,但是我必須警告您,我沒有測試過任何一個,因此請謹慎使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.