wordpress Ajax函数中的woocommerce_after_shop_loop

tvokkenx  于 2024-01-06  发布在  WordPress
关注(0)|答案(1)|浏览(226)

我已经为WordPress商店创建了自己的过滤器。当产品被过滤时,找到的产品会用Ajax和一个新的WP_Query显示。过滤器在URL中显示为参数,并通过POST传递。
到目前为止,一切正常,但是“do_action('woocommerce_after_shop_loop');”不工作,并且没有分页输出。

我的具体问题:如何在Ajax调用中输出分页?

当使用过滤器时调用此函数:

function load_trailers(){
  var newParams = window.location.search;
  if (currentParams !== newParams){
    currentParams = newParams;
    jQuery('.products-wrapper').addClass('loading');
    jQuery.ajax({
      url: wpAjax.ajax_url,
      data: {
        action: 'trailer', parameter: newParams, query: wpAjax.query,
      },
      type: 'post',
    }).done(function(data){
      jQuery('.woocommerce-archive-wrapper').empty();
      jQuery('.woocommerce-archive-wrapper').append(data);
      jQuery('.products-wrapper').removeClass('loading');
    });
  }
}

字符串
此函数加载WP_Query并传输产品:

add_action( 'wp_ajax_trailer', 'trailersuche' );
add_action( 'wp_ajax_nopriv_trailer', 'trailersuche' );
function trailersuche(){
  
  $meta_query = $_POST['query'];

  $parameters = $_POST['parameter'];
  $parameters = str_replace('?', '', explode('&', $parameters));

  // Write meta_query ...... $meta_query['meta_query'][]

  echo '<div class="woocommerce-notices-wrapper"></div>';
  
  $loop = new WP_Query($meta_query);

  echo '<p class="woocommerce-result-count">' . $loop->found_posts . ' Produkte</p>';

  do_action('woocommerce_before_shop_loop');
  woocommerce_product_loop_start(); 
  while ($loop->have_posts()) {
    $loop->the_post();
    wc_get_template_part( 'content', 'product' );
  }
  woocommerce_product_loop_end();
  do_action( 'woocommerce_after_shop_loop' );

  die();
}

nr7wwzry

nr7wwzry1#

要在Ajax调用中启用分页,需要对代码进行一些修改。主要思想是从URL参数中捕获当前页面并将其传递给WP_Query。此外,您需要在Ajax响应中返回分页HTML。

让我们相应地修改你的load_trailers函数和trailersuche函数:
load_trailers函数:

function load_trailers() {
  var newParams = window.location.search;
  if (currentParams !== newParams) {
    currentParams = newParams;
    jQuery('.products-wrapper').addClass('loading');
    jQuery.ajax({
      url: wpAjax.ajax_url,
      data: {
        action: 'trailer',
        parameter: newParams,
        query: wpAjax.query,
        page: getCurrentPageNumber(), // Add the current page number to the Ajax request
      },
      type: 'post',
    }).done(function (data) {
      jQuery('.woocommerce-archive-wrapper').empty();
      jQuery('.woocommerce-archive-wrapper').append(data.content); // Use 'content' key from the Ajax response
      jQuery('.products-wrapper').removeClass('loading');
      jQuery('.pagination').html(data.pagination); // Add this line to update the pagination
    });
  }
}

// Helper function to get the current page number from the URL
function getCurrentPageNumber() {
  var urlParams = new URLSearchParams(window.location.search);
  return urlParams.get('page') || '1';
}

字符串

trailersuche功能:

add_action('wp_ajax_trailer', 'trailersuche');
add_action('wp_ajax_nopriv_trailer', 'trailersuche');
function trailersuche()
{
  $meta_query = $_POST['query'];
  $parameters = $_POST['parameter'];
  $parameters = str_replace('?', '', explode('&', $parameters));

  // Extract page number from the Ajax request
  $paged = isset($_POST['page']) ? $_POST['page'] : 1;

  // Add 'paged' parameter to the WP_Query
  $meta_query['paged'] = $paged;

  echo '<div class="woocommerce-notices-wrapper"></div>';

  $loop = new WP_Query($meta_query);

  ob_start();

  echo '<p class="woocommerce-result-count">' . $loop->found_posts . ' Produkte</p>';
  do_action('woocommerce_before_shop_loop');
  woocommerce_product_loop_start();
  while ($loop->have_posts()) {
    $loop->the_post();
    wc_get_template_part('content', 'product');
  }
  woocommerce_product_loop_end();
  do_action('woocommerce_after_shop_loop');

  $content = ob_get_clean();

  // Return the content and pagination HTML
  $response = array(
    'content' => $content,
    'pagination' => get_the_posts_pagination(array('query' => $loop)),
  );

  wp_send_json($response);
}


这些更改应该会在加载了Ajax的产品中启用分页。确保您有一个分页容器,其中包含您希望分页链接显示的'pagination'类。

相关问题