I have a WordPress theme that uses visual composer built in plugin. The blog and porfolio are inside a function that is then expressed as shortcode on a page. Whenever I try to add some pagination function it doesnt work. The pagination works on other “normal” pages like archives, or search. Any clues?
<?php function hsv_blog( $atts, $content = '', $id = '' ) {
extract( shortcode_atts( array(
'id' => '',
'class' => '',
'cats' => '',
'limit' => '',
'page_name' => '',
), $atts ) );
$args = array(
'post_type' => 'post',
'posts_per_page' => $limit,
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'ids',
'terms' => explode(',', $cats),
),
)
);
ob_start();
$q = new WP_Query( $args );
if ( $q->have_posts() ) while ( $q->have_posts() ) : $q->the_post();
$post_format = (get_post_format() == true) ? get_post_format():'standard';
switch ($post_format) {
case 'aside':
case 'quote':
$class = ' grey';
break;
default:
$class = '';
break;
}
global $hsv_opt;
// general settings
$type_website = $hsv_opt['general-type-website'];
$pg_class = ( $type_website == 2 ) ? ' home' : ''; ?>
<div id="post-<?php the_ID(); ?>" <?php post_class('element clearfix col1-3 blog auto bi'.$class.$pg_class); ?>>
<?php get_template_part('post-formats/content', $post_format ); ?> </div> <?php endwhile; ?> <?php wp_reset_query(); ?> <?php return ob_get_clean(); } add_shortcode( 'hsv_blog', 'hsv_blog' ); ?>
pagination in the functions file:
function wpbeginner_numeric_posts_nav() {
if( is_singular() )
return;
global $wp_query;
/** Stop execution if there's only 1 page */
if( $wp_query->max_num_pages <= 1 )
return;
$paged = get_query_var( 'paged' ) ? absint( get_query_var( 'paged' ) ) : 1;
$max = intval( $wp_query->max_num_pages );
/** Add current page to the array */
if ( $paged >= 1 )
$links[] = $paged;
/** Add the pages around the current page to the array */
if ( $paged >= 3 ) {
$links[] = $paged - 1;
$links[] = $paged - 2;
}
if ( ( $paged + 2 ) <= $max ) {
$links[] = $paged + 2;
$links[] = $paged + 1;
}
echo '<div class="navigation"><ul>' . "n";
/** Previous Post Link */
if ( get_previous_posts_link() )
printf( '<li>%s</li>' . "n", get_previous_posts_link() );
/** Link to first page, plus ellipses if necessary */
if ( ! in_array( 1, $links ) ) {
$class = 1 == $paged ? ' class="active"' : '';
printf( '<li%s><a href="%s">%s</a></li>' . "n", $class, esc_url( get_pagenum_link( 1 ) ), '1' );
if ( ! in_array( 2, $links ) )
echo '<li>â¦</li>';
}
/** Link to current page, plus 2 pages in either direction if necessary */
sort( $links );
foreach ( (array) $links as $link ) {
$class = $paged == $link ? ' class="active"' : '';
printf( '<li%s><a href="%s">%s</a></li>' . "n", $class, esc_url( get_pagenum_link( $link ) ), $link );
}
/** Link to last page, plus ellipses if necessary */
if ( ! in_array( $max, $links ) ) {
if ( ! in_array( $max - 1, $links ) )
echo '<li>â¦</li>' . "n";
$class = $paged == $max ? ' class="active"' : '';
printf( '<li%s><a href="%s">%s</a></li>' . "n", $class, esc_url( get_pagenum_link( $max ) ), $max );
}
/** Next Post Link */
if ( get_next_posts_link() )
printf( '<li>%s</li>' . "n", get_next_posts_link() );
echo '</ul></div>' . "n";}
I had the same problem, trying to create an element in Visual Composer that displays elements from my custom post.
The solution: inside your while loop add:
$totalPages = $q->max_num_pages;
Now you can pass$totalPages
to your pagination function.Below I’ve added my pagination function that worked.
Example of usage:
my_pagination($totalPages);
}