web-dev-qa-db-ja.com

フォーム送信時に作成されたカスタムクエリに対してwp-pagenaviを機能させるにはどうすればよいですか?

私はまたこれを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、ラドゥ

5
rereradu

あなたはwp-pagenaviプラグインのためにajaxベースのページネーションを実装することを試みることができます( http://wordpressapi.com/2011/05/16/add-ajax-pagination-in-wordpress-blog/ 参照のために)これであなたの問題は解決すると思います。

3
swtshweta

これが検索されているので、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
3
helgatheviking

おそらくこの問題はすでにここで解決されているでしょう: https://stackoverflow.com/a/13216165/1801379

あなたはまた、ここからいくつかのアイデアを得ることができます: https://wordpress.stackexchange.com/a/4131/23290

1
Babar

これが私が見つけた解決策です(私はWP 3.3.2とWP-Pagenavi 2.82を使っていることに注意してください):

解決策1: get_query_varパラメータとしてpagedの代わりにpageを使用する。

解決策2 記事swtshwetaが指摘したのと同じように、ajaxベースのナビゲーションを使用する。 (Ajaxを使用すると、pageパラメーターを指定してもページ付けは正しく機能します)。

1
rereradu

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> ";

}

0
p.a.

不思議なことに、提案された答えが私のブラウザには何も表示されません。最新のWPと最新のChromeブラウザがあります。とにかくありがとう。

Wp_pagenaviは正しく表示され、リンクは/ page2 /、/ page3 /などと表示されますが、wp_queryに$ pagedまたは$ page属性を追加しましたが、常に最初のページが表示されます。

0
p.a.