web-dev-qa-db-fra.com

Faire `précédent_post_link ()` Fonction Afficher le message après la prochaine prochaine I.E. Sauter un post

Est-il possible lorsque vous utilisez la fonction previous_post_link() Pour que cela puisse obtenir le post précédent après la prochaine page I.E. Faites-le sauter un post. Donc, si vous êtes sur POST 5 en ordre numérique, il passe à la poste 3?

La raison étant j'ai un type de post personnalisé single-cpt.php Fichier qui tire dans deux messages, donc lorsque vous utilisez le lien de poste précédent de la case, cela signifie que lorsque vous allez au prochain message, l'un de ceux du poste précédent est à nouveau réel.

Toute aide serait fabuleuse.

2
The Chewy
$current_id = get_the_ID();
$cpt = get_post_type();
$all_ids = get_posts(array(
    'fields'          => 'ids',
    'posts_per_page'  => -1,
    'post_type' => $cpt,
    'order_by' => 'post_date',
    'order' => 'ASC',
));
$prev_key = array_search($current_id, $all_ids) - 2;
$next_key = array_search($current_id, $all_ids) + 2;
if(array_key_exists($prev_key, $all_ids)){
    $prev_link = get_the_permalink($all_ids[$prev_key]);
    echo $prev_link;
}
if(array_key_exists($next_key, $all_ids)){
    $next_link = get_the_permalink($all_ids[$next_key]);
    echo $next_link;
}

J'ai donc interrogé tous les identifiants des postes du type de poste actuel. Puis, puisque c'est une clé de tableau simple => Valeur, il suffit de trouver la touche postale actuelle dans la matrice et de l'additionner ou de soustrayée, de sorte que votre message actuel est le 8, votre suivant est 10 et vous précédent est 6. Ensuite, si votre tableau n'a pas Vous avez suffisamment de clés, dites que votre courant était le 8, mais votre tableau ne disposait que de 9 qui le gâchera, je vérifie pour voir si la clé existe. Si tel est le cas, utilisez get_the_permalink () avec la valeur de la clé souhaitée.

Probablement pas la façon la plus gracieuse de le faire mais ...

1
Alan

J'ai écrit quelques fonctions qui astuces =WordPress en pensant que nous sommes sur le précédent/prochain poste avant d'appeler previous_post_link ou alors next_post_link:

/**
 * Displays the next post link that is adjacent to the next post.
 *
 * @param object       $next_post      Optional. The next post to reference. Default is current post.
 * @param string       $format         Optional. Link anchor format. Default '« %link'.
 * @param string       $link           Optional. Link permalink format. Default '%title'
 * @param bool         $in_same_term   Optional. Whether link should be in a same taxonomy term. Default false.
 * @param array|string $excluded_terms Optional. Array or comma-separated list of excluded term IDs. Default empty.
 * @param string       $taxonomy       Optional. Taxonomy, if $in_same_term is true. Default 'category'.
 */
function next_next_post_link( $next_post = null, $format = '%link »', $link = '%title', $in_same_term = false, $excluded_terms = '', $taxonomy = 'category' ) {
    global $post;

    // Keep track of the current post so we can reset back later.
    $current_post = $post;

    // If a "next post" is specified, use that.
    if ( $next_post ) {
        $post = $next_post;
        setup_postdata( $post );
    }

    // Make WordPress think we're on the next post.
    $post = get_next_post();
    setup_postdata( $post );

    // Echo the next post link, skipping the next post.
    next_post_link( $format, $link, $in_same_term, $excluded_terms, $taxonomy );

    // Reset everything back.
    $post = $current_post;
    wp_reset_postdata();
}


/**
 * Displays the previous post link that is adjacent to the previous post.
 *
 * @param object       $previous_post  Optional. The previous post to reference. Default is current post.
 * @param string       $format         Optional. Link anchor format. Default '« %link'.
 * @param string       $link           Optional. Link permalink format. Default '%title'.
 * @param bool         $in_same_term   Optional. Whether link should be in a same taxonomy term. Default false.
 * @param array|string $excluded_terms Optional. Array or comma-separated list of excluded term IDs. Default empty.
 * @param string       $taxonomy       Optional. Taxonomy, if $in_same_term is true. Default 'category'.
 */
function previous_previous_post_link( $previous_post = null, $format = '%link »', $link = '%title', $in_same_term = false, $excluded_terms = '', $taxonomy = 'category' ) {
    global $post;

    // Keep track of the current post so we can reset back later.
    $current_post = $post;

    // If a "previous post" is specified, use that.
    if ( $previous_post ) {
        $post = $previous_post;
        setup_postdata( $post );
    }

    // Make WordPress think we're on the previous post.
    $post = get_previous_post();
    setup_postdata( $post );

    // Echo the previous post link, skipping the previous post.
    previous_post_link( $format, $link, $in_same_term, $excluded_terms, $taxonomy );

    // Reset everything back.
    $post = $current_post;
    wp_reset_postdata();
}

Ajoutez ces fonctions à votre functions.php Fichier et utiliser next_next_post_link et previous_previous_post_link De la même manière que vous utiliseriez next_post_link et previous_post_link

Résultat: screenshot showing post #3 with links to post #1 and post #5

0
Nate Allen