php foreach循环回声,打印,返回dillema

时间:2016-02-11 09:19:56

标签: php wordpress foreach return echo

NEWBIE HERE。

我正在编写这个wordpress插件,以便我可以使用get_posts()作为短代码。

function getposts_func($atts) {
    $atts = shortcode_atts( array('category' => '',), $atts, 'get_posts' );
    $cat=$atts['category'];
    global $post;
    $args = array(
                'category'      => $cat,
                'numberposts'   => -1,
                'order'         => 'ASC',
                );
    $myposts = get_posts( $args );
    foreach( $myposts as $post ) : setup_postdata($post);
        $post_permalink = get_permalink();
        $post_title = get_the_title();
        echo '<li><a href="' . $post_permalink . '">' . $post_title . '</a></li>';
    endforeach;
    wp_reset_postdata();} add_shortcode( 'get_posts', 'getposts_func' );

问题:它在实际内容之前输出。我在某处读到这是因为ECHO,我需要使用RETURN。但是,如果我使用return,它会打破循环并且只输出一个帖子。我也尝试使用PRINT,但它与ECHO基本相同。

我的理论是我需要将值作为ARRAY返回。但我不知道该怎么做。我试图使用$ output []缓冲区但是失败了。

任何帮助人员?

2 个答案:

答案 0 :(得分:3)

如果更改foreach部分以使用变量作为返回,您将获得信息。

   $result = '';
    foreach( $myposts as $post ) : setup_postdata($post);
        $post_permalink = get_permalink();
        $post_title = get_the_title();
        $result .= '<li><a href="' . $post_permalink . '">' . $post_title . '</a></li>';
    endforeach;
return $result;

答案 1 :(得分:1)

如果返回实际上是您必须对此进行编码的方式,那么只需保存变量中的所有行,以便在流程结束时返回

function getposts_func($atts) {

    $htm = '';

    $atts = shortcode_atts( array('category' => '',), $atts, 'get_posts' );
    $cat=$atts['category'];
    global $post;
    $args = array(
                'category'      => $cat,
                'numberposts'   => -1,
                'order'         => 'ASC',
                );
    $myposts = get_posts( $args );
    foreach( $myposts as $post ) : 
        setup_postdata($post);
        $post_permalink = get_permalink();
        $post_title = get_the_title();

        $htm .= '<li><a href="' . $post_permalink . '">' . $post_title . '</a></li>';

    endforeach;
    wp_reset_postdata();

    return $htm;
} 

add_shortcode( 'get_posts', 'getposts_func' );

如果实际上你希望它是一个返回的数组(我不是WP专家)

function getposts_func($atts) {

    $htm = array();

    $atts = shortcode_atts( array('category' => '',), $atts, 'get_posts' );
    $cat=$atts['category'];
    global $post;
    $args = array(
                'category'      => $cat,
                'numberposts'   => -1,
                'order'         => 'ASC',
                );
    $myposts = get_posts( $args );
    foreach( $myposts as $post ) : 
        setup_postdata($post);
        $post_permalink = get_permalink();
        $post_title = get_the_title();

        $htm[] = '<li><a href="' . $post_permalink . '">' . $post_title . '</a></li>';

    endforeach;
    wp_reset_postdata();

    return $htm;
} 

add_shortcode( 'get_posts', 'getposts_func' );