我目前正在使用Woocommerce存档产品。php模板文件(比如商店页面或产品类别页面)。单击文章(或产品)后,将向同一页面的标题添加GET查询,将页面更改为滑块而不是文章列表。我需要使用AJAX更改页面的内容,而不是刷新和添加GET查询。我尝试包含模板部分,但它一直说找不到帖子。
我一直在读,我可能需要加载wp-load。php或其他方法。最有效的方法是什么?我想学习如何获取\\u template\\u part()以返回特定URL上的内容。(稍后我需要使用类似的方法检索single-product.php)。
下面是我的AJAX服务器端脚本:
// AJAX function to show slider on product archive
function cienna_show_slider_callback() {
define(\'WP_USE_THEMES\', false);
require_once($_SERVER[\'DOCUMENT_ROOT\'].\'/wp/wp-load.php\');
get_template_part( \'woocommerce/archive\', \'product\' );
wp_die();
}
add_action( \'wp_ajax_cienna_show_slider\', \'cienna_show_slider_callback\' );
add_action( \'wp_ajax_nopriv_cienna_show_slider\', \'cienna_show_slider_callback\' );
这是我的AJAX客户端脚本(我不包括额外的GET变量,以免混淆任何人;我只希望模板页面能够像访问其页面一样自然地工作):
// JavaScript to be fired on the product archive page
$(\'ul.products li.product a\').on(\'click\', function(event) { // AJAX get content of page
event.preventDefault();
$.get( ajax_object.ajax_url, { action: "cienna_show_slider" }, function( data ) {
console.log(data);
})
});
万一有人问起,以下是存档产品模板:
<?php get_template_part(\'templates/page\', \'header\');
/**
* woocommerce_before_main_content hook
*
* @hooked woocommerce_output_content_wrapper - 10 (outputs opening divs for the content)
* @hooked woocommerce_breadcrumb - 20
*/
do_action(\'woocommerce_before_main_content\');
do_action( \'woocommerce_archive_description\' );
if ( have_posts() ) {
/**
* woocommerce_before_shop_loop hook
*
* @hooked woocommerce_result_count - 20
* @hooked woocommerce_catalog_ordering - 30
*/
do_action( \'woocommerce_before_shop_loop\' );
woocommerce_product_loop_start();
woocommerce_product_subcategories();
while ( have_posts() ) {
the_post();
get_template_part( \'woocommerce/content\', \'product\' );
}
woocommerce_product_loop_end();
/**
* woocommerce_after_shop_loop hook
*
* @hooked woocommerce_pagination - 10
*/
do_action( \'woocommerce_after_shop_loop\' );
} elseif ( ! woocommerce_product_subcategories( array( \'before\' => woocommerce_product_loop_start( false ), \'after\' => woocommerce_product_loop_end( false ) ) ) ) {
wc_get_template( \'loop/no-products-found.php\' );
}
/**
* woocommerce_after_main_content hook
*
* @hooked woocommerce_output_content_wrapper_end - 10 (outputs closing divs for the content)
*/
do_action(\'woocommerce_after_main_content\');
?>
UPDATE: 所以,自从我从$更新了AJAX调用以来。ajax到美元。获取并包含wp-load,它运行良好,只是它仍然不断地说找不到帖子。