我正在使用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行
请问我该怎么修?
谢谢
在这里,我已经尝试了我的主题,它的工作很好!
希望这对你有用。
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' ); ?>