对于特定的“$PRODUCT->IS_STOCK_STATUS”,将“WooCommerce_is_Purchasable”设置为FALSE

时间:2019-09-26 作者:Tristan Glaw

我创建了一个插件,为我的woocommerce产品添加了一个新的库存状态。我将其用作参考(复制并粘贴到我的插件php文件中):Create WooCommerce custom stock option that is non-purchasable.

一切正常,但我还想禁用以下产品的“添加到购物车”按钮

is_stock_status( \'callavailability\' )
我想我可以用

add_filter( \'woocommerce_is_purchasable\', false );
但我不知道如何只为那些特定的产品触发过滤器。

以下是我目前掌握的代码:

add_filter( \'woocommerce_is_purchasable\', \'command\' );

function command( $value )
{
    if ( $product->is_stock_status( \'callavailability\' ) )
        $value[] = \'false\';

    return $value;
}
当我把这个放在我孩子的主题函数中时。php通过ftp,所有包含产品(单一、存档等)的页面都是空白的,只有可见的网站页眉,没有页脚。所有非woocommerce页面工作正常,甚至通过快捷码显示的产品也会显示在非woocommerce页面上。

我不知道我做错了什么,我已经在google上尝试了50多个示例和指南,我总是收到空白页面或http 500错误。

一旦我弄明白了这一点,我还需要添加一个带有自定义文本和样式(颜色)的徽章(类似于销售徽章),我认为这并不太困难,因为当产品设置为缺货时,它们已经有一个“缺货”徽章。

谢谢

1 个回复
SO网友:Andrej B.

您使用的是不存在的变量$product

尝试以下操作:

add_filter( \'woocommerce_is_purchasable\', \'command\', 10, 2 );

function command( $value, $product ) {
    if ( $product->is_stock_status( \'callavailability\' ) )
        $value[] = \'false\';

    return $value;
}
第一个参数实际上是一个布尔值。

相关推荐

使用Apply_Filters()函数清理和数据验证

我们是否应该清理和验证apply_filters() 像下面的例子?absint( apply_filters( \'slug_excerpt_length\', 35 ) );wp_kses_post( apply_filters( \'slug_excerpt_more\', \'&hellip;\' ) );esc_url( apply_filters( \'slug_login_url\', home_url( \'/\' ) ) );</我在问这个问题,因为我以前从未见过这个问题。