it-swarm.com.de

Shortcode zum Anzeigen benutzerdefinierter Beitragstypen

Ich habe ein Problem mit einem Shortcode, den ich erstelle.

Ich habe 5-10 verschiedene benutzerdefinierte Beitragstypen und anstatt eine Vorlage für jeden einzelnen Beitragstyp zu erstellen, benutze ich lieber eine normale Seite und importiere die Beiträge über einen Shortcode.

Um das näher zu erläutern, habe ich eine Seite mit dem Namen "Sehenswürdigkeiten" und einen Beitragstyp mit dem Namen "Sehenswürdigkeit". Auf der Seite füge ich den Shortcode ein -> [feed type = "attraction" limit = "5"]

Dies gibt alle Posts unter dem benutzerdefinierten Post-Typ "attraction" aus.

Das Problem, das ich habe, ist, es richtig zu paginieren. Ich habe tausend Arten gelesen, benutzerdefinierte Beitragstypen zu paginieren, und der Code, den ich derzeit verwende, funktioniert in der Regel für so viele Leute, aber ich kann das nicht innerhalb des Shortcodes zum Laufen bringen. Gibt es einen Grund dafür?

Gegenwärtig wird die Seite gut mit fünf Beiträgen angezeigt, die Links zu den nächsten und vorherigen Beiträgen werden jedoch nicht wiedergegeben. Wenn ich die URL +/page/2 eingebe, wird die zweite Seite korrekt mit den nächsten 5 Beiträgen im Abschnitt angezeigt. Es scheint also, dass die Paginierung funktioniert, ich kann jedoch nicht darauf zugreifen, da kein nächster/vorheriger Link angezeigt wird.

Dies hat den Vorteil, dass ich eine normale Seite verwenden, die Posts importieren und Inhalte über und unter dem aufgerufenen Shortcode einfügen kann.

Hoffe das alles macht Sinn.

Hier ist mein Shortcode-Code ->

    function section_feed_shortcode( $atts ) {
    extract( shortcode_atts( array( 'limit' => -1, 'type' => 'post'), $atts ) );

    global $paged;
    $q = new WP_Query(  array ( 
        'posts_per_page' => $limit, 
        'post_type' => $type, 
        order => 'ASC', 
        orderby =>'menu_order', 
        'paged' => $paged ) );

    $list = ' ';

    while ( $q->have_posts() ) { $q->the_post();

        $list .= '<article class="listing-view clearfix">' 
        . '<div class="listing-content">' 
        . '<h3><a href="' . get_permalink() . '">' . get_the_title() . '</a></h3>' 
        .'<p>' . get_the_excerpt() . '</p>'
        . '<a href="' . get_permalink() . '">' . 'View &raquo;' . '</a>'
        . '</div>'
        . '<a class="listing-thumb" href="' . get_permalink() . '">' . get_the_post_thumbnail($page->ID, 'listing-thumb')  . '<span></span></a>'
        . '</article>';
    }

    return 
    '<div class="listings clearfix">' 
    . $list 
    . '<div class="nav-previous">' . next_posts_link( __( '<span class="meta-nav">&larr;</span> Older posts' ) ) . '</div>'
    . '<div class="nav-next">' . previous_posts_link( __( 'Newer posts <span class="meta-nav">&rarr;</span>' ) ) . '</div>'
    . '</div>' .
    wp_reset_query();

}
add_shortcode( 'feed', 'section_feed_shortcode' );
3
Aaron

ok, ich mag die Idee einer zweiten Abfrage immer noch nicht, aber Sie haben Recht, es ist schwierig, den Archivseiten Inhalt hinzuzufügen.

es gab 3 Probleme, die ich fand:

  1. next_posts_link und previous_posts_link geben beide zurück, Sie benötigen ihre get_-Äquivalente.

  2. wenn Sie get_next_posts_link nachschlagen, werden Sie feststellen, dass es sich um die globale $ wp_query handelt, die in Ihrem Fall immer für die aktuelle "Seite" und nicht für die Abfrage des Shortcodes war. Sie müssen dann tatsächlich query_posts und die ursprüngliche Abfrage quetschen. Ich hoffe, die Reset-Abfrage funktioniert, aber ich bin nicht 100% sicher. du musst das testen.

  3. ich bin mir nicht sicher, ob dies ein Problem war, aber normalerweise wird die Variable $ paged so definiert, also habe ich mich daran gemacht.

    function section_feed_shortcode( $atts ) {
    extract( shortcode_atts( array( 'limit' => -1, 'type' => 'post'), $atts ) );
    
    $paged = get_query_var('paged') ? get_query_var('paged') : 1;  
    
    query_posts(  array ( 
        'posts_per_page' => $limit, 
        'post_type' => $type, 
        'order' => 'ASC', 
        'orderby' =>'menu_order', 
        'paged' => $paged ) );
    
    $list = ' ';   
    
    while ( have_posts() ) { the_post();
    
        $list .= '<article class="listing-view clearfix">' 
        . '<div class="listing-content">' 
        . '<h3><a href="' . get_permalink() . '">' . get_the_title() . '</a></h3>' 
        .'<p>' . get_the_excerpt() . '</p>'
        . '<a href="' . get_permalink() . '">' . 'View &raquo;' . '</a>'
        . '</div>'
        . '<a class="listing-thumb" href="' . get_permalink() . '">' . get_the_post_thumbnail($page->ID, 'listing-thumb')  . '<span></span></a>'
        . '</article>';
    }
    
    return 
    '<div class="listings clearfix">' 
    . $list 
    . '<div class="nav-previous">' . get_next_posts_link( __( '<span class="meta-nav">&larr;</span> Older posts' ) ) . '</div>'
    . '<div class="nav-next">' . get_previous_posts_link( __( 'Newer posts <span class="meta-nav">&rarr;</span>' ) ) . '</div>'
    . '</div>' .
    wp_reset_query();
    
    }
    add_shortcode( 'feed', 'section_feed_shortcode' );
    
3
helgatheviking