javascript - 通过 ajax 调用在 wordpress 中使用 do_shortcode

标签 javascript php ajax wordpress woocommerce

我有以下一段 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 in Plugins 的 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“操作”和我们需要的任何其他数据。因为“action”有不同的含义,我已将您的操作重命名为“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_namewp_ajax_nopriv_ 的任何内容$my_action_name 在前端。我假设您的问题与前端有关,因为在 data 对象中我们设置了 action = my_action,相应的操作 Hook 将是 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();
}

瞧!我认为应该这样做,但我必须警告你,我没有测试任何这些,所以谨慎使用。

关于javascript - 通过 ajax 调用在 wordpress 中使用 do_shortcode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27001518/

相关文章:

php - 选择所有包含非 UTF8 字符的行

PHP:调用通过引用传递尚 undefined variable 的函数是否有效?

javascript - 重复在 2D Canvas 上绘制图案的方法

javascript - $ 引用未定义

javascript - jQuery 元素显示并在按钮单击时向下滑动

javascript - request.send() 之后重定向 - 请求未发布,页面重定向

javascript - 提交表单而不点击更新或提交按钮

javascript - 最好的开源 JavaScript 树?

php - Android转PHP加密代码

javascript - 使用 extjs 从 ajax 调用加载组合值