我使用简单的wordpress短代码
function my_recent_post()
{
echo 'hello';
}
add_shortcode( 'recent', 'my_recent_post' );
使用短代码[recent]及其工作正常并在首页中可见, 但问题是,它还在仪表板中打印 hello 。 下面是截图,任何人都可以帮忙。
更新
我实际上是在尝试展示帖子,所以你可以帮我解决这个问题,因为它会在仪表板中呈现帖子列表,就像“你好”一样。我试过了:
function lorem_function() {
global $post;
$args = array( 'posts_per_page' => 10, 'order'=> 'ASC', 'orderby' => 'title' );
$postslist = get_posts( $args );
foreach ( $postslist as $post ) :
setup_postdata( $post ); ?>
<div>
<?php the_date(); ?> <br /> <?php the_title(); ?> <?php the_excerpt(); ?>
</div>
<?php endforeach;
wp_reset_postdata();
return;
}
add_shortcode('lorem', 'lorem_function');
答案 0 :(得分:2)
您的函数必须返回一个值,而不是输出
function my_recent_post()
{
return 'hello';
}
add_shortcode( 'recent', 'my_recent_post' );
答案 1 :(得分:2)
根据您对我的评论&amp; Nikita Dudarev,您需要做的是创建一个变量来保存所有帖子信息,然后将其返回。使用您发布的功能作为示例:
function lorem_function() {
global $post;
$args = array( 'posts_per_page' => 10, 'order'=> 'ASC', 'orderby' => 'title' );
$postslist = get_posts( $args );
// create a variable to hold the post information
$html ="";
foreach ( $postslist as $post ) :
setup_postdata( $post );
$backgroundstyle = "";
// get the featured image and set it as the background
if ( has_post_thumbnail() ) { // make sure the post has a featured image
$imageurl = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'medium' ); // you can change "medium" to "thumbnail or full depending on the size you need
// add the css for the background image. You can include background-size etc ad required
$backgroundstyle = "background-image: url('".$imageurl[0]."');";
}
// add the information to the variable
$html .= '<div style="'.$backgroundstyle.'">';
$html .= get_the_date();
$html .= "<br />";
$html .= get_the_title();
$html .= get_the_excerpt();
$html .= "</div>";
endforeach;
wp_reset_postdata();
return $html;
}
add_shortcode('lorem', 'lorem_function');
请注意,the_date()
,the_title()
和the_excerpt()
都会显示相关信息(就像echo
)。
相反,您必须使用get_the_date()
,get_the_title()
和get_the_excerpt()
- 这些信息会获得相同的信息,但不会直接显示,而是将其作为变量返回,然后您可以将其存储在你要返回的html字符串。
更新:
由于您不想因任何原因在每一行使用变量名称,您可以这样做:
$html .= "<div>".get_the_date()."<br />".get_the_title().get_the_excerpt()."</div>";
我不确定你为什么要特意改变它来做到这一点 - 它对它的工作原理完全没有区别,只是让它更难以阅读和识别任何错误: - )