How to call get_post()?

时间:2016-11-05 作者:Alex

我在我的网站上有一个侧边栏,我想在那里显示当前帖子的元信息,比如上次修改的日期、作者等等。

因此,我编写了以下函数:

function showPostMetaInfo()
{   
    global $post;

    setup_postdata($post);

    $mypost = get_post();

            $string.= "<table id=\'meta-info\'>"
                    . "<thead>"
                    . "<tr>"
                    . "<th> Meta Type </th>"
                    . "<th> Value"
                    . "</tr>"
                    . "</thead>"
                    . "<tbody>"
                    . "<tr>"
                    . "<td> Title </td>"
                    . "<td>".get_the_title()."</td>"
                    . "</tr>"
                    . "<tr>"
                    . "<td> Author </td>"
                    . "<td>".get_the_author()."</td>"
                    . "</tr>"
                    . "<tr>"
                    . "<td> Published </td>"
                    . "<td>".get_the_date()."</td>"
                    . "</tr>"
                    . "<tr>"
                    . "<td> Last Modified </td>"
                    . "<td>".get_the_modified_date()."</td>"
                    . "</tr>"
                    . "<tr>"
                    . "<td> Categories </td>"
                    . "<td>".listCategories()."</td>"
                    . "</tr>"
                    . "<tr>"
                    . "<td> Tags </td>"
                    . "<td>".listTags()."</td>"
                    . "</tr>"
                    . "</tbody>"
                    . "</table>";

    return $string;
}
然而,var_dump($mypost) 返回NULL。

据我所知,这是因为我打电话get_post() 在信息准备就绪之前。

我现在的问题是我不知道WHERE and HOW and AFTER WHICH HOOK 调用add_action(...) 正确地负责侧栏的功能是createPageInfo( $type ) 哪里$type 可以是单页、页或空。如何传递该论点$type 要正确添加\\u操作?

我可能有一个概念上的误解,但以下是我如何构建当前网站的大致情况:

指数php:

...
get_header();
createMainPanel();
get_sidebar();
get_footer();
...
侧栏。php:

 ...
 if( is_single() || is_page() )
    {
        if( is_single() ){createPageInfo( "single" );}
        elseif ( is_page() ){createPageInfo( "page" );}
    }

    else
    {
        createPageInfo ( null );
    }
 ...

EDIT:

根据Rarst的建议,我将showPostMetaInfo()更改为:

function showPostMetaInfo()
{   
    $mypost = get_post();

    $id = $mypost->ID;
    $title = $mypost->post_title;
    $title2 = get_the_title();
    $date = $mypost->post_date;

    echo $id;
    echo $title;
    echo $title2;
    echo $date;

    $string .= "<p>".$title."</p>";
    return $string;
}
结果是$id, $title, $title2, 和$date 正确回显,但函数返回"<p></p>" 只有

现在我真的很困惑。。。

1 个回复
SO网友:Rarst

现在还不清楚你为什么要和全球打交道,在正常情况下你不需要这样做。

开箱即用,查看帖子页面时,get_post() 将返回当前的post对象甚至不考虑循环,因为它是在到达模板之前作为主查询的一部分设置的。

出于这个目的,post和page之间的差异也很小。

如果get_post() 单独调用返回空的/意外的结果,那么可能的问题是,在达到这一点之前,有什么东西弄乱了全局上下文。

相关推荐

自定义发布类型的POST_ROW_ACTIONS

我正在使用this 在WordPress Admin中具有重复post函数的代码。但是,当我为自定义帖子类型添加过滤器时,如下所示:add_filter( \'directory_row_actions\', \'rd_duplicate_post_link\', 10, 2 ); (自定义帖子类型的注册名称为directory) - 它不会将其添加到条目标题下的操作行中。当我为帖子或页面执行此操作时,如下所示:add_filter( \'post_row_actions\', \'rd_dup