在Wordpress Shortcode中执行查询

时间:2013-08-14 19:21:36

标签: php wordpress function shortcode

我有一个查询,我想在短代码函数中包装,所以我可以在帖子或页面中调用它。它应该拉4个帖子如下。 trim_title()是另一个自定义函数,它将标题限制为特定字符数。我已经验证了查询(带循环)在我将其直接插入到php模板时有效,但我希望能够将它作为短代码包含在编辑器中。

这就是我现在所拥有的:

function homepage_newsfeed($atts) {
        $args = array( 'post_type' => 'post', 'posts_per_page' => 4 );
        $wp_query = new WP_Query($args);
        echo '<a href="';
        the_permalink();
        echo '">';
        trim_title();
        echo '</a>'; 
        echo '<div class="newspostdate">';
        the_time('F j, Y');
        echo '</div>';
        endif;
        endwhile;
}

add_shortcode ( 'newsfeed', 'homepage_newsfeed'); 

这是在循环内。我也尝试在函数中包含循环:

function homepage_newsfeed($atts) {
        $args = array( 'post_type' => 'post', 'posts_per_page' => 4 );
        $wp_query = new WP_Query($args);
        if ( have_posts() ) : while ( have_posts() ) : the_post();
        echo '<a href="';
        the_permalink();
        echo '">';
        trim_title();
        echo '</a>'; 
        echo '<div class="newspostdate">';
        the_time('F j, Y');
        echo '</div>';
        endwhile;
        endif;
}

add_shortcode ( 'newsfeed', 'homepage_newsfeed'); 

我也尝试过使用return而不是echo:

function homepage_newsfeed($atts) {
        $args = array( 'post_type' => 'post', 'posts_per_page' => 4 );
        $wp_query = new WP_Query($args);
        if ( have_posts() ) : while ( have_posts() ) : the_post();
        return '<a href="';
        the_permalink();
        return '">';
        trim_title();
        return '</a>'; 
        return '<div class="newspostdate">';
        the_time('F j, Y');
        return '</div>';
        endwhile;
        endif;
}

add_shortcode ( 'newsfeed', 'homepage_newsfeed'); 

这些只是我和其他许多人的一些尝试。我已经做了很多搜索,看看如何在短代码中执行php,但我的大多数搜索结果都找到了使用do_shortcode(引用的文章来使用PHP中的短代码。我感谢任何指导我正确方向的帮助。

1 个答案:

答案 0 :(得分:1)

return返回您需要的值,但也会退出该函数。 同样在WP中,你有一个get_辅助函数的前缀版本,它也会返回一个值而不是直接回显它。

所以你可能想要尝试的是:

function myfunction(){
    $string = 'lets'; 
    $string .= ' build some string ';
    $string .= get_the_permalink();
    return $string;
}

请参阅http://php.net/manual/en/language.operators.string.php