<?php foreach ( $upsells as $upsell ) : ?>
<?php
$post_object = get_post( $upsell->get_id() );
setup_postdata( $GLOBALS['post'] =& $post_object );
?>
<?php endforeach; ?>
<?php woocommerce_product_loop_end(); ?>
Это дает
ERROR Overriding WordPress globals is prohibited on line setup_postdata( $GLOBALS['post'] =& $post_object );
Я работаю над темой для thmeforest.net
для отображения продукта upshell в плагине woocommerce
Это неправильная практика. Вы должны использовать wp_query для этого продукта.
add_action('woocommerce_after_single_product_summary', 'show_cross_sell_in_single_product', 30);
function show_cross_sell_in_single_product(){
$crosssells = get_post_meta( get_the_ID(), '_crosssell_ids',true);
$args = array(
'post_type' => 'product',
'posts_per_page' => -1,
'post__in' => $crosssells
);
$products = new WP_Query( $args );
if ( $products->have_posts() ) :
echo '<div class = "cross-sells"><h2>Cross-Sells Products</h2>';
woocommerce_product_loop_start();
while ( $products->have_posts() ) : $products->the_post();
wc_get_template_part( 'content', 'product' );
endwhile; // end of the loop.
woocommerce_product_loop_end();
echo '</div>';
endif;
wp_reset_query(); }
Объяснение кода: все дополнительные продукты добавляются с помощью этой функции, когда вы просто пишете do_action (), это просто.
вы поняли, о чем я?
спасибо, но коды объяснили насчет setup_postdata ($ GLOBALS ['post'] = & $ post_object); и передал сообщение как глобальную переменную.
Зачем нужна эта строчка:
setup_postdata( $GLOBALS['post'] =& $post_object );