$storefront_version, /** * Initialize all the things. */ 'main' => require 'inc/class-storefront.php', 'customizer' => require 'inc/customizer/class-storefront-customizer.php', ); require 'inc/storefront-functions.php'; require 'inc/storefront-template-hooks.php'; require 'inc/storefront-template-functions.php'; require 'inc/wordpress-shims.php'; if ( class_exists( 'Jetpack' ) ) { $storefront->jetpack = require 'inc/jetpack/class-storefront-jetpack.php'; } if ( storefront_is_woocommerce_activated() ) { $storefront->woocommerce = require 'inc/woocommerce/class-storefront-woocommerce.php'; $storefront->woocommerce_customizer = require 'inc/woocommerce/class-storefront-woocommerce-customizer.php'; require 'inc/woocommerce/class-storefront-woocommerce-adjacent-products.php'; require 'inc/woocommerce/storefront-woocommerce-template-hooks.php'; require 'inc/woocommerce/storefront-woocommerce-template-functions.php'; require 'inc/woocommerce/storefront-woocommerce-functions.php'; } if ( is_admin() ) { $storefront->admin = require 'inc/admin/class-storefront-admin.php'; require 'inc/admin/class-storefront-plugin-install.php'; } /** * NUX * Only load if wp version is 4.7.3 or above because of this issue; * https://core.trac.wordpress.org/ticket/39610?cversion=1&cnum_hist=2 */ if ( version_compare( get_bloginfo( 'version' ), '4.7.3', '>=' ) && ( is_admin() || is_customize_preview() ) ) { require 'inc/nux/class-storefront-nux-admin.php'; require 'inc/nux/class-storefront-nux-guided-tour.php'; if ( defined( 'WC_VERSION' ) && version_compare( WC_VERSION, '3.0.0', '>=' ) ) { require 'inc/nux/class-storefront-nux-starter-content.php'; } } /** * Note: Do not add any custom code here. Please use a custom plugin so that your customizations aren't lost during updates. * https://github.com/woocommerce/theme-customisations */ include('inc/shortcodes.php'); include('functions/catalog.php'); include('functions/common.php'); // Scripts add_action( 'wp_enqueue_scripts', 'theme_name_scripts' ); // add_action('wp_print_styles', 'theme_name_scripts'); // можно использовать этот хук он более поздний function theme_name_scripts() { wp_enqueue_style( 'normalize.css', get_template_directory_uri().'/module/normalize/normalize.css' ); wp_enqueue_style( 'owl.carousel.min.css',get_template_directory_uri().'/module/owl-carousel/owl.carousel.min.css' ); wp_enqueue_style( 'jquery.fancybox.min.css', get_template_directory_uri().'/module/fancybox/jquery.fancybox.min.css' ); wp_enqueue_style( 'jquery.formstyler.css', get_template_directory_uri().'/module/formstyler/jquery.formstyler.css' ); wp_enqueue_style( 'jquery.formstyler.theme.css', get_template_directory_uri().'/module/formstyler/jquery.formstyler.theme.css' ); wp_enqueue_style( 'style.css', get_template_directory_uri().'/css/style.css' ); wp_enqueue_style( 'custom-style-css', get_template_directory_uri().'/css/custom.css' ); /*wp_enqueue_script( 'jquery.min.js', get_template_directory_uri() . '/module/jquery/jquery.min.js' ); wp_enqueue_script( 'jquery.fancybox.min.js', get_template_directory_uri() . '/module/fancybox/jquery.fancybox.min.js' ); wp_enqueue_script( 'jquery.sticky.js', get_template_directory_uri() . '/module/sticky/jquery.sticky.js' ); wp_enqueue_script( 'jquery.formstyler.min.js', get_template_directory_uri() . '/module/formstyler/jquery.formstyler.min.js' ); wp_enqueue_script( 'owl.carousel.min.js', get_template_directory_uri() . '/module/owl-carousel/owl.carousel.min.js' ); wp_enqueue_script( 'jquery.inputmask.min.js', get_template_directory_uri() . '/module/maskinput/jquery.inputmask.min.js' ); wp_enqueue_script( 'jquery.matchHeight-min.js', get_template_directory_uri() . '/module/match-height/jquery.matchHeight-min.js' ); wp_enqueue_script( 'bundle.min.js', get_template_directory_uri() . '/js/bundle.min.js' );*/ } function remove_image_zoom_support() { remove_theme_support( 'wc-product-gallery-zoom' ); } add_action( 'wp', 'remove_image_zoom_support', 100 ); add_theme_support( 'menus' ); add_action( 'init', 'register_my_menus' ); function register_my_menus() { register_nav_menus( array( //'primary-menu' => __( 'Primary Menu' ), //'secondary-menu' => __( 'Secondary Menu' ) 'bottom-1' => __( 'Bottom 1' ), 'bottom-2' => __( 'Bottom 2' ), 'bottom-3' => __( 'Bottom 3' ), ) ); } function cf_widgets_init() { register_sidebar( array( 'name' => __( 'Banner WD', 'storefront' ), 'id' => 'banner-wd', 'description' => __( 'Banner WD', 'storefront' ), 'before_widget' => '', 'after_widget' => '', 'before_title' => '', ) ); } add_action( 'widgets_init', 'cf_widgets_init' ); add_action('init', 'save_review_form'); function save_review_form() { if( $_POST['action'] == 'save_review' ) { /*if(recaptcha_validate($_POST['token']) == false) { http_response_code(400); echo "Spam check fails. Please contact us."; exit; }*/ if( $_POST['review'] != '' ) { $product_info = get_post( $_POST['product_id'] ); $title = "Review #".rand(0, 100000); $post_data = array( 'post_title' => wp_strip_all_tags( $title ), 'post_content' => $_POST['review'], 'post_status' => 'draft', 'post_type' => 'product_reviews', 'post_author' => 1, ); // Вставляем запись в базу данных $post_id = wp_insert_post( $post_data ); update_post_meta( $post_id, 'product_id', $_POST['product_id'] ); update_post_meta( $post_id, 'user_id', get_current_user_id() ); update_post_meta( $post_id, 'rating', $_POST['rating'] ); update_post_meta( $post_id, 'product_name', $product_info->post_title ); } echo "
"; print_r( $_POST ); echo ""; exit(); } /*if( $_POST['action'] == 'add2basket' ) { $product_id = $_POST['product_id']; $variation_id = $_POST['variation_id']; global $woocommerce; // if it does exist then remove it $items = $woocommerce->cart->get_cart(); foreach($items as $cart_item_key => $values) { $item_id = $values['data']->get_id(); if( $item_id == $variation_id ) { $exist_cart_id = $cart_item_key; } } //echo $exist_cart_id; if( $exist_cart_id ) { $WC_Cart = new WC_Cart(); $WC_Cart->remove_cart_item( $exist_cart_id ); } else { // Let's add $woocommerce->cart->add_to_cart( $product_id, $quantity = 1, $variation_id ); } echo count( $woocommerce->cart->get_cart() ); }*/ if( $_POST['action'] == 'remove2basket' ) { $item_id = $_POST['id']; $WC_Cart = new WC_Cart(); $WC_Cart->remove_cart_item( $item_id ); //exit(); } } function remove_key($key) { parse_str($_SERVER['QUERY_STRING'], $vars); $url = strtok($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], '?') . http_build_query(array_diff_key($vars,array($key=>""))); return $url; } add_action('init', 'remove_basket_item_func'); function remove_basket_item_func() { $cart_key = $_GET['remove_cart_item']; if( $cart_key ) { global $woocommerce; $new_url = GetLangLink( '/checkout/' ); $WC_Cart = new WC_Cart(); $WC_Cart->remove_cart_item( $cart_key ); //removeCartItemDB( $cart_key ); //die(); wp_redirect( $new_url ); exit(); } } add_action('wp_ajax_add2basket', 'add2basket_callback'); add_action('wp_ajax_nopriv_add2basket', 'add2basket_callback'); function add2basket_callback() { $product_id = $_POST['product_id']; $variation_id = $_POST['variation_id']; $is_bundle = $_POST['is_bundle']; global $woocommerce; if( !$is_bundle ) { $product_id = OriginalPostWpml( $product_id ); $woocommerce->cart->add_to_cart( $product_id, $quantity = 1, $variation_id ); } else { // if it does exist then remove it $items = $woocommerce->cart->get_cart(); foreach($items as $cart_item_key => $values) { $item_id = $values['data']->get_id(); if( $item_id == $variation_id ) { $exist_cart_id = $cart_item_key; break; } } echo $exist_cart_id; if( $exist_cart_id ) { WC()->cart->remove_cart_item( $exist_cart_id ); } else { // Let's add $woocommerce->cart->add_to_cart( $product_id, $quantity = 1, $variation_id ); } } wp_die(); } function recaptcha_validate($token) { if (!isset($token)) { return false; } $siteverify = 'https://www.google.com/recaptcha/api/siteverify'; $secret = '6LcnFMcZAAAAAKUkSU738REHfDK31x0UFWYexvoM'; $response = file_get_contents($siteverify . '?secret=' . $secret . '&response=' . $token); $response = json_decode($response, true); return $response['success']; } add_action('wp_ajax_update_cart_item', 'update_cart_item_callback'); add_action('wp_ajax_nopriv_update_cart_item', 'update_cart_item_callback'); function update_cart_item_callback() { /*echo "
"; print_r( $_POST ); echo "";*/ global $woocommerce; $items = $_POST['items']; foreach( $items as $item ) { if( !$item['quantity'] ) { continue; } $woocommerce->cart->set_quantity( $item['product_cart_id'], $item['quantity']); } woocommerce_order_review(); wp_die(); } add_action('wp_ajax_remove_cart_item', 'remove_cart_item_callback'); add_action('wp_ajax_nopriv_remove_cart_item', 'remove_cart_item_callback'); function remove_cart_item_callback() { $WC_Cart = new WC_Cart(); $WC_Cart->remove_cart_item( $_REQUEST['product_cart_id'] ); echo $_REQUEST['product_cart_id']; wp_die(); } add_filter( 'wc_stripe_payment_icons', 'change_my_icons' ); function change_my_icons( $icons ) { // var_dump( $icons ); to show all possible icons to change. $icons['visa'] = '
"; print_r( $variation ); echo "";*/ woocommerce_wp_text_input( array( 'id' => '_supplier_code[' . $variation->ID . ']', // id поля 'label' => 'Supplier code', // Надпись над полем //'description' => 'Укажи срок изготовления, просто цифры в днях',// Описание поля 'desc_tip' => 'false', // Всплывающая подсказка 'placeholder' => 'Supplier code', // Надпись внутри поля 'type' => 'text', // Тип поля /*'custom_attributes' => array( // Произвольные аттрибуты 'step' => 'any', // Шаг значений 'min' => '0', // Минимальное значение ),*/ 'value' => get_post_meta( $variation->ID, '_supplier_code', true ), ) ); } add_action( 'woocommerce_save_product_variation','save_supplier_code_barcode_variations',10,2); function save_supplier_code_barcode_variations($post_id) { $value = $_POST['_supplier_code'][$post_id]; if(!empty($value)) update_post_meta($post_id,'_supplier_code',sanitize_text_field($value)); } add_action('wp_ajax_get_product_gallery', 'get_product_gallery'); add_action('wp_ajax_nopriv_get_product_gallery', 'get_product_gallery'); function get_product_gallery() { //print_r($_POST); $product_id = $_POST['product_id']; $variation_id = $_POST['variation_id']; // Solving WPML issue $parent_variation_id = get_post_meta( $variation_id, '_wcml_duplicate_of_variation', true ); if( $parent_variation_id ) { $variation_id = $parent_variation_id; } $gallery = get_post_meta( $variation_id, 'rtwpvg_images' )[0]; if( count($gallery) == 0 ) { $meta = get_post_meta( $product_id ); $gallery = explode( ',', $meta['_product_image_gallery'][0] ); } $tags = showProductTags( $product_id ); $text .= ' '; echo $text; wp_die(); } add_action('wp_ajax_get_checkout_mini', 'get_checkout_mini_func'); add_action('wp_ajax_nopriv_get_checkout_mini', 'get_checkout_mini_func'); function get_checkout_mini_func() { $locale = $_POST['locale']; $locale = str_replace( '-', '_', $locale ); switch_to_locale( $locale ); //switch_to_locale('de-DE'); //switch_to_locale('en_US'); //define('WPLANG', $locale); woocommerce_order_review(); wp_die(); } add_action('wp_ajax_get_device_page', 'get_device_page_func'); add_action('wp_ajax_nopriv_get_device_page', 'get_device_page_func'); function get_device_page_func() { $device = $_POST['device']; $info = GetDeviceByTitle( $device ); $data = array( "url" => get_permalink( $info['ID'] ), ); echo json_encode( $data ); wp_die(); echo "
"; print_r( $info ); echo ""; } add_action( 'wp', 'force_404' ); function force_404() { global $wp_query; $pages = array( "/en/shop/", "/shop/", "/en/my-account/", "/mein-account/", //"/en/cart/", //"/einkaufswagen/", "/en/collections/", "/sammlung/", "/en/category/uncategorized/", "/category/unkategorisiert/", "/cart-2/", ); if( in_array( $_SERVER['REQUEST_URI'], $pages ) ){ status_header( 404 ); nocache_headers(); include( get_query_template( '404' ) ); die(); } } add_action( 'init', 'my_deregister_heartbeat', 1 ); function my_deregister_heartbeat() { global $pagenow; if ( 'post.php' != $pagenow && 'post-new.php' != $pagenow ) wp_deregister_script('heartbeat'); } add_action('woocommerce_order_status_changed', 'status_notification'); function status_notification($order_id, $checkout=null) { global $woocommerce; $order = new WC_Order( $order_id ); if($order->has_status('shipping')) { $order->add_order_note('Shipping email notification to client is sent.', 1); } if($order->has_status('on-hold')) { $email_notifications = WC()->mailer()->get_emails(); $email_notifications['WC_Email_Customer_On_Hold_Order']->trigger( $order_id ); } } add_action( 'woocommerce_email_before_order_table', 'action_function_name_9642', 10, 4 ); function action_function_name_9642( $order, $sent_to_admin, $plain_text, $email ){ $dhl_track_number = get_field( 'dhl_track_number', $order->id ); if ($dhl_track_number != '') { $lang = get_post_meta( $order->id, 'wpml_language', true ); if ($lang == 'de') $ts = 'VERFOLGEN SIE IHRE SENDUNG'; else $ts = 'TRACK YOUR SHIPMENT'; $url = 'https://www.dhl.com/de-en/home/tracking/tracking-express.html?tracking-id=' . $dhl_track_number; if( $lang == 'de' ) { $url = 'https://www.dhl.com/de-de/home/tracking/tracking-express.html?tracking-id=' . $dhl_track_number; } if ($lang == 'de') echo '
DHL TRACKING #: '.$dhl_track_number.'
'.$ts.''; else echo 'DHL TRACKING #: '.$dhl_track_number.'
'.$ts.''; } else echo "Error shipping details."; } add_action( 'woocommerce_created_customer', function($user_id){ $count = wc_update_new_customer_past_orders( $user_id ); update_user_meta( $user_id, '_wc_linked_order_count', $count ); }); function custom_registration_redirect() { $redirection_url = get_permalink( wc_get_page_id( 'myaccount' ) ); return $redirection_url; } add_action('woocommerce_registration_redirect', 'custom_registration_redirect', 2); add_filter( 'wc_stripe_show_payment_request_on_checkout', '__return_true' ); /* function redirect_non_admin_user(){ if (!is_user_logged_in() && $_SERVER['PHP_SELF'] != '/wp-login.php') { wp_redirect('https://blackrock-mobile.com/home.html'); exit; } } add_action( 'init', 'redirect_non_admin_user' ); */ remove_action('wp_head', 'wp_generator'); /* function the_breadcrumb(){ // получаем номер текущей страницы $pageNum = ( get_query_var('paged') ) ? get_query_var('paged') : 1; $separator = ' » '; // » // если главная страница сайта if( is_front_page() ){ if( $pageNum > 1 ) { echo 'Главная' . $separator . $pageNum . '-я страница'; } else { echo 'Вы находитесь на главной странице'; } } else { // не главная echo 'Главная' . $separator; if( is_single() ){ // записи the_category(', '); echo $separator; the_title(); } elseif ( is_page() ){ // страницы WordPress the_title(); } elseif ( is_category() ) { single_cat_title(); } elseif( is_tag() ) { single_tag_title(); } elseif ( is_day() ) { // архивы (по дням) echo '' . get_the_time('Y') . '' . $separator; echo '' . get_the_time('F') . '' . $separator; echo get_the_time('d'); } elseif ( is_month() ) { // архивы (по месяцам) echo '' . get_the_time('Y') . '' . $separator; echo get_the_time('F'); } elseif ( is_year() ) { // архивы (по годам) echo get_the_time('Y'); } elseif ( is_author() ) { // архивы по авторам global $author; $userdata = get_userdata($author); echo 'Опубликовал(а) ' . $userdata->display_name; } elseif ( is_404() ) { // если страницы не существует echo 'Ошибка 404'; } if ( $pageNum > 1 ) { // номер текущей страницы echo ' (' . $pageNum . '-я страница)'; } } } */ /* Should have solved the "addind product to cart" issue but no need now, and not tested thoroughly */ /* if(remove_action('woocommerce_add_to_cart_validation', 'woocommerce_add_cart_item_data_custom',5)){ function my_woocommerce_add_cart_item_data_custom( $product_id, $quantity, $variation_id = '', $variation = array(), $cart_item_data = array() ) { $product_data = wc_get_product( $product_id ); $cart_item_data = (array) apply_filters( 'woocommerce_add_cart_item_data', $cart_item_data, $product_id, $variation_id ); $cart_id = WC()->cart->generate_cart_id( $product_id, $variation_id, $variation, $cart_item_data ); $cart_item_key = WC()->cart->find_product_in_cart( $cart_id ); return false; } add_filter( 'woocommerce_add_to_cart_validation', 'my_woocommerce_add_cart_item_data_custom', 5, 6); } */ add_filter( 'auto_update_plugin', '__return_false' ); function woocommerce_new_pass_redirect( $user ) { wp_redirect( wp_lostpassword_url().'?msg=1' ); exit; } add_action( 'woocommerce_customer_reset_password', 'woocommerce_new_pass_redirect' ); function woocommerce_new_pass_redirect2( $user ) { wp_redirect( wp_lostpassword_url().'?msg=1' ); exit; } add_action( 'user_registration_reset_password', 'woocommerce_new_pass_redirect2' ); add_filter( 'wc_order_statuses', 'wc_renaming_order_status' ); function wc_renaming_order_status( $order_statuses ) { foreach ( $order_statuses as $key => $status ) { if ( 'wc-completed' === $key && get_locale() != 'en_US') $order_statuses['wc-completed'] = _x( 'Abgeschlossen', 'Order status', 'woocommerce' ); } return $order_statuses; } /** * Change the checkout city field to a dropdown field. */ function city_dropdown_field( $fields ) { $cities_list = json_decode(file_get_contents(get_template_directory_uri() . '/de_cities_list.json'), true); if (ICL_LANGUAGE_CODE == 'en') { $cities_list = json_decode(file_get_contents(get_template_directory_uri() . '/en_cities_list.json'), true); } $cities_array = array(); foreach ($cities_list as $city) { array_push($cities_array, $city); } if ($cities_array) { $city_args = wp_parse_args(array( 'input_class' => array( 'city_select', ) ), $fields['shipping']['shipping_city']); $fields['shipping']['shipping_city'] = $city_args; $fields['billing']['billing_city'] = $city_args; // Also change for billing field wp_enqueue_script('jquery-ui-core'); wp_enqueue_script('jquery-ui-autocomplete'); wp_enqueue_style('style-ui', 'https://code.jquery.com/ui/1.13.0/themes/base/jquery-ui.css'); wc_enqueue_js(" jQuery( function() { var availableTags = " . json_encode($cities_array) . "; jQuery( '.city_select' ).autocomplete({ source: availableTags });}) "); } return $fields; } add_filter( 'woocommerce_checkout_fields', 'city_dropdown_field' ); /** * Filter to add custom Brand for WooCommerce Products. */ add_filter('rank_math/snippet/rich_snippet_product_entity', function( $entity ) { $entity['brand'] = 'Black rock'; return $entity; } ); /* function update_product_sale_price() { // in theory this will grab all variations FIRST $args = array('post_type' => array('product', 'product_variation'), 'posts_per_page' => -1, 'sortby' => 'post_type', 'order' => 'desc'); $all_products = new WP_Query($args); //$date_on_sale_from = date('Y-m-d 00:00:00', strtotime('2021-11-10')); //$date_on_sale_to = date('Y-m-d 23:59:59', strtotime('2021-11-11')); if ($all_products->have_posts()) : while ($all_products->have_posts()) : $all_products->the_post(); $product_id = get_the_ID(); $product = wc_get_product($product_id); if ($product->get_sale_price()) { update_post_meta($product_id, '_sale_price_dates_to', ''); update_post_meta($product_id, '_sale_price_dates_from', ''); update_post_meta( $product_id, '_sale_price', '' ); } endwhile; endif; wp_reset_postdata(); } add_action('init', 'update_product_sale_price'); */ //add shipping address field validation add_action( 'wp_footer', 'misha_checkout_js' ); function misha_checkout_js(){ // we need it only on our checkout page if( !is_checkout() ) return; $length_message = get_option('wc_settings_tab_demo_shipping_address_' . ICL_LANGUAGE_CODE . '_length'); $validation_message = get_option('wc_settings_tab_demo_shipping_address_' . ICL_LANGUAGE_CODE); ?> array( 'name' => __( 'Custom Validation Messages', 'woocommerce-settings-tab-demo' ), 'type' => 'title', 'desc' => '', 'id' => 'wc_settings_tab_demo_section_title' ), 'shipping_address_en' => array( 'name' => __( 'Shipping address field validation message (EN)', 'woocommerce-settings-tab-demo' ), 'type' => 'text', 'id' => 'wc_settings_tab_demo_shipping_address_en' ), 'shipping_address_de' => array( 'name' => __( 'Shipping address field validation message (DE)', 'woocommerce-settings-tab-demo' ), 'type' => 'text', 'id' => 'wc_settings_tab_demo_shipping_address_de' ), 'shipping_address_en_length' => array( 'name' => __( 'Shipping address field length validation message (EN)', 'woocommerce-settings-tab-demo' ), 'type' => 'text', 'id' => 'wc_settings_tab_demo_shipping_address_en_length' ), 'shipping_address_de_length' => array( 'name' => __( 'Shipping address field length validation message (DE)', 'woocommerce-settings-tab-demo' ), 'type' => 'text', 'id' => 'wc_settings_tab_demo_shipping_address_de_length' ), 'section_end' => array( 'type' => 'sectionend', 'id' => 'wc_settings_tab_demo_section_end' ) ); return apply_filters( 'wc_settings_tab_demo_settings', $settings ); } } WC_Settings_Tab_Demo::init();