wordpress短代码在仪表板中呈现内容

时间:2017-08-17 10:36:35

标签: php wordpress wordpress-theming

我使用简单的wordpress短代码

function my_recent_post()
{
 echo 'hello';
}
add_shortcode( 'recent', 'my_recent_post' );

使用短代码[recent]及其工作正常并在首页中可见, 但问题是,它还在仪表板中打印 hello 。 下面是截图,任何人都可以帮忙。

enter image description here

更新

我实际上是在尝试展示帖子,所以你可以帮我解决这个问题,因为它会在仪表板中呈现帖子列表,就像“你好”一样。我试过了:

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

2 个答案:

答案 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>";

我不确定你为什么要特意改变它来做到这一点 - 它对它的工作原理完全没有区别,只是让它更难以阅读和识别任何错误: - )