Чтобы была возможность отображения текста предзаказа на кнопке «Купить» и в описании товара в корзине, без выбора даты предзаказа в плагине «Pre-Orders for WooCommerce», вам понадобится выполнить несколько шагов:
## Перед началом, убедитесь, что у вас создан полный бэкап сайта
- Перейти в настройки плагина — pre-orders-for-woocommerce/src/Shop.php.
- Измените код функций changeButtonTextForVariableProducts() и changeButtonText().
//pre-orders-for-woocommerce/src/Shop.php public function changeButtonTextForVariableProducts( $data, $product, $variation ) { if ( get_post_meta( $variation->get_id(), '_is_pre_order', true ) == 'yes' || get_post_meta( $variation->get_id(), '_stock_status', true ) == 'onbackorder') { $data['is_pre_order'] = true; } return $data; } public function changeButtonText( $text ) { global $post, $product; if ( $product !== null ) { if ( 'yes' == get_post_meta( $post->ID, '_is_pre_order', true ) || get_post_meta( $post->ID, '_stock_status', true ) == 'onbackorder') { return get_option( 'wc_preorders_button_text', 'Pre Order Now!' ); } } return $text; }
- В файле pre-orders-for-woocommerce/src/Notices.php изменить функцию addPreorderNotice.
//pre-orders-for-woocommerce/src/Notices.php public function addPreorderNotice( $cartItem ) { $product = $cartItem['data']; if ( get_post_meta( $product->get_id(), '_pre_order_date', true ) !== null && get_post_meta( $product->get_id(), '_pre_order_date', true ) != '') { $availableFrom = new \DateTime( get_post_meta( $product->get_id(), '_pre_order_date', true ) ); $now = new \DateTime(); $diff = $now->diff( $availableFrom )->format( '%a' ); if ( $availableFrom > $now && $diff > 0 ) { $notice = ' ' . get_option( 'wc_preorders_cart_product_text', 'Note: this item will be available for shipping in {days_left} days' ) . ''; echo apply_filters( 'preorder_avaiable_date_text_cart', str_replace( '{days_left}', $diff, $notice ), $diff ); } } else if (get_post_meta( $product->get_id(), '_stock_status', true ) == 'onbackorder') { echo 'Предзаказ'; } }