web-dev-qa-db-fra.com

passer plusieurs valeurs de parents dans un shortcode

J'ai besoin de passer quelques valeurs dans l'attribut parent de wp_query. Cependant, j'utilise un shortcode, donc, si je passe une valeur unique fonctionne parfaitement, mais si je dois envoyer plusieurs valeurs, cela casse, ce serait un excellent cadeau de vacances si quelqu'un1 pouvait m'aider à le faire.

Par défaut, cela fonctionne avec l'ID de publication en cours $ thePostID. Cependant, si j'ai besoin de récupérer le parent, j'utilise l'attribut parent. Regardez mon code.

 function andrew_child_loop_shortcode_new ( $atts ) {
      global $post; $thePostID = $post->ID;
      extract ( shortcode_atts (array (
        'posts' => 20,
        'parent' => $thePostID,
        'exclude' => array(0)
      ), $atts ) );
      ///////$atts[ 'parent' ] = explode( "," $atts[ 'parent' ] );
      ///////extract( $atts );
      $output = '<div class="clear"></div>';
         $args = array(
            'orderby' =>  'menu_order',
            'order' => 'ASC',
            'post_parent' => $parent,
            'post_type' => 'page',
            'post__not_in' =>  array($exclude),
            'posts_per_page' => $posts
           );
      wp_reset_query();
      $i=0;
      $andrew3_query = new  WP_Query( $args );
        $output .= '<div id="multiple-childs" class="grid_8">';
      while (  $andrew3_query->have_posts()) { $i++ ; $andrew3_query->the_post();
        $output .= '<div id="child-results-multiple" class="grid_2 omega result-'.$i.'">';
        if(has_post_thumbnail()):;
        $output .= '<a href="'.
                    get_permalink().
                    '" a>'.
                    get_the_post_thumbnail(get_the_ID(), 'blog-post-carousel').
                    '</a>';
        else :;
        $output .= '<a href="'.
                    get_permalink().
                    '" a>'.
                      '<img src="'.
                       get_bloginfo( "template_url" ).
                       '/images/theme/no-image.png" width=115 height=115> </a>';

        endif;
        $output .=

               '<h4>'.
               get_the_title().
               '</h4>'.
               '<p>'.
               get_the_excerpt().
               '</p>'.
               '</div>';

      }
      wp_reset_query();
      $output .= '</div>';
      return $output;
    }
    add_shortcode('display_childs_multiple', 'andrew_child_loop_shortcode_new');  

J'appelle le parent de cette façon [display_childs_multiple parent = "10,15,20"]

2
andresmijares

Si vous passez une liste d'ID parents délimités par des virgules lorsque vous appelez le shortcode, il est assez facile de transformer cela en tableau.

Par exemple, en utilisant [scname parent="5,10,15"]:

function andrew_child_loop_shortcode_new ( $atts ) {
    global $post; $thePostID = $post->ID;

    $atts = shortcode_atts( array(
        'posts'  => 20,
        'parent' => $thePostID
        ), $atts );

    // Turn the 'parent' parameter into an array
    $atts[ 'parent' ] = explode( ",", $atts[ 'parent' ] );

    extract( $atts );

    // ... now do whatever you were going to do ...

}

Désormais, votre variable $parent est un tableau des ID de poste transmis. Si un seul d'entre eux a été transmis, il s'agit d'un tableau avec un seul élément. Si vous avez passé plusieurs ID, vous aurez alors un tableau avec plusieurs valeurs.

Comment vous construisez vos requêtes et continuez à partir d’ici, c’est à vous de décider ...

4
EAMann