Php 如何覆盖模式';可用性';在商业中?

Php 如何覆盖模式';可用性';在商业中?,php,wordpress,function,woocommerce,schema,Php,Wordpress,Function,Woocommerce,Schema,我需要覆盖模式“可用性”选项,以预订购延期订单上的Woocommerce(3.9.2)产品。目前WC为它们生成“InStock”。哪些过滤器以及如何应用?我当前的代码(如下)破坏了Wordpress,似乎过滤器出错了: function tt_WC_change_schema_availability( $availability ) { if ( is_product() && ! is_admin() ) { $stock_status = $pro

我需要覆盖模式“可用性”选项,以预订购延期订单上的Woocommerce(3.9.2)产品。目前WC为它们生成“InStock”。哪些过滤器以及如何应用?我当前的代码(如下)破坏了Wordpress,似乎过滤器出错了:

function tt_WC_change_schema_availability( $availability ) {
    if ( is_product() && ! is_admin() ) {

        $stock_status = $product->is_in_stock();
        $output = 'OutOfStock'; // default, out of stock

        if ($stock_status){
            $output = 'InStock';
            $qty = $product->get_stock_quantity();
            if  ( ! ($qty > 0) ) {
                $output = 'PreOrder';
            }
        }
        return 'http://schema.org/' . $output;
    }
}

add_filter( 'woocommerce_structured_data_product_offer', 'tt_WC_change_schema_availability' );

看起来很接近,但是$product对象也必须包含在函数中。这是可以传递到此筛选器的第二个参数。此外,还需要返回发送到
woocommerce\u structured\u data\u product\u offer
过滤器的部分数组。这将是
$availability['availability']
,因为您将变量作为
$availability

功能tt_WC_change_schema_可用性($availability,$product){
if(is_product()&&!is_admin()){
$stock_status=$product->get_stock_status();
$output='OutOfStock';//默认值,缺货
if($stock\U状态){
$output='InStock';
$qty=$product->获取库存数量();
如果(!($qty>0)){
$output='PreOrder';
}
}
返回$availability['availability']='http://schema.org/美元产出;
}
}
添加过滤器('woocommerce\u structured\u data\u product\u offer'、'tt\u WC\u change\u schema\u availability',10,2);

非常感谢@Howard E!我发现$stock_status返回一个字符串,还添加了额外的检查,检查产品库存是否已管理。以下是工作函数:

function tt_WC_change_schema_availability( $markup_offer, $product ) {
    if ( is_product() && ! is_admin() ) {
        $managed = $product->managing_stock();

        if ($managed === TRUE) {
            $stock_status = $product->get_stock_status();
            if ($stock_status == 'instock'){                
                $output = 'InStock';
            }
            if ($stock_status == 'onbackorder') {
                $output = 'PreOrder';
            }
            if ($stock_status == 'outofstock') {
                $output = 'OutOfStock';
            }
        }
        $markup_offer['availability'] = 'http://schema.org/' . $output;
    }
    return $markup_offer;
}

add_filter( 'woocommerce_structured_data_product_offer', 'tt_WC_change_schema_availability' , 10, 2 );