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