Setup_postdata()中的局部变量名

时间:2020-02-18 作者:Mohit

我是wordpress新手,我在一个模板文件中使用setup\\u postdata()方法,该模板文件通过shortcode函数调用。我没有在我的函数中使用全局$post。

if ( ! function_exists( \'new_shortcode\' ) ) :
    function featured_posts_shortcode( $atts, $content = \'\' ) {
        ob_start();
        get_template_part("page-contents/section","abc");
        return ob_get_clean();   
    }
    add_shortcode( \'new\', \'new_shortcode\' );
endif;
模板文件代码部分:

不工作:

$my_post = get_post($my_post_id);
setup_postdata($my_post);        // Does not work.
工作:

$post = get_post($my_post_id);
setup_postdata($post);        // Works.
当我使用setup\\u postdata($my\\u post)时,它不会将全局post设置为my post,但当我使用setup\\u postdata($post)时,它会将全局post设置为my post。

参数名称如何影响函数?有人能解释为什么会这样吗?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

如中所述the documentation 对于setup_postdata():

setup_postdata()not 分配全局$post 所以你自己做这件事很重要。如果不这样做,则会导致将上述任何全局变量与$post 全局,因为它们将指单独的实体。

那么原因是$my_post 您使用的函数依赖于名为$post, 但它还没有定义。setup_postdata() 不设置此变量。您需要通过定义$post, 应该是global $post.