私はこのショートコードには何の成功もなしに取り組んできました...
function loop_shortcode( $atts = '' ) {
'<div class="clear"></div>
<div class="childs grid_12">
<?php
$the_query = 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"]
を例えば使うことができます。そのため、ショートコードは複数の異なるクエリに使用できます。
あなたが気にする場合のためにさらに読むこと:
私はこれらをほとんど使用していないので私はショートコードにはあまり良くありませんが、ここに私の貢献があります。
function loop_shortcode($atts, $content = null) {
shortcode_atts(array(
'post_parent' => 8,
'post_type' => 'page',
'posts_per_page' => 4,
'sort_column' => 'menu_order'
), $atts);
$the_query = new WP_Query();
$the_query->query($atts);
if ($the_query->have_posts()) : while ($the_query->have_posts()) :
$the_query->the_post(); ob_start(); ?>
<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><!-- /#service-hp -->
<?php endwhile; endif; wp_reset_query();
$content = ob_get_contents(); ob_end_clean();
return $content;
}
add_shortcode('myloop', 'loop_shortcode');