'arrow-icon-details', 'label' => __( 'Arrow icon', 'twentytwentyfour' ), /* * Styles for the custom Arrow icon style of the Details block */ 'inline_style' => ' .is-style-arrow-icon-details { padding-top: var(--wp--preset--spacing--10); padding-bottom: var(--wp--preset--spacing--10); } .is-style-arrow-icon-details summary { list-style-type: "\2193\00a0\00a0\00a0"; } .is-style-arrow-icon-details[open]>summary { list-style-type: "\2192\00a0\00a0\00a0"; }', ) ); register_block_style( 'core/post-terms', array( 'name' => 'pill', 'label' => __( 'Pill', 'twentytwentyfour' ), /* * Styles variation for post terms * https://github.com/WordPress/gutenberg/issues/24956 */ 'inline_style' => ' .is-style-pill a, .is-style-pill span:not([class], [data-rich-text-placeholder]) { display: inline-block; background-color: var(--wp--preset--color--base-2); padding: 0.375rem 0.875rem; border-radius: var(--wp--preset--spacing--20); } .is-style-pill a:hover { background-color: var(--wp--preset--color--contrast-3); }', ) ); register_block_style( 'core/list', array( 'name' => 'checkmark-list', 'label' => __( 'Checkmark', 'twentytwentyfour' ), /* * Styles for the custom checkmark list block style * https://github.com/WordPress/gutenberg/issues/51480 */ 'inline_style' => ' ul.is-style-checkmark-list { list-style-type: "\2713"; } ul.is-style-checkmark-list li { padding-inline-start: 1ch; }', ) ); register_block_style( 'core/navigation-link', array( 'name' => 'arrow-link', 'label' => __( 'With arrow', 'twentytwentyfour' ), /* * Styles for the custom arrow nav link block style */ 'inline_style' => ' .is-style-arrow-link .wp-block-navigation-item__label:after { content: "\2197"; padding-inline-start: 0.25rem; vertical-align: middle; text-decoration: none; display: inline-block; }', ) ); register_block_style( 'core/heading', array( 'name' => 'asterisk', 'label' => __( 'With asterisk', 'twentytwentyfour' ), 'inline_style' => " .is-style-asterisk:before { content: ''; width: 1.5rem; height: 3rem; background: var(--wp--preset--color--contrast-2, currentColor); clip-path: path('M11.93.684v8.039l5.633-5.633 1.216 1.23-5.66 5.66h8.04v1.737H13.2l5.701 5.701-1.23 1.23-5.742-5.742V21h-1.737v-8.094l-5.77 5.77-1.23-1.217 5.743-5.742H.842V9.98h8.162l-5.701-5.7 1.23-1.231 5.66 5.66V.684h1.737Z'); display: block; } /* Hide the asterisk if the heading has no content, to avoid using empty headings to display the asterisk only, which is an A11Y issue */ .is-style-asterisk:empty:before { content: none; } .is-style-asterisk:-moz-only-whitespace:before { content: none; } .is-style-asterisk.has-text-align-center:before { margin: 0 auto; } .is-style-asterisk.has-text-align-right:before { margin-left: auto; } .rtl .is-style-asterisk.has-text-align-left:before { margin-right: auto; }", ) ); } endif; add_action( 'init', 'twentytwentyfour_block_styles' ); /** * Enqueue block stylesheets. */ if ( ! function_exists( 'twentytwentyfour_block_stylesheets' ) ) : /** * Enqueues custom block stylesheets. * * @since Twenty Twenty-Four 1.0 * @return void */ function twentytwentyfour_block_stylesheets() { /** * The wp_enqueue_block_style() function allows us to enqueue a stylesheet * for a specific block. These will only get loaded when the block is rendered * (both in the editor and on the front end), improving performance * and reducing the amount of data requested by visitors. * * See https://make.wordpress.org/core/2021/12/15/using-multiple-stylesheets-per-block/ for more info. */ wp_enqueue_block_style( 'core/button', array( 'handle' => 'twentytwentyfour-button-style-outline', 'src' => get_parent_theme_file_uri( 'assets/css/button-outline.css' ), 'ver' => wp_get_theme( get_template() )->get( 'Version' ), 'path' => get_parent_theme_file_path( 'assets/css/button-outline.css' ), ) ); } endif; add_action( 'init', 'twentytwentyfour_block_stylesheets' ); /** * Register pattern categories. */ if ( ! function_exists( 'twentytwentyfour_pattern_categories' ) ) : /** * Registers pattern categories. * * @since Twenty Twenty-Four 1.0 * @return void */ function twentytwentyfour_pattern_categories() { register_block_pattern_category( 'twentytwentyfour_page', array( 'label' => _x( 'Pages', 'Block pattern category', 'twentytwentyfour' ), 'description' => __( 'A collection of full page layouts.', 'twentytwentyfour' ), ) ); } endif; add_action( 'init', 'twentytwentyfour_pattern_categories' ); /** * Use a standalone PHP template for the page slug "test1". * * @since Twenty Twenty-Four 1.0 * * @param string $template Resolved template path. * @return string */ function twentytwentyfour_test1_template( $template ) { if ( ! is_page( 'test1' ) ) { return $template; } $custom_template = get_theme_file_path( 'page-test1.php' ); if ( file_exists( $custom_template ) ) { return $custom_template; } return $template; } add_filter( 'template_include', 'twentytwentyfour_test1_template' ); /** * Use a standalone PHP template for the page slug "faq". * * @since Twenty Twenty-Four 1.0 * * @param string $template Resolved template path. * @return string */ function twentytwentyfour_faq_template( $template ) { if ( ! is_page( 'faq' ) ) { return $template; } $custom_template = get_theme_file_path( 'page-faq.php' ); if ( file_exists( $custom_template ) ) { return $custom_template; } return $template; } add_filter( 'template_include', 'twentytwentyfour_faq_template' ); /** * Use a standalone PHP template for the page slug "contacts". * * @since Twenty Twenty-Four 1.0 * * @param string $template Resolved template path. * @return string */ function twentytwentyfour_contacts_template( $template ) { if ( ! is_page( 'contacts' ) ) { return $template; } $custom_template = get_theme_file_path( 'page-contacts.php' ); if ( file_exists( $custom_template ) ) { return $custom_template; } return $template; } add_filter( 'template_include', 'twentytwentyfour_contacts_template' ); /** * Use a standalone PHP template for the page slug "delivery". * * @since Twenty Twenty-Four 1.0 * * @param string $template Resolved template path. * @return string */ function twentytwentyfour_delivery_template( $template ) { if ( ! is_page( 'delivery' ) ) { return $template; } $custom_template = get_theme_file_path( 'page-delivery.php' ); if ( file_exists( $custom_template ) ) { return $custom_template; } return $template; } add_filter( 'template_include', 'twentytwentyfour_delivery_template' ); /** * Use a standalone PHP template for the page slug "service". * * @since Twenty Twenty-Four 1.0 * * @param string $template Resolved template path. * @return string */ function twentytwentyfour_service_template( $template ) { if ( ! is_page( 'service' ) ) { return $template; } $custom_template = get_theme_file_path( 'page-service.php' ); if ( file_exists( $custom_template ) ) { return $custom_template; } return $template; } add_filter( 'template_include', 'twentytwentyfour_service_template' ); /** * Use a lightweight custom template for the WooCommerce checkout page. * * @since Twenty Twenty-Four 1.0 * * @param string $template Resolved template path. * @return string */ function twentytwentyfour_checkout_template( $template ) { if ( ! function_exists( 'is_checkout' ) || ! is_checkout() || is_order_received_page() ) { return $template; } $custom_template = get_theme_file_path( 'page-checkout.php' ); if ( file_exists( $custom_template ) ) { return $custom_template; } return $template; } add_filter( 'template_include', 'twentytwentyfour_checkout_template', 20 ); /** * Use a lightweight custom template for the WooCommerce cart page. * * @since Twenty Twenty-Four 1.0 * * @param string $template Resolved template path. * @return string */ function twentytwentyfour_cart_template( $template ) { if ( ! function_exists( 'is_cart' ) || ! is_cart() ) { return $template; } $custom_template = get_theme_file_path( 'page-cart.php' ); if ( file_exists( $custom_template ) ) { return $custom_template; } return $template; } add_filter( 'template_include', 'twentytwentyfour_cart_template', 20 ); /** * Use a lightweight custom template for the WooCommerce shop page. * * @since Twenty Twenty-Four 1.0 * * @param string $template Resolved template path. * @return string */ function twentytwentyfour_shop_template( $template ) { if ( ! function_exists( 'is_shop' ) || ! is_shop() ) { return $template; } $custom_template = get_theme_file_path( 'page-shop.php' ); if ( file_exists( $custom_template ) ) { return $custom_template; } return $template; } add_filter( 'template_include', 'twentytwentyfour_shop_template', 20 ); /** * Enqueue standalone landing assets for the page slug "test1". * * @since Twenty Twenty-Four 1.0 * @return void */ function twentytwentyfour_test1_assets() { $use_test1_assets = is_page( array( 'test1', 'faq', 'contacts', 'delivery', 'service' ) ); if ( ! $use_test1_assets ) { return; } $css_file = ABSPATH . 'index3.css'; $js_file = ABSPATH . 'index3.js'; if ( $use_test1_assets ) { wp_dequeue_style( 'global-styles' ); wp_dequeue_style( 'wp-block-library' ); wp_dequeue_style( 'wp-block-library-theme' ); wp_dequeue_style( 'classic-theme-styles' ); } wp_enqueue_style( 'twentytwentyfour-test1-fonts', 'https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;700;800&display=swap', array(), null ); if ( file_exists( $css_file ) ) { wp_enqueue_style( 'twentytwentyfour-test1-style', home_url( '/index3.css' ), array( 'twentytwentyfour-test1-fonts' ), (string) filemtime( $css_file ) ); } if ( is_page( 'test1' ) && file_exists( $js_file ) ) { wp_enqueue_script( 'twentytwentyfour-test1-script', home_url( '/index3.js' ), array(), (string) filemtime( $js_file ), true ); if ( class_exists( 'WooCommerce' ) ) { wp_localize_script( 'twentytwentyfour-test1-script', 'test1WooCommerce', array( 'addToCartUrl' => WC_AJAX::get_endpoint( 'add_to_cart' ), 'cartUrl' => wc_get_cart_url(), 'checkoutUrl' => wc_get_checkout_url(), ) ); } } if ( is_page( 'faq' ) ) { $faq_js_file = get_theme_file_path( 'assets/js/test1-faq.js' ); if ( file_exists( $faq_js_file ) ) { wp_enqueue_script( 'twentytwentyfour-test1-faq-script', get_theme_file_uri( 'assets/js/test1-faq.js' ), array(), (string) filemtime( $faq_js_file ), true ); } } if ( is_page( 'contacts' ) ) { $contacts_js_file = get_theme_file_path( 'assets/js/test1-contacts.js' ); if ( file_exists( $contacts_js_file ) ) { wp_enqueue_script( 'twentytwentyfour-test1-contacts-script', get_theme_file_uri( 'assets/js/test1-contacts.js' ), array(), (string) filemtime( $contacts_js_file ), true ); } } } add_action( 'wp_enqueue_scripts', 'twentytwentyfour_test1_assets', 100 ); /** * Enqueue shared test1 header/footer styles for cart and checkout. * * @since Twenty Twenty-Four 1.0 * @return void */ function twentytwentyfour_test1_shared_shell_assets() { if ( ! ( ( function_exists( 'is_checkout' ) && is_checkout() && ! is_order_received_page() ) || ( function_exists( 'is_cart' ) && is_cart() ) || ( function_exists( 'is_shop' ) && is_shop() ) || is_page( 'faq' ) || is_page( 'contacts' ) || is_page( 'delivery' ) || is_page( 'service' ) ) ) { return; } $shared_shell_css = get_theme_file_path( 'assets/css/test1-shared-shell.css' ); wp_enqueue_style( 'twentytwentyfour-test1-fonts', 'https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;700;800&display=swap', array(), null ); if ( file_exists( $shared_shell_css ) ) { wp_enqueue_style( 'twentytwentyfour-test1-shared-shell-style', get_theme_file_uri( 'assets/css/test1-shared-shell.css' ), array( 'twentytwentyfour-test1-fonts' ), (string) filemtime( $shared_shell_css ) ); } } add_action( 'wp_enqueue_scripts', 'twentytwentyfour_test1_shared_shell_assets', 110 ); /** * Free shipping threshold for custom notices. * * @return float */ function twentytwentyfour_water_delivery_free_shipping_threshold() { return (float) apply_filters( 'twentytwentyfour_water_delivery_free_shipping_threshold', 1000 ); } /** * Bottle deposit fee when no exchange is selected. * * @return float */ function twentytwentyfour_water_delivery_deposit_fee() { return (float) apply_filters( 'twentytwentyfour_water_delivery_deposit_fee', 250 ); } /** * Check whether a dedicated SEO plugin is active. * * @return bool */ function twentytwentyfour_has_seo_plugin() { return defined( 'WPSEO_VERSION' ) || defined( 'RANK_MATH_VERSION' ); } /** * Get long-form SEO text for cart and checkout pages. * * @param string $context Page context. * @return string */ function twentytwentyfour_water_delivery_seo_copy( $context ) { if ( 'checkout' === $context ) { return 'Оформление заказа воды в Севастополе должно быть быстрым и понятным, особенно когда вода нужна домой или в офис без лишних звонков и долгих подтверждений. На этой странице вы можете за несколько минут завершить заказ воды 19 литров, питьевой и минеральной воды, указать удобный адрес и выбрать подходящий способ оплаты. Мы доставляем воду в Гагаринский район, Ленинский район, Нахимовский район, Балаклаву и другие части города, поэтому оформить доставку питьевой воды можно в удобном для вас формате. Если вам нужна вода на дом в Севастополе для семьи, кухни или кулера, просто проверьте состав заказа и заполните контакты. Для компаний и коммерческих объектов доступен заказ воды в офис с подтверждением интервала и возможностью безналичной оплаты. Такой сценарий помогает быстро заказать воду 19 литров с доставкой, избежать ошибок в адресе и сразу передать нам всю информацию по подъезду, этажу и таре. Мы стараемся сделать оформление заказа удобным, чтобы доставка воды Севастополь воспринималась как простой сервис на каждый день, а не как долгий процесс с лишними шагами.'; } return 'Корзина на сайте доставки воды в Севастополе помогает быстро проверить состав заказа перед оформлением и убедиться, что в нем уже есть все нужные позиции: вода 19 литров, питьевая вода для кухни, минеральная вода для гостей, офиса или коммерческого помещения. Здесь можно изменить количество бутылей, удалить лишние товары и сразу увидеть итоговую сумму, стоимость доставки и дополнительные условия заказа. Такой формат особенно удобен для клиентов, которым нужна вода на дом в Севастополе без долгого оформления и повторных уточнений по телефону. Если вы заказываете доставку питьевой воды регулярно, корзина позволяет быстро собрать привычный набор и сразу перейти к следующему шагу. Мы доставляем заказы по Гагаринскому району, Ленинскому району, Нахимовскому району, Балаклаве и другим частям города, поэтому заказать воду 19 литров или дополнительные товары для кулера можно в одном месте. Перед оформлением вы можете проверить объем воды, количество бутылей и итоговую стоимость, а затем перейти на страницу подтверждения заказа. Такой подход делает доставку воды Севастополь удобной и понятной как для частных клиентов, так и для офисов, кафе, салонов и небольших компаний.'; } /** * Output progress indicator for cart and checkout pages. * * @param string $current Current step. * @return void */ function twentytwentyfour_water_delivery_progress_markup( $current ) { $steps = array( 'cart' => __( 'Корзина', 'twentytwentyfour' ), 'checkout' => __( 'Оформление', 'twentytwentyfour' ), 'done' => __( 'Готово', 'twentytwentyfour' ), ); ?>
$label ) : ?>
'readonly' ); $fields['billing']['billing_city']['label'] = __( 'Город', 'twentytwentyfour' ); $fields['billing']['billing_city']['class'] = array( 'form-row-first' ); } if ( isset( $fields['billing']['billing_first_name'] ) ) { $fields['billing']['billing_first_name']['priority'] = 10; $fields['billing']['billing_first_name']['label'] = __( 'Имя', 'twentytwentyfour' ); } if ( isset( $fields['billing']['billing_phone'] ) ) { $fields['billing']['billing_phone']['priority'] = 20; $fields['billing']['billing_phone']['required'] = true; $fields['billing']['billing_phone']['label'] = __( 'Телефон', 'twentytwentyfour' ); $fields['billing']['billing_phone']['placeholder'] = '+7 (___) ___-__-__'; } if ( isset( $fields['billing']['billing_address_1'] ) ) { $fields['billing']['billing_address_1']['priority'] = 50; $fields['billing']['billing_address_1']['label'] = __( 'Улица', 'twentytwentyfour' ); $fields['billing']['billing_address_1']['placeholder'] = __( 'Улица и район доставки', 'twentytwentyfour' ); $fields['billing']['billing_address_1']['class'] = array( 'form-row-wide', 'has-address-autofill' ); } $fields['billing']['billing_house'] = array( 'label' => __( 'Дом', 'twentytwentyfour' ), 'required' => true, 'class' => array( 'form-row-first' ), 'priority' => 55, ); $fields['billing']['billing_flat'] = array( 'label' => __( 'Квартира', 'twentytwentyfour' ), 'required' => false, 'class' => array( 'form-row-last' ), 'priority' => 56, ); $fields['billing']['billing_entrance_floor'] = array( 'label' => __( 'Подъезд / этаж', 'twentytwentyfour' ), 'required' => false, 'class' => array( 'form-row-wide' ), 'priority' => 57, ); $fields['order']['tw_delivery_day'] = array( 'type' => 'select', 'label' => __( 'Когда доставить', 'twentytwentyfour' ), 'required' => true, 'class' => array( 'form-row-first' ), 'priority' => 15, 'options' => array( '' => __( 'Выберите день', 'twentytwentyfour' ), 'today' => __( 'Сегодня', 'twentytwentyfour' ), 'tomorrow' => __( 'Завтра', 'twentytwentyfour' ), ), ); $fields['order']['tw_delivery_time'] = array( 'type' => 'select', 'label' => __( 'Интервал времени', 'twentytwentyfour' ), 'required' => true, 'class' => array( 'form-row-last' ), 'priority' => 16, 'options' => array( '' => __( 'Выберите интервал', 'twentytwentyfour' ), '08-12' => '08:00-12:00', '12-16' => '12:00-16:00', '16-20' => '16:00-20:00', ), ); $fields['order']['tw_bottle_exchange'] = array( 'type' => 'select', 'label' => __( 'Возврат тары', 'twentytwentyfour' ), 'required' => true, 'class' => array( 'form-row-wide' ), 'priority' => 17, 'options' => array( 'exchange' => __( 'Есть обмен пустой тары', 'twentytwentyfour' ), 'no_exchange' => __( 'Нужна новая тара, добавить залог', 'twentytwentyfour' ), ), ); if ( isset( $fields['order']['order_comments'] ) ) { $fields['order']['order_comments']['priority'] = 20; $fields['order']['order_comments']['label'] = __( 'Комментарий', 'twentytwentyfour' ); $fields['order']['order_comments']['placeholder'] = __( 'Комментарий к доставке, ориентир, код домофона', 'twentytwentyfour' ); } return $fields; } /** * Store bottle exchange choice in session during checkout refresh. * * @param string $posted_data Serialized checkout payload. * @return void */ function twentytwentyfour_water_delivery_update_order_review( $posted_data ) { parse_str( $posted_data, $data ); if ( isset( $data['tw_bottle_exchange'] ) && WC()->session ) { WC()->session->set( 'tw_bottle_exchange', sanitize_text_field( wp_unslash( $data['tw_bottle_exchange'] ) ) ); } } /** * Add deposit fee if there is no bottle exchange. * * @param WC_Cart $cart Cart object. * @return void */ function twentytwentyfour_water_delivery_add_fees( $cart ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) { return; } if ( ! $cart instanceof WC_Cart ) { return; } $bottle_exchange = WC()->session ? WC()->session->get( 'tw_bottle_exchange', 'exchange' ) : 'exchange'; if ( 'no_exchange' === $bottle_exchange ) { $cart->add_fee( __( 'Залог за тару', 'twentytwentyfour' ), twentytwentyfour_water_delivery_deposit_fee(), false ); } } /** * Validate custom checkout data. * * @return void */ function twentytwentyfour_water_delivery_validate_checkout() { if ( empty( $_POST['billing_phone'] ) ) { return; } $phone_digits = preg_replace( '/\D+/', '', wp_unslash( $_POST['billing_phone'] ) ); if ( strlen( $phone_digits ) < 11 ) { wc_add_notice( __( 'Укажите корректный телефон для подтверждения заказа.', 'twentytwentyfour' ), 'error' ); } } /** * Save custom checkout fields to order meta. * * @param int $order_id Order ID. * @return void */ function twentytwentyfour_water_delivery_save_checkout_meta( $order_id ) { $fields = array( 'billing_house', 'billing_flat', 'billing_entrance_floor', 'tw_delivery_day', 'tw_delivery_time', 'tw_bottle_exchange', ); foreach ( $fields as $field ) { if ( isset( $_POST[ $field ] ) ) { update_post_meta( $order_id, '_' . $field, sanitize_text_field( wp_unslash( $_POST[ $field ] ) ) ); } } } /** * Add cart helper panel before the cart table. * * @return void */ function twentytwentyfour_water_delivery_before_cart() { $threshold = twentytwentyfour_water_delivery_free_shipping_threshold(); $subtotal = WC()->cart ? (float) WC()->cart->get_subtotal() : 0; $remaining = max( 0, $threshold - $subtotal ); $account_url = function_exists( 'wc_get_account_endpoint_url' ) ? wc_get_account_endpoint_url( 'orders' ) : ''; ?>

0 ) : ?>
' . $value . ''; } /** * Add a sticky summary note before cart totals. * * @return void */ function twentytwentyfour_water_delivery_before_cart_totals() { ?>

cart || ! WC()->cart->is_empty() ) { return; } ?>
'https://schema.org', '@graph' => array( array( '@type' => 'LocalBusiness', 'name' => get_bloginfo( 'name' ), 'telephone' => '+7 (978) 123-45-67', 'address' => array( '@type' => 'PostalAddress', 'addressLocality' => 'Севастополь', 'addressCountry' => 'RU', ), 'areaServed' => array( 'Гагаринский район', 'Ленинский район', 'Нахимовский район', 'Балаклава' ), ), array( '@type' => 'Product', 'name' => 'Вода 19 литров с доставкой', 'description' => 'Питьевая вода с доставкой на дом и в офис по Севастополю.', 'offers' => array( '@type' => 'Offer', 'priceCurrency' => 'RUB', 'availability' => 'https://schema.org/InStock', ), 'aggregateRating' => array( '@type' => 'AggregateRating', 'ratingValue' => '4.9', 'reviewCount' => '87', ), ), ), ); ?>