Функция пагинации WordPress в шорткоде всегда отображается вверху

Функция пагинации WordPress в шорткоде всегда отображается вверху. Пожалуйста, посмотрите на приведенный ниже код

/*-------------------------------------------------------------------------*/
/* Custom Pagination */
/*-------------------------------------------------------------------------*/

function suareztheme_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 ){

        $pagination_html .= '<div class="pagination">';

        if( $paged > 2 && $paged > $range + 1 && $showitems < $pages ){

            $pagination_html .= '<a href="' . get_pagenum_link( 1 ) . '">&laquo;</a>';

        }

        if( $paged > 1 && $showitems < $pages ){

            $pagination_html .= '<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 )){

                if ( $paged == $i ){

                    $pagination_html .= '<span class="current">' . $i . '</span>';

                } else{

                    $pagination_html .= '<a href="' . get_pagenum_link( $i ). '" class="inactive">' . $i . '</a>';

                }
            }

        }

        if ( $paged < $pages && $showitems < $pages ){

            $pagination_html .= '<a href="' . get_pagenum_link( $paged + 1 ) . '">&rsaquo;</a>';

        }

        if ( $paged < $pages - 1 &&  $paged + $range - 1 < $pages && $showitems < $pages ){

            $pagination_html .= '<a href="' . get_pagenum_link( $pages ) . '">&raquo;</a>';

        }

        $pagination_html .= '</div>';

        return $pagination_html;
    }

}

Затем я вызвал его в функции шорткода.

/*-------------------------------------------------------------------------*/
/* Grid Shortcode */
/*-------------------------------------------------------------------------*/

function RecentBlog($atts, $content = null) {
    extract(shortcode_atts(array(
        "comments" => 'true',
        "date" => 'true',
        "columns" => '4',
        "limit" => '-1',
        "title" => 'true',
        "description" => 'true',
        "cat_slug" => '',
        "post_type" => '',
        "excerpt_length" => '15',
        "readmore_text" => '',
        "pagination" => 'false'
    ), $atts));

    global $post;

    $postformat = get_post_format();

    ....

    if ( get_query_var('paged') ) {
        $paged = get_query_var('paged');
    } elseif ( get_query_var('page') ) {
        $paged = get_query_var('page');
    } else {
        $paged = 1;
    }

    ......

    if (have_posts()) : while (have_posts()) : the_post();

        $postformat = get_post_format();
            if( $postformat == "" ) $postformat="standard";

        $protected = "";

        $portfoliogrid .= '<div class="' . $column_no . ' post grid-post post-' . $postformat . '">';

            .....////

            $portfoliogrid .= '<div class="summary-info">';
                .......
            $portfoliogrid .='</div>';

            // If either of title and description needs to be displayed.
            if ( $title == "true" || $description == "true" ) {

                $portfoliogrid .='<div class="work-details">';
                ......
                $portfoliogrid .='</div>';

            }

        $portfoliogrid .='</div>';

    endwhile; endif;

    if ( $pagination == "true" ){

        if ( isset( $additional_loop ) ){

            echo suareztheme_pagination( $additional_loop->max_num_pages );

        } else {

            echo suareztheme_pagination();

        }

        if ( function_exists("suareztheme_pagination") ) {
        } else {

            next_posts_link('&laquo;&laquo; Older Posts');
            previous_posts_link('Newer Posts &raquo;&raquo;');

        }

    }
    wp_reset_query();
    return $portfoliogrid;
}

add_shortcode( "recentblog", "RecentBlog" );

Приведенный выше код работает нормально, но у него есть одна проблема: когда он отображается на определенной странице, он всегда отображается вверху, независимо от его места. Так что ценю вашу поддержку, чтобы помочь мне, спасибо заранее.


person The Hung    schedule 22.03.2015    source источник


Ответы (1)


В обратном вызове шорткода вам нужно объединить и вернуть html, например:

$portfoliogrid .= suareztheme_pagination();

Обратите внимание, что вам придется использовать get_next_posts_link() и get_previous_posts_link() вместо next_posts_link() и previous_posts_link().

person diggy    schedule 22.03.2015
comment
Большое спасибо @diggy. Теперь он работает отлично. Еще один вопрос: когда я должен использовать ob_start(), есть рекомендации, чтобы добавить его до и после функции. Спасибо. - person The Hung; 22.03.2015
comment
Пожалуйста. Нет необходимости использовать буферизацию вывода, если только вы не можете вернуть нужные данные. - person diggy; 22.03.2015
comment
Привет @diggy Моя проблема все еще возникает, все работает хорошо, за исключением отображения тега a вверху, вы можете проверить мой сайт здесь: 128.199.180.6/demo/blog/blog-grid - person The Hung; 23.03.2015
comment
И это мой код для этой части: if ( $readmore_text != '' || $comments == "true" || $vote == "true" ) { $portfoliogrid .= '<div class="entry-links">'; $portfoliogrid .= '<div class="entry-links-left">'; $portfoliogrid .= dot_irecommendthis(); $portfoliogrid .= '<span class="entry-comments"><i class="fa fa-comments"></i>' . comments_popup_link('Leave a Reply', '1', '%') . '</span>'; $portfoliogrid .= '</div>'; } - person The Hung; 23.03.2015
comment
dot_irecommendthis() повторяет html, как и comments_popup_link() (см. core.trac.wordpress.org/ticket/17763), поэтому вам придется использовать буферизацию вывода (ob_ материал), чтобы вернуть html. - person diggy; 23.03.2015
comment
Существует еще один способ использования пользовательской функции, которую get_comments_popup_link написал @Otto. wordpress" rel="nofollow noreferrer">его личный сайт, чтобы решить мою проблему. Большое спасибо :) - person The Hung; 24.03.2015