Question

Supposons que j'ai les postes suivants avec les titres suivants:

  • posta (est affecté à la catégorie '1')
  • PostX ( catégorie 2 )
  • PostB (catégorie 1)
  • Postc ( catégorie 1 )
  • PostD (catégorie 1)
  • Posty ( catégorie 2 )
  • poste (catégorie 1)
    ...

Quand un visiteur lit le Postc, comment puis-je afficher dans la barre latérale:


Messages précédents:   « Posta » (ce sont des liens, bien sûr)
  'PostB'

Dépêches suivantes:    'PostD'
   'Poste'


OIEau précédent et les 2 prochains messages de la même catégorie. (Si un poste a plus de catégories que nous allons choisir la 1ère ou la dernière - il n'a pas d'importance beaucoup).

De plus, s'il est impossible d'afficher la précédente et deux postes, il est acceptable aussi qu'un seul poste précédent et suivant. (Je sais qu'il ya des fonctions de WP pour cela, mais nous préférons si elle est deux postes possibles).

En outre, bien sûr, nous voulons afficher la première 'n' caractères du titre (disons 22). Nous ne voulons pas afficher un texte statique comme « Next Post » ou similaire.

TIA

Était-ce utile?

La solution

Les fonctions de WordPress existantes ne sont pour l'affichage d'un poste précédent ou suivant. Je me suis vite écrit des fonctions pour afficher un certain nombre de messages.

Coller les éléments suivants dans votre fichier thème functions.php:

function custom_get_adjacent_posts( $in_same_cat = false, $previous = true, $limit = 2 ) {
    global $post, $wpdb;

    $op = $previous ? '<' : '>';

    if ( $in_same_cat ) {
        $cat_array = wp_get_object_terms($post->ID, 'category', array('fields' => 'ids'));

        $join = " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id AND tt.taxonomy = 'category' AND tt.term_id IN (" . implode(',', $cat_array) . ")";
    }

    $posts = $wpdb->get_results( $wpdb->prepare( "SELECT p.* FROM wp_posts AS p $join WHERE p.post_date $op '%s' AND p.post_type = 'post' AND p.post_status = 'publish' ORDER BY p.post_date DESC LIMIT $limit", $post->post_date, $post->post_type ) );

    return $posts;
}

function custom_adjacent_posts_links( $in_same_cat = false, $previous = true, $limit = 2 ) {
    $prev_posts = custom_get_adjacent_posts( $in_same_cat, $previous, $limit );
    if( !empty($prev_posts) ) {
        echo ($previous) ? '<h3>Previous Posts:</h3>' : '<h3>Next Posts:</h3>';
        echo '<ul>';
        foreach( $prev_posts as $prev_post ) {
            $title = apply_filters('the_title', $prev_post->post_title, $prev_post->ID);
            echo '<li><a href="' . get_permalink( $prev_post ) . '">' .$title . '</a></li>';
        }
        echo '</ul>';
    }
}

Dans votre fichier de barre latérale, où vous souhaitez afficher les messages, utilisez custom_adjacent_posts_links( true ); pour afficher les deux messages précédents dans la même catégorie et custom_adjacent_posts_links( true, false ); pour afficher les deux messages dans la même catégorie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top