你的问题是get_page_by_path()
返回一个WP_Post
对象,不是WC_Product
对象你需要一个WC_Product
对象,因为该对象包含product_type
所有物你可以得到WC_Product
来自WP_Post
通过wc_get_product()
功能:
$post_obj = get_page_by_path( $slug, OBJECT, \'product\' ); // this code help me to get product detials by slug
$product_obj = wc_get_product( $page_obj );
但是,您的代码仍然无法工作,因为
woocommerce_simple_add_to_cart
钩子依赖于全球
$product
变量,它不会设置为您在此处查询的产品。你可以自己设置,但我不确定它的副作用。在我看来,最安全的方法是使用
[add_to_cart]
短代码:
if(!empty($tracks[ $k ][ \'buy_link_a\' ])){
list($hash, $slug) = explode("product/",$tracks[ $k ][ \'buy_link_a\' ]);
$post_obj = get_page_by_path( $slug, OBJECT, \'product\' ); // this code help me to get product detials by slug
$product_obj = wc_get_product( $page_obj );
echo do_shortcode( \'[add_to_cart id="\' . $product_obj->get_id() . \'" show_price="false"]\' );
}
如果您只需要URL,请使用
[add_to_cart_url]
短代码:
echo do_shortcode( \'[add_to_cart_url id="\' . $product_obj->get_id() . \'"]\' );
还请注意,我使用了
get_type()
方法而不是
product_type
属性,因为该属性已被弃用以支持该方法。