I have resolved the bug $vendor_total_args['query_id']
replaced with $vendor_paged_args['query_id']
if ($show_products == 'yes' ) $vendor_paged_args['query_id'] = 'vendors_with_products';
/**
* list of vendors
*
* @param $atts shortcode attributs
*/
public function wcv_vendorslist( $atts ) {
$html = '';
extract( shortcode_atts( array(
'orderby' => 'registered',
'order' => 'ASC',
'per_page' => '12',
'columns' => '4',
'show_products' => 'yes'
), $atts ) );
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$offset = ( $paged - 1 ) * $per_page;
error_log(print_r($atts, true));
// Hook into the user query to modify the query to return users that have at least one product
if ($show_products == 'yes') add_action( 'pre_user_query', array( $this, 'vendors_with_products') );
// Get all vendors
$vendor_total_args = array (
'role' => 'vendor',
'meta_key' => 'pv_shop_slug',
'meta_value' => '',
'meta_compare' => '>',
'orderby' => $orderby,
'order' => $order,
);
if ($show_products == 'yes') $vendor_total_args['query_id'] = 'vendors_with_products';
$vendor_query = New WP_User_Query( $vendor_total_args );
$all_vendors =$vendor_query->get_results();
// Get the paged vendors
$vendor_paged_args = array (
'role' => 'vendor',
'meta_key' => 'pv_shop_slug',
'meta_value' => '',
'meta_compare' => '>',
'orderby' => $orderby,
'order' => $order,
'offset' => $offset,
'number' => $per_page,
);
if ($show_products == 'yes' ) $vendor_paged_args['query_id'] = 'vendors_with_products';
$vendor_paged_query = New WP_User_Query( $vendor_paged_args );
$paged_vendors = $vendor_paged_query->get_results();
// Pagination calcs
$total_vendors = count($all_vendors);
$total_vendors_paged = count($paged_vendors);
$total_pages = intval($total_vendors / $per_page) +1;
ob_start();
// Loop through all vendors and output a simple link to their vendor pages
foreach ($paged_vendors as $vendor) {
wc_get_template( 'vendor-list.php', array(
'shop_link' => WCV_Vendors::get_vendor_shop_page($vendor->ID),
'shop_name' => $vendor->pv_shop_name,
'vendor_id' => $vendor->ID,
'shop_description' => $vendor->pv_shop_description,
), 'wc-vendors/front/', wcv_plugin_dir . 'templates/front/' );
} // End foreach
$html .= '<ul class="wcv_vendorslist">' . ob_get_clean() . '';
if ($total_vendors > $total_vendors_paged) {
$html .= '<div class="wcv_pagination">';
$current_page = max( 1, get_query_var('paged') );
$html .= paginate_links( array(
'base' => get_pagenum_link(1) . '%_%',
'format' => 'page/%#%/',
'current' => $current_page,
'total' => $total_pages,
'prev_next' => false,
'type' => 'list',
));
$html .= '</div>';
}
return $html;
}