Wie paginieren Anhänge in einer sekundären Abfrage als Galerie?

Ich habe diesen Code, der alle Bilder zeigt, die an meinen Post-Typ angehängt sind. Gibt es eine Möglichkeit, diese zu paginieren? Ich habe 25 Bilder und ich möchte so wenig wie möglich scrollen.

Code:

'attachment', 'post_mime_type'=>'image', 'posts_per_page' => -1, 'post_status' => 'any', 'post_parent' => $post->ID) ); if ( $attachments ) { foreach ( $attachments as $attachment ) { $src = wp_get_attachment_image_src( $attachment->ID, full); $html = ''; $html .= wp_get_attachment_image( $attachment->ID, 'gallery-thumb') .''; echo $html; } } ?>

Vielen Dank!

Solutions Collecting From Web of "Wie paginieren Anhänge in einer sekundären Abfrage als Galerie?"

Ich gehe davon aus, dass du so etwas willst:

 |---------------------| | content | | (static) | |---------------------| | gallery | | (paged) | |---------------------| | < < pagelinks >> | |---------------------| 

In diesem Setup bleibt Ihr Post-Inhalt gleich, scheint statisch zu sein, während die Galerie paged ist. Dies bedeutet, dass Sie die Hauptabfrage haben, die Ihnen den Titel, den Inhalt usw. anzeigt, und eine sekundäre Abfrage, die dafür verantwortlich ist, Ihnen die Bilder der Galerie anzuzeigen. Die Seitenverknüpfungen auf dieser Seite sind mit der sekundären Schleife verbunden und führen dort den Seitenwechsel aus. Um dies zu erreichen, schlage ich vor, WP_Query anstelle von get_posts() , nicht nur, weil ich keine Lösung für letztere habe, sondern weil ich denke, dass es im Allgemeinen der bessere Ansatz ist. In einem ersten Schritt müssen Sie eine neue Abfragevariable einrichten, die für die Paginierung verwendet wird. Die function add_gallery_query_var() geht in Ihre functions.php .

Code:

  add_filter('init', 'wpse124169_attachment_gallery_add_query_var'); function wpse124169_attachment_gallery_add_query_var() { global $wp; $wp->add_query_var('gallery_page'); } 

Wenn Sie außerdem möchten, dass hübsche Permalinks mit der neuen Abfragevariablen arbeiten, müssen Sie eine neue Rewrite-Regel implementieren. Fügen Sie dazu Ihre functions.php , die add_rewrite_tag und add_rewrite_rule verwendet .

Code:

  add_filter('init', 'wpse124169_attachment_gallery_add_rewrite_tag_rule'); function wpse124169_attachment_gallery_add_rewrite_tag_rule() { add_rewrite_tag('%gallery_page%','([^&]+)'); add_rewrite_rule('([^/]+)/gallery/image//?([0-9]{1,})/?$', 'index.php?name=$matches[1]&gallery_page=$matches[2]', 'top'); } 

Der nächste Schritt besteht darin, die sekundäre Schleife für die Galerie zu erstellen. WP_Query wird dazu verwendet, zusätzlich gibt WP_Query die Möglichkeit, die Links zum Paging durch die Galerie zu erstellen. Ich habe mich entschieden, eine function dafür zu erstellen, also geht unter code in die functions.php .

Code:

 function wpse124169_get_attachment_gallery() { global $post; $gallery_page = (get_query_var('gallery_page')) ? get_query_var('gallery_page') : 1; $args = array( 'posts_per_page' => 1, 'orderby' => 'menu_order', 'order' => 'ASC', 'post_type' => 'attachment', 'post_status' => 'inherit', 'post_mime_type' => 'image', 'post_parent' => $post->ID, 'paged' => $gallery_page ); $gallery = new WP_Query($args); if ( $gallery->have_posts() ) : echo ''; echo ''; endif; } 

Wie Sie sehen können, verwendet die sekundäre Abfrage ein zusätzliches Post-Objekt – $gallery – und die zuvor definierte gallery_pagegallery_page -, um eine korrekte Paginierung zu ermöglichen. Letzteres wird verwendet, um den format von paginate_links() . Wir sollten nicht vergessen, wp_reset_postdata() , um Probleme zu vermeiden. Natürlich ist dies nur die sekundäre Schleife, nicht die vollständige Vorlage.

Ich rufe die sekundäre Attachment-Galerie-Abfrage in meiner single.php nach der Hauptabfrage / Schleife über die function wpse124169_get_attachment_gallery() . Nach den obigen Schritten haben Sie Ihre paginierte Anlagegalerie eingerichtet. Ich habe das getestet und es funktioniert für mich.


Im Folgenden liste ich die wichtigsten Informationen und Quellen auf. Wenn Sie an mehr Details interessiert sind, sollte Ihnen das mehr bringen als nur begonnen.

Information:

  1. WP_Query
  2. paginate_links
  3. class WP / source / add_query_var
  4. API neu schreiben
  5. add_rewrite_tag
  6. add_rewrite_rule
  7. Mehrere WP_Query-Schleifen mit Paginierung
  8. Wie erstelle ich separate Paginierung für mehrere Schleifen?


Wahlweise:

Was es tut ist, es ändert den Standardlink für das erste Bild. Normalerweise ist es http://site.ext/?p=123 oder http://site.ext/post-name/ , der Anhang Eltern Permalink. Das ist in Ordnung, es zeigt standardmäßig das erste Bild an. Wenn Sie jedoch möchten, dass der Link für das erste Bild die Galerieabfrage var in der URL darstellt, müssen Sie in paginate_links . Dies führt dazu, dass der Link wie folgt aufgerufen wird http://site.ext/?p=123&gallery_page=1 oder http://site.ext/post-name/gallery/image/1 . Dies gilt nur für die Navigation über den Link von paginate_links() , das Aufrufen des übergeordneten Posts zeigt nur den entsprechenden übergeordneten Permalink. Der Code würde auch in die functions.php .

Code:

 add_filter( 'paginate_links', 'wpse124169_attachment_gallery_first_image_link' ); function wpse124169_attachment_gallery_first_image_link( $link ) { global $post; if ( get_option('permalink_structure') ) { $gpg_num = substr( strrchr( $link, '/' ), 1 ); } else { $gpg_plk = wp_parse_args($link); $gpg_num = $gpg_plk['gallery_page']; } if ( empty( $gpg_num ) ) { if ( get_option('permalink_structure') ) { $link = get_permalink( $post->post_parent ) . 'gallery/image/1'; } else { $link = get_permalink( $post->post_parent ) . '&gallery_page=1'; } } return $link; } 


Aktualisieren:

Dies kann verwendet werden, um den [gallery] shortcode zu ändern, wie hier gezeigt: Wie paginiert man wordpress [gallery] shortcode? .