logo

Afficher et obtenir un permalien « SEO » d’une publication « future » sur wordpress [functions + PHP]

Pour diverses raisons vous pourriez avoir besoin de ce bout de code. Nous nous en servons particulièrement quand nous voulons afficher des actualités par date (actualités qui seront par conséquent « planifiées »). Normalement ces actualités ne s’affichent qu’à la date prévue.

Pour afficher les articles planifiés sur vos pages :

index.php ou archive.php et où vous voudrez

<?php
$args = array(
// 'posts_per_page' => 2,
'order' => 'ASC',
'orderby' => 'date',
'post_status' => 'future',
// 'cat'=> 17
);
$recent = new WP_Query($args);
while($recent->have_posts()) : $recent->the_post();
?>

// optimise l'affichage du lien (permalink)
<a href="<?php echo get_permalink_alternative($post_id, true); ?>" title="<?php the_title(); ?>">
<?php the_title(); ?>
</a>
<div class="content"><?php the_excerpt();?></div>

<?php endwhile;
wp_reset_postdata(); ?>

 

functions.php

function get_permalink_alternative($post_id, $require = false){
    $post_status = get_post_status($post_id);
    if($post_status === 'future'){
     if($require){
       require_once(ABSPATH . 'wp-admin/includes/post.php');
     }
     $permalink_a = get_sample_permalink($post_id);
     $permalink = preg_replace('/\%postname\%/', $permalink_a[1], $permalink_a[0]);
    }else{
      $permalink = get_permalink($post_id);
    }
 return $permalink;
}

/* Montrer les "futures" pour les non connectés */
function show_future_posts($posts)
{
   global $wp_query, $wpdb;
   if(is_single() && $wp_query->post_count == 0)
   {
      $posts = $wpdb->get_results($wp_query->request);
   }
   return $posts;
}
add_filter('the_posts', 'show_future_posts');

Le lien de la page est souvent abscons malgré les réglages permaliens : https://wwww.site.com/?p=25&preview=true. Le code fourni permet également de changer le lien par quelque chose de plus … SEO.