global-post变量总是在single-product.php中被覆盖

时间:2016-07-20 21:23:32

标签: php wordpress woocommerce

我想在标签页的单页上显示3个相关产品。我已经制作了这样的自定义自定义查询:

$postid = array(1,2,3);

$args = array(
  'post_type'         => 'product',
  'post_status'       =>  'publish',
  'post__in'          =>  array_column($postid, 'ID'),

);

$loop = new WP_QUERY($args);

此查询也可以工作并执行3次。但在循环中我调用另一个模板

wc_get_template_part( 'content', 'single-product-meta-side' );

在content-single-product-meta-side.php中,$ post变量被重置并仅返回原始查询post变量。

global $product, $post;
echo $post_id = get_the_ID(); // old/original post id returns

我在while循环之后尝试setup_postdata( $post );但没有任何反应。

任何想法都会出错。 另一个问题是如何设置全局$ product变量。

1 个答案:

答案 0 :(得分:1)

函数wc_get_template_part使用load_template。最后,要求模板文件包含一些可用的全局变量,以确保WordPress环境在函数中可用:

global $posts, $post, $wp_did_header, $wp_query, $wp_rewrite, $wpdb, $wp_version, $wp, $id, $comment, $user_ID;

因此,您要么使用上述全局变量,要么找到该文件并将其包含在您的范围内:

include(locate_template('single-product-meta-side.php'));//Don't forget to set the right path for your file.

我希望这会对你有所帮助。