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 []缓冲区但是失败了。
任何帮助人员?
答案 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' );