Как переопределить «доступность» схемы в Woocommerce? - PullRequest
1 голос
/ 12 марта 2020

Мне нужно переопределить опцию «Доступность» схемы, чтобы Предзаказ для продуктов Woocommerce (3.9.2) был отложен. В настоящее время W C создает для них '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' );

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Похоже, вы близко, но объект $ product также должен быть включен в вашу функцию. Это второй параметр, который можно передать этому фильтру. Кроме того, вы хотите вернуть часть массива, которая отправляется в фильтр woocommerce_structured_data_product_offer. Это будет $availability['availability'], поскольку вы передаете переменную как $availability

function tt_WC_change_schema_availability( $availability, $product ) {
    if ( is_product() && ! is_admin() ) {
        $stock_status = $product->get_stock_status();
        $output = 'OutOfStock'; // default, out of stock
        if ($stock_status){
            $output = 'InStock';
            $qty = $product->get_stock_quantity();
            if  ( ! ($qty > 0) ) {
                $output = 'PreOrder';
            }
        }
        return $availability['availability'] = 'http://schema.org/' . $output;
    }
}

add_filter( 'woocommerce_structured_data_product_offer', 'tt_WC_change_schema_availability' , 10, 2 );
0 голосов
/ 13 марта 2020

Большое спасибо @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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...