1
我使用woocommerce 3.0.3,wordpress 4.7.3。如何實現分頁是自定義短代碼?
我已經創建了一個自定義的shortocde,下面的代碼(參考woocommerce的默認[產品]簡碼),但分頁不起作用,第2頁空白。
<?php
add_shortcode('poster_products', 'poster_products');
if (! function_exists('poster_products')){
function poster_products($atts) {
$atts = shortcode_atts(array(
'columns' => '4',
'orderby' => 'title',
'order' => 'asc',
'ids' => '',
'skus' => '',
'posts_per_page' => -1
), $atts, 'products');
$query_args = array(
'post_type' => 'product',
'post_status' => 'publish',
'ignore_sticky_posts' => 1,
'orderby' => $atts['orderby'],
'order' => $atts['order'],
'posts_per_page' => $atts['posts_per_page'],
'paged' => max(1, get_query_var('paged')),
'post__in' => $atts['ids'],
//'meta_query' => WC()->query->get_meta_query(),
//'tax_query' => WC()->query->get_tax_query(),
);
if (! empty($atts['skus'])) {
$query_args['meta_query'][] = array(
'key' => '_sku',
'value' => array_map('trim', explode(',', $atts['skus'])),
'compare' => 'IN',
);
}
if (! empty($atts['ids'])) {
$query_args['post__in'] = array_map('trim', explode(',', $atts['ids']));
}
return poster_product_loop($query_args, $atts, 'products');
}
}
if (! function_exists('poster_product_loop')){
function poster_product_loop($query_args, $atts, $loop_name) {
global $woocommerce_loop;
$columns = absint($atts['columns']);
$woocommerce_loop['columns'] = $columns;
$woocommerce_loop['name'] = $loop_name;
$query_args = apply_filters('woocommerce_shortcode_poster_product_query', $query_args, $atts, $loop_name);
$transient_name = 'wc_loop' . substr(md5(json_encode($query_args) . $loop_name), 28) . WC_Cache_Helper::get_transient_version('product_query');
$products = get_transient($transient_name);
if (false === $products || ! is_a($products, 'WP_Query')) {
$products = new WP_Query($query_args);
set_transient($transient_name, $products, DAY_IN_SECONDS * 30);
}
ob_start();
if ($products->have_posts()) {
?>
<?php do_action("woocommerce_shortcode_before_{$loop_name}_loop", $atts); ?>
<?php woocommerce_product_loop_start(); ?>
<?php while ($products->have_posts()) : $products->the_post(); ?>
<?php wc_get_template_part('content', 'product'); ?>
<?php endwhile; // end of the loop. ?>
<?php woocommerce_product_loop_end(); ?>
<?php do_action("woocommerce_shortcode_after_{$loop_name}_loop", $atts); ?>
<?php
do_action('woocommerce_pagination_after_poster_product_loop', $products);
} else {
do_action("woocommerce_shortcode_{$loop_name}_loop_no_results", $atts);
}
woocommerce_reset_loop();
wp_reset_postdata();
do_action('woocommerce_after_shop_loop');
return '<div class="woocommerce columns-' . $columns . '">' . ob_get_clean() . '</div>';
}
}
add_action('woocommerce_pagination_after_poster_product_loop', 'woocommerce_pagination_after_poster_product_loop');
if (! function_exists('woocommerce_pagination_after_poster_product_loop')) {
function woocommerce_pagination_after_poster_product_loop($products) {
//wc_get_template('loop/pagination.php');
if (! defined('ABSPATH')) {
exit; // Exit if accessed directly
}
global $wp_query;
if ($products->max_num_pages <= 1) {
return;
}
?>
<nav class="woocommerce-pagination">
<?php
echo paginate_links(apply_filters('woocommerce_pagination_args', array(
'base' => esc_url_raw(str_replace(999999999, '%#%', remove_query_arg('add-to-cart', get_pagenum_link(999999999, false)))),
'format' => '?paged=%#%',
'add_args' => false,
'current' => max(1, get_query_var('paged')),
'total' => $products->max_num_pages,
'prev_text' => '←',
'next_text' => '→',
'type' => 'list',
'end_size' => 3,
'mid_size' => 3,
)));
} ?>
</nav>
<?php
}
分頁創建URL結構等/page/2/
頁2源代碼顯示
</nav>
<!DOCTYPE html>
和
if (! function_exists('poster_products')){
echo var_dump(get_query_var('page')); // ""
echo var_dump(get_query_var('paged')); // ""
和
function poster_products($atts) {
return "poster_products getting called";
返回莫不如是poster_products
是沒有得到所謂的2
您可以分享轉到第2頁時創建的網址結構嗎?例如'example.com/paged/2'?你有沒有嘗試回顯'max(1,get_query_var('paged')),'確定它不是null?如果爲空,也許嘗試'$ paged = get_query_var('paged')? get_query_var('paged'):1;' –
也嘗試更改''format'=>'page /%#%/',' –
@AntonisTsimourtos我剛剛編輯過這個問題,請看看它。我認爲第二頁'poster_products'沒有被調用。 –