File: /medikors/www/wp-content/plugins/jupiterx-core/includes/woocommerce/woocommerce-load-more.php
<?php
/**
* This file is responsible for Woocommerce Paginagion/Load More
*
* @package JupiterX_Core\Woocommerce
*
* @since 1.9.0
*/
/**
* Add Load More Button.
*
* @since 1.9.0
*
* @SuppressWarnings(PHPMD.ElseExpression)
*
* @return void
*/
function jupiterx_add_load_more() {
if ( class_exists( 'WC_Query' ) && method_exists( 'WC_Query', 'product_query' ) && function_exists( 'wc_get_loop_prop' ) ) {
$total = wc_get_loop_prop( 'total' );
$per_page = wc_get_loop_prop( 'per_page' );
$paged = wc_get_loop_prop( 'current_page' );
$first = ( $per_page * $paged ) - $per_page + 1;
$last = min( $total, $per_page * $paged );
} else {
global $wp_query;
$paged = max( 1, $wp_query->get( 'paged' ) );
$per_page = $wp_query->get( 'posts_per_page' );
$total = $wp_query->found_posts;
$first = ( $per_page * $paged ) - $per_page + 1;
$last = min( $total, $wp_query->get( 'posts_per_page' ) * $paged );
}
if ( $paged ) {
echo '<div class="jupiterx-wc-loadmore-wrapper"><a class="button btn-info jupiterx-wc-load-more">' . esc_html__( 'Load More', 'jupiterx-core' ) . '</a></div>';
}
}
/**
* Add Load More Button and enqueue required script.
*
* @since 1.9.0
*
* @return void
*/
function jupiterx_wc_load_more() {
global $wp_query;
wp_register_script( 'jupiterx-wc-loadmore', plugins_url( 'wc-load-more.js', __FILE__ ), [ 'jquery' ], JUPITERX_VERSION, true );
wp_localize_script( 'jupiterx-wc-loadmore', 'jupiterx_wc_loadmore_params', [
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'action' => 'jupiterx_loadmore_ajax_handler',
'posts' => wp_json_encode( $wp_query->query_vars ),
'current_page' => get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1,
'security' => wp_create_nonce( 'jupiterx_core_woo_load_more' ),
'max_page' => $wp_query->max_num_pages,
'i18n' => [
'btn_text' => __( 'Load More', 'jupiterx-core' ),
'btn_text_loading' => __( 'Loading', 'jupiterx-core' ),
],
] );
wp_enqueue_script( 'jupiterx-wc-loadmore' );
}
/**
* Add ajax handler for the Load More Button.
*
* @since 1.9.0
*
* @return void
*/
function jupiterx_wc_loadmore_ajax_handler() {
$args = json_decode( stripslashes( $_POST['query'] ), true ); // phpcs:ignore WordPress.Security
$args['paged'] = $_POST['page'] + 1; // phpcs:ignore WordPress.Security
$args['post_status'] = 'publish';
if ( ! check_ajax_referer( 'jupiterx_core_woo_load_more', 'security' ) ) {
wp_send_json_error( [ 'message' => __( 'Nonce can\'t be verified', 'jupiterx-core' ) ] );
wp_die();
}
query_posts( $args ); // phpcs:ignore WordPress.WP.DiscouragedFunctions.query_posts_query_posts
woocommerce_product_loop_start();
while ( have_posts() ) :
the_post();
wc_get_template_part( 'content', 'product' );
endwhile;
woocommerce_product_loop_end();
woocommerce_reset_loop();
die;
}
add_action( 'wp_ajax_jupiterx_loadmore_ajax_handler', 'jupiterx_wc_loadmore_ajax_handler' );
add_action( 'wp_ajax_nopriv_jupiterx_loadmore_ajax_handler', 'jupiterx_wc_loadmore_ajax_handler' );