WordPress - 添加分页 - 视觉作曲家

时间:2015-10-18 14:04:12

标签: php wordpress pagination

我有一个使用内置插件的视觉作曲家的WordPress主题。博客和组合包含在一个函数中,然后在页面上表示为短代码。每当我尝试添加一些分页功能时,它都不起作用。分页适用于其他“普通”页面,如档案或搜索。有线索吗?

<?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' ); ?>

函数文件中的分页:

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";}

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,尝试在Visual Composer中创建一个显示自定义帖子中元素的元素。

解决方案:在你的while循环中添加:$totalPages = $q->max_num_pages;现在你可以将$totalPages传递给你的分页功能了。

下面我添加了有效的分页功能。

使用示例:my_pagination($totalPages);

function my_pagination($pages = '', $range = 2) {

$showitems = ($range * 2)+1;

global $paged;
if(empty($paged)) $paged = 1;

if($pages == '') {
    global $wp_query;
    $pages = $wp_query->max_num_pages;
    if(!$pages) {
        $pages = 1;
    }
}

if(1 != $pages) {
    echo "<div class='pagination'>";
    if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<a href='".get_pagenum_link(1)."'>&laquo;</a>";
    if($paged > 1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."'>&lsaquo;</a>";

    for ($i=1; $i <= $pages; $i++) {
        if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems )) {
            echo ($paged == $i)? "<span class='current'>".$i."</span>":"<a href='".get_pagenum_link($i)."' class='inactive' >".$i."</a>";
        }
    }

    if ($paged < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($paged + 1)."'>&rsaquo;</a>";
    if ($paged < $pages-1 &&  $paged+$range-1 < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($pages)."'>&raquo;</a>";
    echo "</div>\n";
}

}