私はまたこれをscribuのwp-pagenaviプラグインのためにwordpressサポートフォーラムに投稿しました:
http://wordpress.org/support/topic/plugin-wp-pagenavi-custom-query-form-submit-part-2?replies=1
私の状況:
特定のカスタムフィールドに一致するカスタム投稿タイプのアーカイブからの投稿を表示するカスタムクエリを作成するためにフォームを使用しています(例: "custom-post-type"の場合は、形)。私は知っている、それはフィルタリングと呼ばれています:P
私のカスタム投稿タイプアーカイブは次のようになります。
www.example.com/custom-post-type-archive
(私は "投稿名"パーマリンク設定を使用していることに注意してください)
フォーム送信時の新しいURLは次のとおりです。
www.example.com/custom-post-type-archive?key=value
カスタムクエリは、 value of key customフィールドのある投稿のみを表示するように設定されています。
$value = $_GET['value'];
$paged = get_query_var('page');
$args = array(
'post_type' => 'custom-post-type',
'meta_key' => 'key',
'meta_value' => $value,
'paged' => $paged,
'posts_per_page' => 10
);
$my_query = new WP_Query($args);
ループの後に私は持っています:
wp_pagenavi(array('query' => $my_query));
wp_reset_postdata();
クエリは機能しますが、正しい結果が得られます。しかし、ページネーションを機能させるのに問題があります。次のページに進むと、次のURLが表示されます。
www.example.com/custom-post-type-archive/page/2?key=value
しかし、ページ付けはまだ私が最初のページにいるように表示され、結果は同じです。
手動で入力した場合
www.example.com/custom-post-type-archive?key=value&page=2
正しい結果が得られます(2ページから)が、すべてのナビゲーションリンクは、上で手動で入力したURLと同じです。
助けてください(ヒント、リソース、何でも)。
THX、ラドゥ
あなたはwp-pagenaviプラグインのためにajaxベースのページネーションを実装することを試みることができます( http://wordpressapi.com/2011/05/16/add-ajax-pagination-in-wordpress-blog/ 参照のために)これであなたの問題は解決すると思います。
これが検索されているので、WP Page Navi(バージョン2.74以降)はカスタムクエリをサポートするようになりました。
WP_Pagenavi FAQ は、wp_pagenavi()
関数にクエリパラメータを渡して 2番目のクエリでPagenaviプラグインを使用する方法 を説明するための次の記事にリンクしています。
チュートリアルから:
$my_query = new WP_Query();
while ( $my_query->have_posts() ) : $my_query->the_post();
the_title();
// more stuff here
endwhile;
wp_pagenavi( array( 'query' => $my_query ) );
wp_reset_postdata(); // avoid errors further down the page
おそらくこの問題はすでにここで解決されているでしょう: https://stackoverflow.com/a/13216165/1801379
あなたはまた、ここからいくつかのアイデアを得ることができます: https://wordpress.stackexchange.com/a/4131/23290
これが私が見つけた解決策です(私はWP 3.3.2とWP-Pagenavi 2.82を使っていることに注意してください):
解決策1: get_query_var
パラメータとしてpaged
の代わりにpage
を使用する。
解決策2 記事swtshwetaが指摘したのと同じように、ajaxベースのナビゲーションを使用する。 (Ajaxを使用すると、page
パラメーターを指定してもページ付けは正しく機能します)。
Raduさん、次の解決策がうまくいきました。標準のページングコードを修正し、 "&page = xxx"を送信し、フォーム送信変数として$ pageをキャッチするようにしました。それは今完璧に動作します。
最後の行に注意してください。これは変更が行われた場所です。
global $paged;
$paged = ($_GET["page"]) ? ($_GET["page"]) : 1; //this is where I catch the requested page
function pagenavi( $found_posts, $p = 2 ) { // pages will be show before and after current page
if ( is_singular() ) return; // don't show in single page
global $paged;
$max_page = intval($found_posts / 10) + 1;
echo('max_page=' . $max_page);
if ( $max_page == 1 ) return; // don't show when only one page
if ( empty( $paged ) ) $paged = 1;
echo '<span class="pages">Page: ' . $paged . ' of ' . $max_page . ' <BR></span> '; // pages
if ( $paged > $p + 1 ) p_link( 1, 'First' );
if ( $paged > $p + 2 ) echo '... ';
for( $i = $paged - $p; $i <= $paged + $p; $i++ ) { // Middle pages
if ( $i > 0 && $i <= $max_page ) $i == $paged ? print "<span class='page-numbers current'>{$i}</span> " : p_link( $i );
}
if ( $paged < $max_page - $p - 1 ) echo '... ';
if ( $paged < $max_page - $p ) p_link( $max_page, 'Last' );
}
function p_link( $i, $title = '' ) {
if ( $title == '' ) $title = "Page {$i}";
echo "<a class='page-numbers' href='", esc_html( $_SERVER['REQUEST_URI'] . '&page=' .$i ), "' title='{$title}'>{$i}</a> ";
}
不思議なことに、提案された答えが私のブラウザには何も表示されません。最新のWPと最新のChromeブラウザがあります。とにかくありがとう。
Wp_pagenaviは正しく表示され、リンクは/ page2 /、/ page3 /などと表示されますが、wp_queryに$ pagedまたは$ page属性を追加しましたが、常に最初のページが表示されます。