2016-08-19 4 views
0

Ich habe einen benutzerdefinierten Filter, um Paginierung zu einer Galerie hinzuzufügen.Wordpress - Galerieergebnisse können nicht paginiert werden

Dies ist der Code:

function mysite_custom_gallery($output, $attr) 
{ 
    global $post; 

    //GALLERY SETUP STARTS HERE----------------------------------------// 
    if (isset($attr['orderby'])) { 
     $attr['orderby'] = sanitize_sql_orderby($attr['orderby']); 
     if (! $attr['orderby']) { 
      unset($attr['orderby']); 
     } 
    } 

    $order = 'ASC'; 
    extract(shortcode_atts(array(
     'order'  => $order, 
     'orderby' => 'menu_order ID', 
     'id'   => $post->ID, 
     'itemtag' => 'dl', 
     'icontag' => 'dt', 
     'captiontag' => 'dd', 
     'columns' => 3, 
     'size'  => 'thumbnail', 
     'include' => '', 
     'exclude' => '' 
    ), $attr)); 

    $orderby = 'menu_order ID'; 

    if (! empty($include)) { 
     $include  = preg_replace('/[^0-9,]+/', '', $include); 
     $_attachments = get_posts(array('include'  => $include, 
             'post_status' => 'inherit', 
             'post_type'  => 'attachment', 
             'post_mime_type' => 'image', 
             'order'   => $order, 
             'orderby'  => $orderby 
     )); 

     $attachments = array(); 
     foreach ($_attachments as $key => $val) { 
      $attachments[$val->ID] = $_attachments[$key]; 
     } 
    } 
    if (empty($attachments)) { 
     return ''; 
    } 
    //GALLERY SETUP END HERE------------------------------------------// 

    //PAGINATION SETUP START HERE-------------------------------------// 
    $current = (get_query_var('paged')) ? get_query_var('paged') : 1; 
    $per_page = 24; 
    //$offset = ($page-1) * $per_page; 
    $offset = ($current - 1) * $per_page; 
    $big = 999999999; // need an unlikely integer 

    $total  = sizeof($attachments); 
    $total_pages = round($total/$per_page); 
    if ($total_pages < ($total/$per_page)) { 
     $total_pages = $total_pages + 1; 
    } 
    //PAGINATION SETUP END HERE-------------------------------------// 

    //GALLERY OUTPUT START HERE---------------------------------------// 
    $output = "<div class=\"gallery-images\">\n"; 
    $output .= '<div class="row">'; 
    $counter = 0; 
    $pos  = 0; 
    foreach ($attachments as $id => $attachment) { 
     $pos++; 

     if (($counter < $per_page) && ($pos > $offset)) { 
      $counter++; 
      $output .= '<div class="col-md-3 col-sm-4 col-xs-6 box-gallery">'; 
      $largetitle = get_the_title($attachment->ID); 
      /*$largeimg = wp_get_attachment_image_src($id, 'full');*/ 
      $linkimg = get_attachment_link($attachment->ID); 
      $img  = wp_get_attachment_image_src($id, 'mlt-medium'); 
      $output .= " <a href=\"$linkimg\" title=\"$largetitle\"><img src=\"$img[0]\" width=\"$img[1]\" height=\"$img[2]\" alt=\"\" /></a>\n"; 
      $output .= '</div>'; 
     } 

    } 
    $output .= "<div class=\"clear\"></div>\n"; 
    $output .= "</div>\n"; 
    $output .= "</div>\n"; 
    //GALLERY OUTPUT ENDS HERE---------------------------------------// 

    //PAGINATION OUTPUT START HERE-------------------------------------// 
    $output .= '<div class="pagination">'; 
    $output .= $paginate_links = paginate_links(array(
     'base' => str_replace($big, '%#%', get_pagenum_link($big)), 
     'current' => max(1, get_query_var('paged')), 
     'total' => $total_pages, 
     'mid_size' => 5 
    )); 
    $output .= "</div>\n"; 

    //PAGINATION OUTPUT ENDS HERE-------------------------------------// 

    return $output; 
} 

Und das ist der Filter:

add_filter('post_gallery', 'mysite_custom_gallery', 10, 2); 

Die Galerie alle 24 Bilder und Bildsequenzen richtig die Paginierung korrekt ist Paginierung, zeigt es die richtige Anzahl von Seiten.

Das Problem ist, dass wenn ich auf einen Link klicken nichts passiert, und ich kann nicht verstehen, warum nicht funktioniert.

Die erzeugte URL für die zweite Seite scheint richtig:

http://mysite.app/photogallery/argentina/buenos-aires/buenos-aires/page/2/ 

aber wenn ich versuche, den Link Ich bin umgeleitet zu klicken oder besuchen Sie:

http://mysite.app/photogallery/argentina/buenos-aires/buenos-aires/ 

es die page/2 Segmente so entfernen .
Kann mir bitte jemand helfen, das Problem zu finden?

bearbeiten
hier die Paginierung Quelle:

<div class="pagination"> 
    <span class="page-numbers current">1</span> 
    <a class="page-numbers" href="/photogallery/argentina/buenos-aires/buenos-aires/page/2/">2</a> 
    <a class="page-numbers" href="/photogallery/argentina/buenos-aires/buenos-aires/page/3/">3</a> 
    <a class="page-numbers" href="/photogallery/argentina/buenos-aires/buenos-aires/page/4/">4</a> 
    <a class="page-numbers" href="/photogallery/argentina/buenos-aires/buenos-aires/page/5/">5</a> 
    <a class="page-numbers" href="/photogallery/argentina/buenos-aires/buenos-aires/page/6/">6</a> 
    <a class="next page-numbers" href="/photogallery/argentina/buenos-aires/buenos-aires/page/2/">Next »</a> 
</div> 
+0

Webseite Döns ersetzen lade Popperly nicht. Bitte fügen Sie die Quellausgabe der Seitennummerierung in Ihre Frage ein –

+0

Hinzugefügt die Ausgabe –

+0

Sieht so aus, als ob es die get-Variable paged, aber ich schätze, Ihre URL enthält die Namensseite. Könnten Sie versuchen, '$ current = (get_query_var ('paged')) zu ändern? get_query_var ('paged'): 1; 'mit' $ current = (get_query_var ('page'))? get_query_var ('page'): 1; 'EDIT: das gleiche gilt auch für den Paging OUTPUT –

Antwort

0

Try für Ihren Beitrag Typ zu deaktivieren umleiten, zum Beispiel:

function redirect_canonical_off($redirect_url) 
{ 
    if (is_singular('your_custom_post_type_slug')) { 
     $redirect_url = false; 
    } 

    return $redirect_url; 
} 
add_filter("redirect_canonical", "redirect_canonical_off"); 

Stellen Sie sicher, your_custom_post_type_slug

+0

Mann, das ist perfekt, jetzt funktioniert es! –

Verwandte Themen