我是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。
参数名称如何影响函数?有人能解释为什么会这样吗?
最合适的回答,由SO网友:Jacob Peattie 整理而成
如中所述the documentation 对于setup_postdata()
:
setup_postdata()
做not 分配全局$post
所以你自己做这件事很重要。如果不这样做,则会导致将上述任何全局变量与$post
全局,因为它们将指单独的实体。
那么原因是$my_post
您使用的函数依赖于名为$post
, 但它还没有定义。setup_postdata()
不设置此变量。您需要通过定义$post
, 应该是global $post
.