web-dev-qa-db-ja.com

複数の親の値をショートコードに渡す

Wp_queryのparent属性にいくつかの値を渡す必要があります。しかし、私はショートコードを使用しているので、単一の値を渡すと完璧に機能しますが、複数の値を送信する必要がある場合は壊れてしまいます。

デフォルトでは、現在の投稿ID $ thePostIDで動作します。ただし、親を取得する必要がある場合は、parent属性を使用します。私のコードを見てください。

 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');  

私はこのように親を呼んでいます[display_childs_multiple parent = "10,15,20"]

2
andresmijares

ショートコードを呼び出すときに親IDのカンマ区切りのリストを渡す場合は、これを配列に変換するのはかなり簡単です。

たとえば、[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 ...

}

$parent変数は、渡された投稿IDの配列です。1つだけが渡された場合は、単一の要素を持つ配列になります。複数のIDを渡した場合は、複数の値を持つ配列があります。

どのようにしてクエリを構築し、ここから先へ進むかは、完全にあなた次第です...

4
EAMann