it-swarm.com.de

Shortcode-Paginierung rückt nicht vor

Ich habe eine Bildergalerie, die funktioniert. Ich konvertiere sie in einen Shortcode, damit die Positionierung flexibel ist und ich den Code nicht immer wieder kopieren muss.

Das Problem, das ich habe, ist, dass die Paginierung nicht zur nächsten Seite vorrückt. Die Bilder zeigen, die Paginierung zeigt, die Seitenzahl zeigt ... aber wenn ich versuche, auf Seite zwei oder drei zu klicken, ändern sich die Bilder, die Paginierung und die Seitenzahlen nicht. Die URL ändert sich, der Inhalt nicht.

Ich habe eine Seite mit einem manuellen Code (der funktioniert und sich weiterentwickelt oder ändert, wenn auf Paginierung geklickt wird).

Die Seite, an der ich arbeite, ist: http://joshrodg.com/test/banquet/2017-induction-banquet/ . Mein Test-Shortcode befindet sich oben (unter 2017 Induction Banquet), derjenige, der funktioniert, ist der untere (manueller Code).

Mein Shortcode sieht so aus: [halloffame rml_folder="16"]

Meine Funktion sieht so aus:

function picture_gallery($atts){
    extract(shortcode_atts(array(
        'rml_folder' => 1
    ), $atts));

    $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
    query_posts("post_status=inherit&post_type=attachment&rml_folder=".$rml_folder."&orderby=title&order=asc&posts_per_page=12&paged=".$paged);

    if ( have_posts() ) :
        $return_string .= '<div id="album">';
            while ( have_posts() ) : the_post();
                $return_string .= '<div class="gallery">';
                    $image = wp_get_attachment_image(get_post_thumbnail_id($post->ID), 'medium');
                    $return_string .= '<a href="'.wp_get_attachment_url($post->ID).'" class="simplelightbox">'.$image.'</a>';
                    $return_string .= '<p>'.get_the_title().'</p>';
                $return_string .= '</div>';
            endwhile;
        $return_string .= '</div>';
    endif;

    $return_string .= '<div id="pagi">';
        $return_string .= '<div class="wrap">';
            $args = array(
                'prev_text' => __('<span class="left"></span><span class="ion-Android-arrow-dropleft"></span>'),
                'next_text' => __('<span class="ion-Android-arrow-dropright"></span><span class="right"></span>')
            );
            $return_string .= paginate_links($args);
        $return_string .= '</div>';
    $return_string .= '</div>';

    global $wp_query;
    $current_page = get_query_var( 'paged' );
    $pages = $wp_query->max_num_pages;
    $return_string .= '<p align="center">(Page: '.$current_page.' of '.$pages.')</p>';

    wp_reset_query();

    return $return_string;
}

function register_shortcodes(){
    add_shortcode('halloffame', 'picture_gallery');
}
add_action( 'init', 'register_shortcodes');

Da dies mit dem manuellen Code funktioniert, schätze ich, dass mit meinem Shortcode-Code etwas nicht stimmt.

Irgendwelche Ideen?

** UPDATE **

Also, auf der Seite http://joshrodg.com/test/banquet/ ist die Paginierung gebrochen, aber auf http://joshrodg.com/test/banquet/2017-induction-banquet/ Die Paginierung funktioniert. 2017-induction-banquet ist der ursprüngliche Beitrag, es ist ein untergeordneter Beitrag von http://joshrodg.com/test/banquet/ . Auf http://joshrodg.com/test/banquet/ zeige ich den Inhalt aller meiner untergeordneten Seiten an. Der Shortcode selbst funktioniert also, nur nicht auf dieser Seite - möglicherweise stimmt etwas mit meiner Schleife nicht.

Die Schleife für diese Seite sieht folgendermaßen aus:

<?php query_posts("order=asc&orderby=menu_order&posts_per_page=-1&post_type=page&post_parent=".$post->ID); ?>
    <?php while ( have_posts() ) : the_post(); ?>
        <div class="wrap">
            <h2><?php the_title(); ?></h2>
        </div>
        <p><?php the_content(); ?></p>
    <?php endwhile; ?>
<?php wp_reset_query(); ?>

Ich denke, es könnte einen Konflikt mit der Schleife im Shortcode und der Schleife auf dieser Seite geben.

Die Paginierung auf der Originalseite sieht folgendermaßen aus: http://joshrodg.com/test/banquet/2017-induction-banquet/page/2/

Die Paginierung auf der übergeordneten Seite sieht folgendermaßen aus: http://joshrodg.com/test/banquet/page/2/

Ich bin mir nicht sicher, ob das einen Unterschied macht, aber ich dachte, es ist erwähnenswert.

Vielen Dank,
Josh

1
Josh Rodgers

Also habe ich es geschafft, eine Lösung zu finden.

Ich habe versucht, query_posts auf meinem Shortcode zu ändern, aber aus irgendeinem Grund konnte ich das nicht zum Laufen bringen. Ich habe die Abfrage auf der Seite geändert, auf der das Problem behoben wurde.

Die Abfrage sieht nun so aus:

<?php
    $args = array(
        'order' => 'asc',
        'orderby' => 'menu_order',
        'posts_per_page' => -1,
        'post_type' => 'page',
        'post_parent' => $post->ID

    );

    $query = new WP_Query( $args );
?>

    <?php while ( $query->have_posts() ) : $query->the_post(); ?>
        <div class="wrap">
            <h2><?php the_title(); ?></h2>
        </div>
        <p><?php the_content(); ?></p>
    <?php endwhile; ?>
<?php wp_reset_postdata(); ?>

Der Shortcode hat sich nicht geändert (außer das Entfernen des Bindestrichs).

Die beiden Abfragen widersprachen sich also. Die verschiedenen Abfragen query_posts und WP_Query haben das Problem behoben.

Vielen Dank,
Josh

0
Josh Rodgers

Verwenden Sie im Shortcode-Namen keinen Bindestrich. Siehe https://codex.wordpress.org/Shortcode_API#Hyphens .

1
Rick Hellewell