web-dev-qa-db-fra.com

Shortcode Affichage des types de publication personnalisés

J'ai un problème avec un shortcode que je crée.

J'ai 5 à 10 types de publications personnalisés différents, et plutôt que de créer un modèle pour chaque type de publication, Id utilise plutôt une page normale et importe les publications via un shortcode.

Donc, pour expliquer davantage, j'ai une page appelée Attractions et un type de message appelé "Attraction". Sur la page, j'insère le shortcode -> [feed type = "attraction" limit = "5"]

Cela affiche tous les messages sous le type de message personnalisé "attraction".

Le problème que j'ai, c'est de le faire paginer correctement. J'ai lu mille façons de paginer des types de publication personnalisés et le code que j'utilise actuellement a tendance à fonctionner selon beaucoup de personnes, mais je ne parviens pas à faire en sorte que cela fonctionne dans le code court. Y a-t-il une raison à cela?

Actuellement, la page s'affiche correctement, avec cinq publications, mais ne renvoie pas aux liens suivants, des publications précédentes. Si je tape dans l'url +/page/2, la deuxième page s'affiche correctement avec les 5 prochains articles de la section. Il semble donc que la pagination fonctionne, mais je ne peux pas y accéder car aucun lien Suivant/Précédent ne s'affiche.

L'avantage de le faire de cette manière est que je peux utiliser une page normale, importer les articles et inclure du contenu au-dessus et au-dessous du shortcode appelé.

J'espère que tout cela a du sens.

Heres mon code de shortcode ->

    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, je n'aime toujours pas l'idée d'une deuxième requête, mais vous avez raison, il est difficile d'ajouter du contenu aux pages d'archives.

il y avait 3 problèmes que j'ai trouvé:

  1. next_posts_link et previous_posts_link écho, vous avez besoin de leurs équivalents get_.

  2. lorsque vous recherchez get_next_posts_link, vous constatez qu'il repose sur le $ wp_query global ... qui, dans votre cas, a toujours été utilisé pour la "page" réelle et non pour la requête du shortcode. vous devez alors réellement query_posts et écraser la requête initiale. J'espère que la requête de réinitialisation fonctionne, mais je ne suis pas sûr à 100%. vous devrez tester cela.

  3. pas sûr que ce soit un problème, mais je vois généralement la variable $ paged définie de cette façon, donc je suis allé avec elle.

    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