0

これを機能させるために一晩中苦労しましたが、問題が見つからないようです。Bootstrap を使用して新しいテーマを作成しています。それに加えて、カスタム ページ ナビゲーション用の小さなコードがあり、基本的な WordPess 投稿リストで問題なく動作するようです。

しかし、ギャラリーと呼ばれる新しいカスタム投稿タイプを追加しましたが、ギャラリー カスタム投稿タイプのすべての投稿を一覧表示し、ページネーションを機能させる方法についての解決策が見つかりません。これまでのところ、archive-galleries.php という新しいファイルを作成しました。このファイルには、ギャラリー カスタム投稿タイプのすべての投稿がリストされていますが、2 ページ目に移動しません。エラーが発生します404 not found

これがarchive-galleries.phpページのコードです

<?php get_header(); ?>
<?php get_sidebar('top'); ?>
<div class="row">
    <div class="span8">
    <?php the_post(); ?>
    <h3 class="text-error"><?php _e('Latest image galleries', 'vt-translate'); ?></h3>
    <?php $count = 0;
    $paged = intval(get_query_var('paged'));
    $paged = ($paged) ? $paged : 1; 

    $query_arguments = array(
    'post_type' => 'galleries',
    'posts_per_page' => 4,
    'paged' => $paged,
    );
    // Query posts
    query_posts( $query_arguments );
     while ( have_posts() ) : the_post();
    $open = !($count%4) ? '<div class="row">' : '';
    $close = !($count%4) && $count ? '</div>' : '';
    echo $close.$open;
    ?>
        <div class="span2">
            <a href="<?php the_permalink() ?>">
                <img class="thumb" data-src="holder.js/160x250" alt="<?php the_title(); ?>" src="<?php bloginfo('template_url'); ?>/inc/timthumb.php?src=<?php echo get_post_meta($post->ID, 'thumb', true); ?>&h=250&w=160&zc=1" />
            </a>
            <div class="clearfix"></div>
            <h6>
                <a href="<?php the_permalink() ?>"><?php trim_title(); ?></a>
            </h6>
        </div>
    <?php 
    $count++;
    endwhile; 
    echo $count ? '</div>' : '';
    ?>
    </div>
    <div class="span4">
            <?php get_sidebar('pageright'); ?>
    </div>
</div>
<div class="pagination pagination-centered">
    <?php page_navi(); ?>
</div><!-- #nav-below -->
<?php get_sidebar('belownavigation'); ?>
<?php get_footer(); ?>

そして、ページネーションに使用したカスタム コードを次に示します。これは functions.php ファイルにあります。

//Wordpress page navigation with numbers
function page_navi($before = '', $after = '') {
    global $wpdb, $wp_query;
    $request = $wp_query->request;
    $posts_per_page = intval(get_query_var('posts_per_page'));
    $paged = intval(get_query_var('paged'));
    $numposts = $wp_query->found_posts;
    $max_page = $wp_query->max_num_pages;
    if ( $numposts <= $posts_per_page ) { return; }
    if(empty($paged) || $paged == 0) {
        $paged = 1;
    }
    $pages_to_show = 7;
    $pages_to_show_minus_1 = $pages_to_show-1;
    $half_page_start = floor($pages_to_show_minus_1/2);
    $half_page_end = ceil($pages_to_show_minus_1/2);
    $start_page = $paged - $half_page_start;
    if($start_page <= 0) {
        $start_page = 1;
    }
    $end_page = $paged + $half_page_end;
    if(($end_page - $start_page) != $pages_to_show_minus_1) {
        $end_page = $start_page + $pages_to_show_minus_1;
    }
    if($end_page > $max_page) {
        $start_page = $max_page - $pages_to_show_minus_1;
        $end_page = $max_page;
    }
    if($start_page <= 0) {
        $start_page = 1;
    }

    echo $before.'<ul>'."";
    if ($paged > 1) {
        echo '<li class="prev"><a href="'.get_pagenum_link().'" title="First">'.__('&laquo;','vt-translate').'</a></li>';
    }

    $prevposts = get_previous_posts_link('&laquo; Previous');
    if($prevposts) { echo '<li>' . $prevposts  . '</li>'; }
    else { echo '<li class="active"><a href="#">&laquo; Previous</a></li>'; }

    for($i = $start_page; $i  <= $end_page; $i++) {
        if($i == $paged) {
            echo '<li class="active"><a href="#">'.$i.'</a></li>';
        } else {
            echo '<li><a href="'.get_pagenum_link($i).'">'.$i.'</a></li>';
        }
    }
    echo '<li class="">';
    next_posts_link('Next &raquo;');
    echo '</li>';
    if ($end_page < $max_page) {
        echo '<li class="next"><a href="'.get_pagenum_link($max_page).'" title="Last">'.__('&raquo;','vt-translate').'</a></li>';
    }
    echo '</ul>'.$after."";
}
4

1 に答える 1

0

何らかの理由で、カスタム投稿タイプのアーカイブがデフォルトのアーカイブと同じように機能しないため、解決策を見つけました。または、これはちょっとした回避策です。

したがって、回避策の主な問題はパーマリンクにあるため、別のカスタム投稿タイプ名とカスタム ページ テンプレートを使用する必要がありました。

私の functions.php ファイルには、ギャラリーと呼ばれるカスタム投稿タイプを登録するコードがあります。しかし、ギャラリーを使用してすべての投稿をリストしたかったので、ページにそのような名前を付け、カスタム投稿タイプに書き換えルールを追加する必要があったため、カスタム投稿タイプを登録する関数は次のようになりました。

function my_custom_post_product() {
$labels = array(
    'menu_name'             => 'Galleries',
    'all_items'             => __( 'All Posts' ),
);
$args = array(
    'labels'                => $labels,
    'description'           => 'Add image galleries custom posts',
    'public'                => true,
    'exclude_from_search'   => true,
    'show_in_nav_menus'     => true,
    'show_in_menu'          => true,
    'capability_type'       => 'post',
    'menu_position'         => 5,
    'supports'              => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments', 'custom-fields' ),
    'has_archive'           => true,
    'rewrite' => array('slug' => 'gallery'),
    '_builtin' =>  false
);
register_post_type( 'galleries', $args );
}
add_action( 'init', 'my_custom_post_product' );

そのため、ギャラリーの代わりにカスタム投稿でギャラリー スラッグを使用するようになりました。

ギャラリーのすべての投稿を一覧表示するには、archive-galleries.php ページのコードを使用し、page-galleries.php という新しいページ テンプレートを作成し、archive-galleries.php のコードを追加しました。

新しいページを作成し、新しく作成したギャラリー テンプレートと保存したページを選択しました。メニューに新しいページが追加され、機能します。

カスタム投稿タイプでページネーションを機能させる方法についてインターネット上で大きな議論があり、何らかの理由で通常のアーカイブとして機能しません。自己と主な問題は、インターネット上の多くの人が見落としていることです(私もそうでした)は、投稿タイプのスラッグと同じページに名前を付けることができず、パーマリンクのデフォルト設定ではアーカイブが機能しないことです。

于 2013-05-20T06:40:03.513 に答える