web-dev-qa-db-ja.com

カスタム投稿タイプページのページ付け

カスタム投稿タイプのページを作成しました。コードはSnippiで見ることができます: http://snippi.com/s/e8852rx

Paginate_linksを挿入しようとしていますが、何らかの理由でそれが表示されていません。これがpaginate_linksコードです(このコードは通常のarchive.phpファイルで動作します)。

<?php
global $wp_query;

$big = 999999999; // need an unlikely integer

echo paginate_links( array(
    'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
    'format' => '?paged=%#%',
    'current' => max( 1, get_query_var('paged') ),
    'total' => $wp_query->max_num_pages
) );
?>
2
AndrettiMilas

以下は私のために動作します(私はすべての書式設定/カスタム投稿メタを削除しました)。

私は付け加えます、なぜあなたはカスタムテンプレートでページを使う必要があるのか​​明確ではありません、そして代わりにカスタム投稿タイプのアーカイブページのために使われるarchive-portfolio.phpと呼ばれるテンプレートを作成しません( template hierarchy を見てください)

<?php
/*
Template Name: Portfolio
*/
?>

<?php get_header(); ?>
<div id="container">
<div id="portfolio_content">
<div id="portfolio_wrap">

    <?php $loop = new WP_Query(array('post_type' => 'portfolio', 'posts_per_page' => get_option('to_count_portfolio'), 'paged' => get_query_var('paged') ? get_query_var('paged') : 1 )
); ?>
    <?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
        <span class="title"><?php the_title(); ?></span></br>
        <?php endwhile; ?>  

<?php

$big = 999999999; // need an unlikely integer
 echo paginate_links( array(
    'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
    'format' => '?paged=%#%',
    'current' => max( 1, get_query_var('paged') ),
    'total' => $loop->max_num_pages
) );
?>
</div>
</div>
</div>
</div>

<?php get_footer(); ?>
9
Stephen Harris

あなたはポートフォリオポストタイプのルートアーカイブページを使ってみましたか?

コードの大部分をarchive-portfolio.phpファイルに移動する場合は、ポストアーカイブの場合と同様に、ループは正しく設定され、箱から出してすぐに機能するはずです。

また、独自のカスタムクエリを使用する必要はなく、代わりにメインループを使用するだけで、ページの読み込みが速くなります。

1
Tom J Nowell

Stephen Harrisが指摘したように、 "$ loop-> have_posts()"アプローチを使用する代わりに、次のように投稿をループしてみることもできます。

<?php foreach ($loop->get_posts() as $post) { ?>
     <span class="title"><?php echo $post->post_title; ?></span></br>
<?php } ?>
1

私はカスタム アーカイブ でページネーションを使って問題があったことは一度もありません。そのため、ページを作成してそのページに独自のクエリを記述するのではなく、archive.phpをコピー/貼り付けして、カスタム投稿に合わせて名前を変更するだけです(例:archive-videos.php)。

もしあなたが本当にカスタムページテンプレートを使いたいのなら、あなたのクエリの直前にこれを追加してください:

query_posts( array( 'post_type' => 'videos', 'paged' => get_query_var('page') ) )

より多くの情報: http://scribu.net/wordpress/wp-pagenavi/right-way-to-use-query_posts.html

0
Dominic

メインのクエリを参照しているため、カスタム投稿タイプではなく、「投稿」のみを表示しようとしている可能性があります。

あなたの正確なフォーマットが何であるかわからないが、私はそうクエリをやり直すと思います -

$args = Array( // Array of arguments for query_posts()
    'numberposts' => -1,
    'posts_per_page' => get_option('posts_per_page'),
    'paged' => $paged,
    'post_type' => array('your-post-type-slug', 'another-post-type-slug-if-you-want')
);
query_posts($args);

これはあなたのコードが次のようになることを意味します -

<?php
global $wp_query; // You don't need this if you are not in a function, so can probably be removed.

$args = Array( // Array of arguments for query_posts()
    'numberposts' => -1,
    'posts_per_page' => get_option('posts_per_page'),
    'paged' => $paged,
    'post_type' => array('your-post-type-slug', 'another-post-type-slug-if-you-want')
);
query_posts($args);


$big = 999999999; // need an unlikely integer

echo paginate_links( array(
    'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
    'format' => '?paged=%#%',
    'current' => max( 1, get_query_var('paged') ),
    'total' => $wp_query->max_num_pages )
);
?>
0
David Gard

これは私がたまに苦労した問題です。

これが私にとってこの状況でうまくいったことです(WP 3.1.1)。

<?php   
                $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
                $args = array( 'post_type' => 'custom_post_type', 'posts_per_page' => 5, 'paged' => $paged);
                $loop = new WP_Query( $args );
                if($loop->have_posts()):
                    while ( $loop->have_posts() ) : $loop->the_post();
                        //whatever output you require, such as, e.g:
                        the_excerpt();
                    endwhile;
                endif;
        ?>

それから、ページネーションコントロールのために:

<?php 
    echo custom_paginate_links( 
                            array(
                                'format' => '?paged=%#%',
                                'current' => max( 1, get_query_var( 'paged' ) ),
                                'total' => $loop->max_num_pages
                                ) );
?>
0
heathenJesus

あなたのfunctions.phpファイル内に、ページ付けを処理しそしてあなたのテーマを通して、標準的な、そしてカスタムの投稿タイプのために使われることができる関数を作成するほうが良いでしょう。

次の関数をあなたのテーマにget_pagination()をドロップすると、いつでも必要な場所にナビゲーションができます。私はここにそれについてのブログ記事を書きました: http://deadlyhifi.com/2011/06/non-bloated-pagination-for-your-wordpress-functions-php-file/ (そしてコードはに基づいています http://robertbasic.com/blog/wordpress-paging-navigation/ /もともと)

/**
 * A pagination function
 * @param integer $range: The range of the slider, works best with even numbers
 * Used WP functions:
 * get_pagenum_link($i) - creates the link, e.g. http://site.com/page/4
 * previous_posts_link(' ‚ '); - returns the Previous page link
 * next_posts_link(' é '); - returns the Next page link
 * http://robertbasic.com/blog/wordpress-paging-navigation/
 * tweaked by tdB ...
 */
function get_pagination($range = 4) {
global $paged, $wp_query;

// How much pages do we have?
if ( !$max_page ) {
    $max_page = $wp_query->max_num_pages;
}

// We need the pagination only if there is more than 1 page
if ( $max_page > 1 ) {
    if ( !$paged ) $paged = 1;

    echo '<div class="postpagination">';

    // To the previous page
    previous_posts_link('Prev');

    if ( $paged >= $range ) echo '<a href="' . get_pagenum_link(1) . '">1</a>';
    if ( $paged >= ($range + 1) ) echo '<span class="page-numbers">&hellip;</span>';

    // We need the sliding effect only if there are more pages than is the sliding range
    if ( $max_page > $range ) {
        // When closer to the beginning
        if ( $paged < $range ) {
            for ( $i = 1; $i <= ($range + 1); $i++ ) {
                    echo ( $i != $paged ) ? '<a href="' . get_pagenum_link($i) .'">'.$i.'</a>' : '<span class="this-page">'.$i.'</span>';
            }
        // When closer to the end
        } elseif ( $paged >= ($max_page - ceil(($range/2))) ) {
            for ( $i = $max_page - $range; $i <= $max_page; $i++ ) {
                echo ( $i != $paged ) ? '<a href="' . get_pagenum_link($i) .'">'.$i.'</a>' : '<span class="this-page">'.$i.'</span>';
            }
        // Somewhere in the middle
        } elseif ( $paged >= $range && $paged < ($max_page - ceil(($range/2))) ) {
            for ( $i = ($paged - ceil($range/2)); $i <= ($paged + ceil(($range/2))); $i++ ) {
                echo ($i != $paged) ? '<a href="' . get_pagenum_link($i) .'">'.$i.'</a>' : '<span class="this-page">'.$i.'</span>';
            }
        }
    // Less pages than the range, no sliding effect needed
    } else {
        for ( $i = 1; $i <= $max_page; $i++ ) {
                echo ($i != $paged) ? '<a href="' . get_pagenum_link($i) .'">'.$i.'</a>' : '<span class="this-page">'.$i.'</span>';
            }
    }

    // On the last page, don't put the Last page link
    if ( $paged <= $max_page - ($range - 1) ) echo '<span class="page-numbers">&hellip;</span><a href="' . get_pagenum_link($max_page) . '">' . $max_page . '</a>';

    // Next page
    next_posts_link('Next');

    echo '</div><!-- postpagination -->';
}
}
0
deadlyhifi