it-swarm.com.de

Wie kann ich wp-pagenavi für eine benutzerdefinierte Abfrage verwenden, die auf einer Formularübermittlung basiert?

Ich habe dies auch in den WordPress-Support-Foren für das wp-pagenavi-Plugin von Scribu gepostet:

http://wordpress.org/support/topic/plugin-wp-pagenavi-custom-query-form-submit-part-2?replies=1

Meine Situation:

Ich verwende ein Formular, um eine benutzerdefinierte Abfrage zu erstellen, in der Beiträge aus einem benutzerdefinierten Beitragstyparchiv angezeigt werden, die einem bestimmten benutzerdefinierten Feld entsprechen (Beispiel: Bei "Benutzerdefinierter Beitragstyp" werden nur Beiträge angezeigt, für die der Wert "Benutzerdefiniertes Feld" in ausgewählt ist bilden). Ich weiß, es heißt Filtern: P

Mein benutzerdefiniertes Posttyp-Archiv sieht folgendermaßen aus:

www.example.com/custom-post-type-archive

(beachte, dass ich die "post name" -Permalink-Einstellung verwende)

Nach dem Absenden des Formulars lautet die neue URL wie folgt:

www.example.com/custom-post-type-archive?key=value

In der benutzerdefinierten Abfrage werden nur Posts mit Wert von Schlüssel benutzerdefiniertem Feld angezeigt:

$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);

Nach der Schleife habe ich:

wp_pagenavi(array('query' => $my_query));
wp_reset_postdata();

Die Abfrage funktioniert, ich erhalte die richtigen Ergebnisse. Aber ich habe Probleme damit, die Paginierung zum Laufen zu bringen. Wenn ich zur nächsten Seite gehe, erhalte ich folgende URL:

www.example.com/custom-post-type-archive/page/2?key=value

aber die Paginierung sieht immer noch so aus, als wäre ich auf der ersten Seite und die Ergebnisse sind dieselben.

Wenn ich manuell eingebe:

www.example.com/custom-post-type-archive?key=value&page=2

Ich erhalte die richtigen Ergebnisse (ab Seite 2), aber alle Navigationslinks stimmen mit der oben manuell eingegebenen URL überein.

Bitte helfen Sie (Hinweise, Ressourcen, alles).

Thx, Radu

5
rereradu

Sie können versuchen, eine Ajax-basierte Paginierung für das wp-pagenavi-Plugin zu implementieren (siehe http://wordpressapi.com/2011/05/16/add-ajax-pagination-in-wordpress-blog/ als Referenz). Ich denke, dies wird Ihr Problem lösen.

3
swtshweta

Da dies bei der Suche auftaucht, möchte ich darauf hinweisen, dass WP Page Navi (ab Version 2.74) jetzt benutzerdefinierte Abfragen unterstützt.

Das WP_Pagenavi FAQ verweist auf den folgenden Artikel, um zu erklären, wie das Pagenavi-Plugin mit einer sekundären Abfrage verwendet wird indem der Funktion wp_pagenavi() ein Abfrageparameter übergeben wird.

Aus dem Tutorial:

$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

Wahrscheinlich wurde das Problem hier bereits gelöst: https://stackoverflow.com/a/13216165/1801379

Hier können Sie sich auch ein Bild machen: https://wordpress.stackexchange.com/a/4131/23290

1
Babar

Hier sind die Lösungen, die ich gefunden habe (beachten Sie, dass ich WP 3.3.2 und WP-Pagenavi 2.82 verwende):

Lösung 1: Verwenden von paged anstelle von page als get_query_var-Parameter.

Lösung 2 Mit Ajax-basierten Navigation, wie im Artikel Swtshweta darauf hingewiesen. (Mit Ajax funktioniert die Paginierung auch mit dem Parameter page einwandfrei.).

1
rereradu

Radu, Die folgende Lösung hat bei mir funktioniert: Ich habe einen Standard-Paging-Code geändert und ihn "& page = xxx" senden lassen und $ page als Formularübergabevariable abgefangen. Es funktioniert jetzt perfekt.

Beachten Sie die letzte Zeile, in der Änderungen vorgenommen wurden.

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.

Seltsamerweise zeigt die vorgeschlagene Antwort nichts in meinem Browser. Ich habe den neuesten WP und den neuesten Chrome-Browser. Danke trotzdem.

Obwohl wp_pagenavi korrekt angezeigt wird und die Links/page2 /,/page3/usw. anzeigen und ich meiner wp_query das Attribut $ paged oder $ page hinzugefügt habe, wird immer die erste Seite angezeigt.

0
p.a.