Short code to display a loop

时间:2011-11-25 作者:andresmijares

我一直在研究这个短代码,但没有成功。。。

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

I\'m getting no output

我很感激你的帮助

提前感谢

UPDATEenter image description here

2 个回复
最合适的回答,由SO网友:Johannes Pille 整理而成

上述问题有很多错误。首先,post_parent 在查询中,参数必须是整数。您正在为其分配一个字符串。对wordpress函数的许多调用,例如the_excerpt()wp_reset_query() 缺少结尾分号。$atts 是短代码属性的关联数组。如果要使用属性,则需要在shortcode函数中提取属性。没有必要将它们传递给循环函数,特别是考虑到您事先没有提取它们。此外,您甚至没有尝试在其中使用它们。

此外,我不明白为什么要将它分为两个函数。我不会在函数和用法中包含直接标记ob_get_clean 要么,但是echoreturn 直接获得所需的结果。后两者或多或少是个人喜好。

也就是说,这将满足您的需求:

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] 在现在的页面中,它将显示您当前的目标。为了实现这一点,可以在shortcode函数中静态设置查询参数。然而,对于第2-6行,这些现在是短代码的默认值,但它们可以在不再次修改函数的情况下动态更改。

有了以上内容,您现在可以使用[andrewloop parent="6" perpage="3"] 例如。因此,短代码可以用于多个不同的查询。

进一步阅读,以防您介意:

SO网友:Andres Yanez

我不太擅长使用短代码,因为我几乎不使用这些代码,但这里是我的贡献。

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

结束

相关推荐

DO_ShortCode()不执行快捷码;)

想象一下函数中的这个基本短代码。php文件:function div_shortcode( $atts ) { return \'<div class=\"div\"></div>\'; } add_shortcode(\'div\', \'div_shortcode\'); 所以每[div] 在Wordpress编辑器中<div class=\"div\"></div>.一切看起来都很好,对吗?现在麻烦来了