4

複数のソリューションを試しましたが、うまくいきません。

/page/2 にアクセスしても機能しません。

テーマの index.php でカスタム クエリを実行しています。

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

$args = array(
    'post_type' => array('post', 'music', 'videos'),
    'post_status' => 'publish',
    //'meta_key' => 'featured',
    //'meta_value' => '1',
    'posts_per_page' => 10,
    'orderby'=>'date',
    'order'=>'DESC',
    'paged' => $paged
);

query_posts($args);

ここに私のウェブサイトへのリンクがあります: 私のサイトのホームページ

このページは機能していません (404 をスロー) -機能していないページ(形式 - mywebsite/page/2/)

このページ 2 が動作することに気付きました - 動作しているページ(形式 - mywebsite.com/?page=2)

4

4 に答える 4

16

私は同じ問題を抱えていましたが、これですべてが解決しました。これにより、かなりのパーマリンクを使用して、index.php と page.php のページネーションを行うことができます。

HTML/PHP:

<?php
    //Fix homepage pagination
    if ( get_query_var('paged') ) { $paged = get_query_var('paged'); } else if ( get_query_var('page') ) {$paged = get_query_var('page'); } else {$paged = 1; }

    $temp = $wp_query;  // re-sets query
    $wp_query = null;   // re-sets query
    $args = array( 'post_type' => array('post', 'music', 'videos'), 'orderby'=>'date', 'order'=>'DESC', 'posts_per_page' => 10, 'paged' => $paged);
    $wp_query = new WP_Query();
    $wp_query->query( $args );
    while ($wp_query->have_posts()) : $wp_query->the_post(); 
?>

<!--your loop stuff here -->

<?php endwhile; ?>
<nav>
   <?php paginate(); ?>
   $wp_query = null;
   $wp_query = $temp; // Reset
</nav>

これにより、いくつかのことが可能になります。1 つは、ホーム、ページ、またはシングルのいずれであるかをチェックし、$paged 変数に順番にどのように反応するかを指示します。カスタム投稿タイプでページネーションをクエリすることもできます。また、query_post を使用しないことで、使用時に発生する非常にファンキーなものを避けることができます。paginate(); は、現在導入しているカスタム関数です。

functions.php 内

function paginate() {
global $wp_query, $wp_rewrite;
$wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1;

$pagination = array(
    'base' => @add_query_arg('page','%#%'),
    'format' => '',
    'total' => $wp_query->max_num_pages,
    'current' => $current,
    'show_all' => true,
    'type' => 'list',
    'next_text' => '&raquo;',
    'prev_text' => '&laquo;'
    );

if( $wp_rewrite->using_permalinks() )
    $pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 'page', get_pagenum_link( 1 ) ) ) . '?page=%#%/', 'paged' );

if( !empty($wp_query->query_vars['s']) )
    $pagination['add_args'] = array( 's' => get_query_var( 's' ) );

echo paginate_links( $pagination );
}

これはもともとhttp://bavotasan.com/2011/simple-pagination-for-wordpress/からのもので、ページネーションがホームページで機能するように少し改造しました。

これも、いくつかのことを行います。各ページが独自のリンクを取得してページをページ付けし(これは素晴らしいと思います)、URLを書き換えてきれいなパーマリンクを許可します。リンクを確認すると、変数「s」が「paged」の代わりに使用されていました。「s」を「paged」に置き換えたところ、すべてが完全に機能しました。

ページネーションのオプションのスタイリング

ul.page-numbers {
    margin: 20px 0 10px;
    width: 100%;
    padding: 0;
    font-size: 12px;
    line-height: normal;
    clear: both;
    float: left;
}

ul.page-numbers li {
       float: left;
    }

ul.page-numbers a,
ul.page-numbers span {
    border-radius: 3px;
    -moz-border-radius: 3px;
    -webkit-border-radius: 3px;
    background: -webkit-gradient(linear, left top, left bottom, from(#E4E3E3), to(#FFFFFF));
    background: -moz-linear-gradient(top,  #E4E3E3,  #FFFFFF);
    filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#E4E3E3', endColorstr='#FFFFFF');
    padding: 3px 4px 2px 4px; 
    margin: 2px;
    text-decoration: none;
    border: 1px solid #ccc;
    color: #666;
}

ul.page-numbers a:hover,
ul.page-numbers span.current {  
    border: 1px solid #666;
    color: #444;
}

編集 後、ページ タブの 1 つをクリックすると、ホームページのページネーションが壊れることに気付きました。条件ステートメントを置き換えて、これをその場所に配置することで、これを修正しました。上記のコードも更新しました。

$pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 'page', get_pagenum_link( 1 ) ) ) . '?page=%#%/', 'paged' );
于 2012-12-13T09:05:24.233 に答える
3

ページネーションが正しく機能しないこともあります。以下のクエリを使用してみて、それが役立つかどうかを確認してください。基本的に 1 行のコードを追加し、$args変数を使用しないようにクエリを変更しました。

<?php

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

query_posts( array(
    'post_type' => array(
        'post',
        'music',
        'videos',
    ),
    'post_status' => 'publish',,
    'posts_per_page' => 10,
    'orderby'=>'date',
    'order'=>'DESC',
    'paged' => $paged )
);

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

?> 

    // Display your content here    

    <?php the_title ?>

    <?php the_content(); ?>

<?php endwhile; endif; ?>
于 2012-12-07T19:17:15.250 に答える
1

私はしばらくの間この問題に苦しんでいました.WordPressが必須フィールドの1つを設定していませんでしたmax_num_pages.

したがって、ループ内でこの変数を設定します。これが私のサンプルコードです。

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array('post_type' => 'cpt', 'paged'=>$paged, 'posts_per_page' => 3);
$loop = new WP_Query($args);
$GLOBALS['wp_query']->max_num_pages = $loop->max_num_pages; // This is the line that did the magic for me.

さらに読んでみると、これがわかりました。

  1. single.php、singular.php およびその他の単一ビュー テンプレート:(int) $pageクエリ var page: で指定された投稿のページですget_query_var( 'page' )
  2. すべての種類の archive.php および同様のアーカイブ/投稿タイプのリスト ビュー テンプレート:(int) $pagedグローバル変数には、投稿のリストのページ番号が含まれています (アーカイブの場合と同様)。

これは、ページ テンプレート (単一ビュー テンプレート) を使用していて、ループを使用している場合、この変数を設定する必要があることを意味します。

于 2014-08-15T11:32:41.687 に答える
1

ホームページやアーカイブ ページのカスタム クエリのメイン クエリを決して変更しないでください。ページネーションには常に問題があります。

また、query_postsカスタム クエリの作成には使用しないでください。私の強調は、決してそうではありません。

注:この関数は、プラグインやテーマで使用するためのものではありません。後で説明するように、メイン クエリを変更するためのより優れた、よりパフォーマンスの高いオプションがあります。query_posts() は、ページのメイン クエリをクエリの新しいインスタンスに置き換えることによって変更する、過度に単純で問題のある方法です。これは非効率的 (SQL クエリを再実行する) であり、状況によっては完全に失敗します (特に投稿のページネーションを処理する場合)。

ホームページまたはアーカイブ ページの動作を変更する必要がある場合は、pre_get_posts`を使用して、実行前にメイン クエリを変更/修正します。これは、メイン クエリを変更する正しい方法です。実行前にメインクエリを変更することで、ページネーションに問題がなくなります。

pre_get_postsコンディショナルタグと組み合わせて使用​​して、特定のページをターゲットにすることができます。例として提供されているリンクを見てください。

于 2014-08-15T13:05:29.453 に答える