提问者:小点点

使用ajax从wordpress数据库获取产品


我正在使用WordPress构建一个定制产品页面(page1.php)。

我在自定义产品页面(page1.php)上使用Ajax调用另一个包含下面代码的页面(page2.php),使用下面的代码从wordpress数据库获取产品。

<?php  
    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => 10,
        'product_cat'    => 'hoodies'
    );

    $loop = new WP_Query( $args );

    while ( $loop->have_posts() ) : $loop->the_post();
        global $product;
        echo '<br /><a>' . woocommerce_get_product_thumbnail().' '.get_the_title().'</a>';
    endwhile;

    wp_reset_query();
?>

当我不通过AJAX调用时(即直接从www.localhost/wordpress/page2.php加载),但当我在第1页通过AJAX调用时,上面的代码实际上运行良好。php,我得到以下错误;

致命错误:未捕获错误:在C:\xampp\htdocs\wordpress fully custom\WP content\themes\storefront\page2中找不到类“WP\u Query”。php:9堆栈跟踪:#0{main}在C:\xampp\htdocs\wordpress fully custom\wp content\themes\storefront\test-page2中抛出。php第9行

请问我该怎么修?

谢谢


共3个答案

匿名用户

在这里,我已经尝试了我的主题,它的工作很好!

希望这对你有用。

AJAX CALL的代码:

jQuery('#productDataSubmit').click(wc_load_all_products);
    function wc_load_all_orders() {
        jQuery("#wc-products").html("");

        jQuery.ajax({
            type: "POST",
            url: ajax_details.ajax_url,
            data: {action: 'get_wc_products'},
            success: function (data) {
                var products = jQuery.parseJSON(data);
                jQuery('#wc-products').html(products.product_html);
            }
        });
        return false;
    }

调用AJAX函数返回产品的操作(将其添加到functions.php中)

    add_action('wp_ajax_get_refund_data', 'get_wc_products');
    add_action('wp_ajax_nopriv_get_refund_data','get_wc_products');

获取产品的函数(将其添加到functions.php中)

     /**
     * AJAX function for products.
     */
    function get_wc_products() {
    $html="";
    $varition_args = array(
            'post_type' => 'product',
            'posts_per_page' => 10,
            'product_cat'    => 'bags'
        );
        $variation_query = new WP_Query($varition_args);
    }


    if ($variation_query->have_posts()) {
            while ($variation_query->have_posts()) {
                 $variation_query->the_post();
                 global $product;
                 $html.= '<tr>';
                 $html.= '<td>'.get_the_ID().'</td>';
                 $html.= '<td>'.get_the_title().'</td>';
                 $html.= '<td>'.$product->get_price_html().'</td>';
                 $html.= '</tr>';
            }
    }

    //Returns records
    $data = [];
    $data['product_html'] = $html;
    }

匿名用户

当您直接查看页面时,可能会以某种方式导入WP_查询类。因为这不是通过AJAX实现的,所以您可能希望在该页面上显式地包含它。我们可以做如下事情:

include_once "path/to/wp-includes/class-wp-query.php";

匿名用户

有关于wordpress ajax可用的教程吨。你最好看看这些屁屁......

Wordpress官方Ajax教程

Sitepoint Ajax教程和一些很好的示例

代码Tuts前端Ajax教程

粉碎杂志Ajax教程

现在让我们在这里为您提供一个快速的ajax示例:

jQuery(document).ready(function(){
   jQuery(".ajax_button_to_click").click(function(event){
    // event.preventDefault(); enable this if you want to stop click 
   behavior
    var ajax_form_input_value = jQuery('#ajax_input_value').val();
    var ajax_text = jQuery('#ajax_text_value').text();
    jQuery.ajax({
       method: "POST", // http request method
       url: ajaxurl, // indicates wp-ajax.php file which will handle the request
       data: {'action':'ajax_function_name', //function name which will handle the ajax request inside your plugin or theme's functions.php file
              'ajax_text_data':ajax_text, //text data to send with the ajax request
              'ajax_form_value: ajax_form_input_value ' }, //form input data to send with the ajax request
       success:function(data) { //on ajax request success run all inside this method
        alert(data); 
    },
    error: function(errorThrown){ //if ajax fails then run this method
        console.log(errorThrown);
      }
    });
  });
});

现在是后端的ajax请求处理部分。

首先添加Js ajaxurl var:

add_action('wp_head', 'prefix_ajaxurl');

 function prefix_ajaxurl() {
   echo '<script type="text/javascript">
        var ajaxurl = "' . admin_url('admin-ajax.php') . '";
     </script>';
 }

第二,添加Ajax操作函数

function ajax_function_name(){ // function name should be same defined in ajax request action var.
     $text = $_POST['ajax_text_data'];
     $input_data = $_POST['ajax_form_value'];
     echo $text;
     echo $input_data;
     die(); //you must write die(); to avoid echoing extra 0;
 } 
 add_action( 'wp_ajax_ajax_function_name', 'ajax_function_name' ); ?>