Advertisement
pskli

Créer un shortcode WordPress : articles et taxonomies

Mar 20th, 2013
1,166
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php function shortcode_series($param) {
  2.     extract(
  3.         shortcode_atts(
  4.             array(
  5.                 'title' => 'Article n°<strong>%nb%</strong> de la série <em>%serie%</em>'
  6.             ),
  7.             $param
  8.         )
  9.     );
  10.  
  11.     global $post;
  12.  
  13.     // Dans quel taxonomie "Série" est catégorisé notre article ?
  14.     $serie = wp_get_post_terms($post->ID, 'serie');
  15.  
  16.  
  17.     // Si fait partie d'une série, récupérer des informations cruciales sur cette série (nom, slug)
  18.     if (!empty($serie)) {
  19.         $serie_name = $serie[0]->name;
  20.         $serie_slug = $serie[0]->slug;
  21.     }
  22.  
  23.     // Récupérons les AUTRES articles de cette série
  24.     $posts_in_serie = get_posts(
  25.         array(
  26.             'orderby' => 'date',
  27.             'order' => 'ASC',
  28.             'tax_query' => array(
  29.                 array(
  30.                     'taxonomy' => 'serie',
  31.                     'field' => 'slug',
  32.                     'terms' => $serie_slug
  33.                 )
  34.             )
  35.         )
  36.     );
  37.  
  38.     $serie_data = array();
  39.  
  40.     foreach ($posts_in_serie as $k=>$post_in_serie) {
  41.         if ($post->ID == $post_in_serie->ID) { $current_post_index = $k+1; }
  42.  
  43.         $serie_data[] = array(
  44.             'id' => $post_in_serie->ID,
  45.             'title' => $post_in_serie->post_title
  46.         );
  47.     }
  48.  
  49.     // Modifier les marqueurs %nb% et %serie% par les valeurs correctes à afficher
  50.  
  51.     $nice_title = str_replace('%nb%', $current_post_index, $title);
  52.     $nice_title = str_replace('%serie%', $serie_name, $nice_title);
  53.  
  54.     // Afficher la liste des articles de notre série
  55.  
  56.     ob_start();
  57.  
  58.     echo '<section id="post-serie" class="clearfix">';
  59.     echo '<h4>' . $nice_titlewp_specialchars_decode() . '</h4>';
  60.  
  61.     echo '<ol>';
  62.     foreach ($serie_data as $article) {
  63.         if ($article['id'] == $post->ID) {
  64.             echo '<li><strong>' . $article['title'] . '</strong></li>';
  65.         } else {
  66.             echo '<li><a href="' . get_permalink($article['id']) . '" title="' . esc_attr($article['title']) . '">' . $article['title'] . '</a></li>';
  67.         }
  68.     }
  69.     echo '</ol>';
  70.     echo '</section>';
  71.  
  72.     $post_serie_data = ob_get_contents();
  73.     ob_end_clean();
  74.  
  75.     return $post_serie_data;
  76. }
  77. add_shortcode('series', 'shortcode_series');
Advertisement
Advertisement
Advertisement
RAW Paste Data Copied
Advertisement