Разбиение на страницы Wordpress в шорткоде

Быстрый вопрос для мозгов Wordpress там ...

У меня есть шорткод, который в настоящее время импортирует все сообщения определенного типа. Однако у меня возникли проблемы с добавлением разбивки на страницы в файл wp_query.

Чтобы объяснить, как работает этот код, я поместил [feed type="attractions" limit="2"] на страницу, и он отображает 2 сообщения на основе достопримечательностей, однако он не разбивается на страницы. Просто интересно, что именно я делаю не так...

Вот код! --- >

    function section_feed_shortcode( $atts ) {
    extract( shortcode_atts( array( 'limit' => -1, 'type' => 'post'), $atts ) );

    $q = new WP_Query(  array ( 'posts_per_page' => $limit, 'post_type' => $type, order => 'ASC', orderby =>'menu_order', 'paged' => get_query_var('page')  ) );

    $list = ' ';

    while ( $q->have_posts() ) { $q->the_post();

        $list .= '<article class="listing-view clearfix">' 
        . '<div class="listing-content">' 
        . '<h3>' . get_the_title() . '</h3>' 
        .'<p>' . get_the_excerpt() . '</p>'
        . '<a href="' . get_permalink() . '">' . 'View &raquo;' . '</a>'
        . '</div>'
        . '<a class="listing-thumb" href="' . get_permalink() . '">' . get_the_post_thumbnail($page->ID, 'listing-thumb')  . '<span></span></a>'
        . '</article>';
    }

    wp_reset_query();

    return 
    '<div class="listings clearfix">' 
    . $list 
    . '<div class="nav-previous">' . next_posts_link( __( '<span class="meta-nav">&larr;</span> Older posts', 'stratford_wp' ) ) . '</div>'
    . '<div class="nav-next">' . previous_posts_link( __( 'Newer posts <span class="meta-nav">&rarr;</span>', 'stratford_wp' ) ) . '</div>'
    . '</div>';
}
add_shortcode( 'feed', 'section_feed_shortcode' );

Спасибо за ответы заранее!


person Aaron    schedule 11.07.2012    source источник


Ответы (3)


столкнулся с этой проблемой сегодня и получил решение:

global $paged
$q = new WP_Query(  array ( 'posts_per_page' => $limit, 'post_type' => $type, order => 'ASC', orderby =>'menu_order', 'paged' => $paged  ) );

И затем вам нужно изменить запрос paginate_links для вашего пользовательского сообщения. см. пример wp codex. Лучше вы можете добавить функцию и вызвать ее перед wp_reset_query() и внутри использования функции

$big = 999999999; // need an unlikely integer
echo paginate_links( array(
   'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
   'format' => '?paged=%#%',
   'current' => max( 1, get_query_var('paged') ),
   'total' => $q->max_num_pages //$q is your custom query
 ) );
person IqbalBary    schedule 10.03.2014

Вы сбрасываете свой запрос, прежде чем перейти к следующей/предыдущей ссылкам. Что произойдет, если вы переместите функцию wp_reset_query() ниже?

Кроме того, вам может повезти с этим на http://wordpress.stackexchange.com.

person orangesquare    schedule 18.07.2012
comment
Спасибо, Далтон, попытался переместить функцию сброса вниз, и это не дало никакого эффекта. Я разместил это на wordpress.stackexchange.com /questions/58880/ Спасибо за помощь. - person Aaron; 18.07.2012

вам нужно добавить глобальный $paged, а затем в ваш массив, который передается в WP_Query, вам нужно добавить 'paged' => $paged

Ваш запрос должен понравиться этому.

global $paged
$q = new WP_Query(  array ( 'posts_per_page' => $limit, 'post_type' => $type, order => 'ASC', orderby =>'menu_order', 'paged' => $paged  ) );
person Ajay Patel    schedule 11.07.2012
comment
К сожалению, похоже, это ничего не меняет. Дело не в том, что нумерация страниц не работает... когда я ввожу URL-адрес и /page/2, он отображает следующий набор сообщений, однако get_next_posts_link и предыдущая ссылка, похоже, ничего не извлекают. - person Aaron; 12.07.2012