Woocommerce - 如何判断产品帖子是否有变化

Ste*_*hen 19 woocommerce

我正在尝试编辑简短描述模板,使其在变量(单个)产品页面上与在简单产品上不同.该页面中的代码如下:

global $post;
if ( ! $post->post_excerpt )
    return;
?>
<div itemprop="description">
    <?php echo apply_filters( 'woocommerce_short_description', $post->post_excerpt ) ?>
</div>
Run Code Online (Sandbox Code Playgroud)

我想在if语句中添加一些类似的代码

如果帖子有变化,请不要显示简短描述,如果简单产品DO显示

但我在代码中找不到任何方法来区分常规的简单产品帖子和可变的产品帖子(有变化).通过Woo网站(http://docs.woothemes.com/wc-apidocs/)查看API文档,我发现没有那种.

Dan*_*jel 52

使用$product->is_type()功能检查产品类型.要检查产品是否为可变产品,请使用:

global $product;

// $product->is_type( $type ) checks the product type, string/array $type ( 'simple', 'grouped', 'variable', 'external' ), returns boolean

if ( $product->is_type( 'variable' ) ) {}
Run Code Online (Sandbox Code Playgroud)

还有一个$product->get_type()函数可以将产品的内部类型作为字符串返回.

  • 还有另一种名为“variation”的产品类型,它是可变产品的单个子代,如果您想在循环中访问或编辑可变产品的每个变体的字段,它很有用。 (2认同)

Ste*_*hen 27

经过多次心痛,我找到了以下两种解决方案:

在产品循环中,您可以使用:

 if( $product->has_child() ) { 
Run Code Online (Sandbox Code Playgroud)

但由于某些原因,在单个产品页面的简短描述中,我不得不使用这个:

global $post;
$children = get_pages('child_of='.$post->ID);
if( count( $children ) !== 0 ) {
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助那些在我身边挣扎的人......

  • 实际上,我想出了如何使 has_child 标签也能在单个产品页面上工作,我需要添加一个特殊的全局变量:`global $post, $product, $woocommerce_loop; if( $product-&gt;has_child() ) { ` (2认同)

Ser*_*ons 10

变量产品始终基于WC_Product_Variable类。例如,WooCommerce 订阅就遵循这种方法。

因此,检查可以是:

is_a( $product, 'WC_Product_Variable' )
Run Code Online (Sandbox Code Playgroud)

这确保了无论是否有儿童,产品的类型都是可变的。而且速度很快。

  • 是的,请注意,get_type 根据特定的派生实现返回不同的类型,例如 WC_Product_Variable_Subscription::get_type() 返回“variable-subscription”,而 WC_Product_Variable::get_type() 返回“variable”。因此,为了检查变异性,我们需要比较所有可能的变量类型,这在一般检查中可能不那么方便和通用。 (2认同)