質問: new wp_query( array( "post_parent" => "8", "post_type" => "page", "posts_per_page" => 4, "sort_column" => "menu_order" ) ); ?> <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <div id="service-hp"> <?php the_post_thumbnail("home-thumb") ?> <h2 style="margin-bottom:5px"><?php the_title() ?></h2> <?php the_excerpt() ?> <a class="read-more" href="<?php the_permalink() ?>">en savoir plus <img src="<?php bloginfo( "template_url" ); ?>/images/read-more.png"></a> </div> <!-- ends here --> <?php endwhile; ?> <?php wp_reset_query() ?> </div>'; } function my_loop_shortcode( $atts ) { ob_start(); loop_shortcode($atts); return ob_get_clean(); } add_shortcode('my_loop', 'my_loop_shortcode'); 出力がない どうぞよろしくお願いします。前もって感謝します _アップデート_
回答: 上記には多くの問題があります。たとえば、クエリ引数のpost_parentは整数である必要があります。あなたはそれに文字列を割り当てています。 the_excerpt()やwp_reset_query()などのワードプレス関数への呼び出しには、末尾のセミコロンが欠けています。 $attsは、ショートコードの属性の連想配列です。属性を使用したい場合は、それらをshortcode関数で抽出する必要があります。特にそれらを事前に抽出していないという観点から、それらをループ関数に渡す必要はありません。また、あなたはとにかくそれらをそれで使用しようとさえしていません。さらに、なぜそれを2つの機能に分けたいのかわかりません。そして私は関数に直接マークアップを含めずに ob_get_clean を使用することはしませんが、 echo または return を直接使用することにします。後者の2つは、多かれ少なかれ個人的な好みです。それが言われて、これはあなたが望むことをするでしょう:function andrew_loop_shortcode( $atts ) { extract( shortcode_atts( array( 'parent' => 8, 'type' => 'page', 'perpage' => 4 ), $atts ) ); $output = '<div class="clear"></div><div class="childs grid_12">'; $args = array( 'post_parent' => $parent, 'post_type' => $type, 'posts_per_page' => $perpage, 'sort_column' => 'menu_order' ); $andrew_query = new wp_query( $args ); while ( $andrew_query->have_posts() ) : $andrew_query->the_post(); $output .= '<div id="service-hp">'. get_the_post_thumbnail('home-thumb'). '<h2 style="margin-bottom:5px">'. get_the_title(). '</h2>'. get_the_excerpt(). '<a class="read-more" href="'. get_permalink(). '">en savoir plus <img src="'. get_bloginfo( 'template_url' ). '/images/read-more.png"></a></div><!-- ends here -->'; endwhile; wp_reset_query(); $output .= '</div>'; return $output; } add_shortcode('andrewloop', 'andrew_loop_shortcode'); 上記の2行目から6行目は厳密には必要ではありませんが、あなたのショートコードの機能を追加します。単にページで[andrewloop]を単に使用すると、現在目指しているものが表示されます。これを実現するためだけに、ショートコード関数でクエリ引数を静的に設定することができます。ただし、2行目から6行目では、これらがショートコードのデフォルト値になりましたが、機能を再度変更することなくオンザフライで変更できます。上記で、あなたは今[andrewloop parent="6" perpage="3"]を例えば使うことができます。そのため、ショートコードは複数の異なるクエリに使用できます。あなたが気にする場合のためにさらに読むこと: codex:wp_queryクラス codex:ショートコードapi