@ -1,5 +1,327 @@
<?php
add_filter( 'woocommerce_cart_needs_shipping_address', '__return_false' );
add_filter( 'woocommerce_shipping_calculator_enable_postcode', '__return_false' );
add_filter( 'woocommerce_shipping_calculator_enable_city', '__return_false' );
add_filter( 'woocommerce_shipping_calculator_enable_state', '__return_false' );
add_filter( 'woocommerce_shipping_packages', 'display_all_shipping_methods' );
function display_all_shipping_methods( $packages ) {
foreach ( $packages as & $package ) {
// Убираем ограничения по адресу
$package['destination']['country'] = '';
$package['destination']['state'] = '';
$package['destination']['postcode'] = '';
$package['destination']['city'] = '';
}
return $packages;
}
add_filter( 'woocommerce_checkout_fields', 'customize_billing_fields' );
function customize_billing_fields( $fields ) {
// Удаляем все стандартные поля
unset( $fields['billing']['billing_company'] );
unset( $fields['billing']['billing_country'] );
unset( $fields['billing']['billing_address_1'] );
unset( $fields['billing']['billing_address_2'] );
unset( $fields['billing']['billing_city'] );
unset( $fields['billing']['billing_state'] );
unset( $fields['billing']['billing_postcode'] );
// Перенастраиваем только нужные поля
$fields['billing']['billing_first_name'] = array(
'type' => 'text',
'label' => __('Имя', 'woocommerce'),
'placeholder' => __('Ваше имя', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'priority' => 10,
);
$fields['billing']['billing_last_name'] = array(
'type' => 'text',
'label' => __('Фамилия', 'woocommerce'),
'placeholder' => __('Ваша фамилия', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'priority' => 10,
);
$fields['billing']['billing_email'] = array(
'type' => 'email',
'label' => __('E-mail', 'woocommerce'),
'placeholder' => __('Начните вводить ваш email', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'priority' => 20,
);
$fields['billing']['billing_phone'] = array(
'type' => 'tel',
'label' => __('Телефон', 'woocommerce'),
'placeholder' => __('+7 ___ ___ ____', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'priority' => 30,
);
$fields['billing']['billing_city'] = array(
'type' => 'text',
'label' => __('Населенный пункт', 'woocommerce'),
'placeholder' => __('Ваш город', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'priority' => 40,
);
$fields['billing']['billing_address_1'] = array(
'type' => 'text',
'label' => __('Адрес', 'woocommerce'),
'placeholder' => __('Адрес', 'woocommerce'),
'required' => false,
'class' => array('visually-hidden'),
'priority' => 40,
);
$fields['billing']['billing_address_2'] = array(
'type' => 'text',
'label' => __('Адрес 2', 'woocommerce'),
'placeholder' => __('Адрес 2', 'woocommerce'),
'required' => false,
'class' => array('visually-hidden'),
'priority' => 40,
);
return $fields;
}
// remove_action( 'woocommerce_review_order_before_payment', 'woocommerce_review_order_shipping' );
add_action( 'init', function() {
update_option( 'woocommerce_enable_coupons', 'yes' ); // Включение купонов
} );
add_filter( 'woocommerce_available_payment_gateways', 'set_default_payment_gateway' );
function set_default_payment_gateway( $available_gateways ) {
if ( is_cart() || is_checkout() ) {
// Устанавливаем способ оплаты по умолчанию
$default_payment_gateway = 'tbank'; // ID способа оплаты, например 'cod' для "наличными при доставке"
// Проверяем, доступен ли этот способ оплаты
if ( isset( $available_gateways[ $default_payment_gateway ] ) ) {
foreach ( $available_gateways as $gateway_id => $gateway ) {
// Оставляем только выбранный способ оплаты
if ( $gateway_id !== $default_payment_gateway ) {
unset( $available_gateways[ $gateway_id ] );
}
}
}
}
return $available_gateways;
}
add_filter( 'woocommerce_checkout_terms_and_conditions_checkbox_enabled', '__return_false' );
add_filter( 'woocommerce_checkout_terms_is_required', '__return_false' );
remove_action( 'woocommerce_checkout_before_terms_and_conditions', 'wc_checkout_privacy_policy_text', 20 );
remove_action( 'woocommerce_checkout_terms_and_conditions', 'wc_terms_and_conditions_page_content', 30 );
remove_action( 'woocommerce_checkout_after_terms_and_conditions', 'wc_privacy_policy_text', 20 );
add_action( 'woocommerce_checkout_process', 'remove_terms_validation' );
function remove_terms_validation() {
remove_action( 'woocommerce_checkout_process', 'woocommerce_checkout_terms_and_conditions' );
}
add_filter( 'woocommerce_order_button_html', 'custom_checkout_button_classes' );
function custom_checkout_button_classes( $button ) {
// Заменяем стандартные классы
$button = '< div class = "order-your-calculation__submit" >
< button type = "submit" class = "button alt button--gradient button--high button--100-perc" name = "woocommerce_checkout_place_order" id = "place_order" value = "Оплатить" data-value = "Оплатить" > < span > Оплатить< / span > < / button >
< / div > ';
return $button;
}
add_filter( 'woocommerce_checkout_fields', 'customize_checkout_registration_fields' );
function customize_checkout_registration_fields( $fields ) {
// Убираем поле ввода пароля
unset( $fields['account']['account_password'] );
return $fields;
}
// Автоматическая генерация пароля
add_filter( 'woocommerce_checkout_posted_data', 'generate_password_for_registration' );
function generate_password_for_registration( $data ) {
$billing_first_name = isset( $_POST['billing_first_name'] ) ? sanitize_text_field( $_POST['billing_first_name'] ) : '';
$billing_last_name = isset( $_POST['billing_last_name'] ) ? sanitize_text_field( $_POST['billing_last_name'] ) : '';
$billing_address_1 = isset( $_POST['billing_address_1'] ) ? sanitize_text_field( $_POST['billing_address_1'] ) : '';
$billing_address_2 = isset( $_POST['billing_address_2'] ) ? sanitize_text_field( $_POST['billing_address_2'] ) : '';
$billing_city = isset( $_POST['billing_city'] ) ? sanitize_text_field( $_POST['billing_city'] ) : '';
$billing_postcode = isset( $_POST['billing_postcode'] ) ? sanitize_text_field( $_POST['billing_postcode'] ) : '';
$billing_country = isset( $_POST['billing_country'] ) ? sanitize_text_field( $_POST['billing_country'] ) : '';
$billing_state = isset( $_POST['billing_state'] ) ? sanitize_text_field( $_POST['billing_state'] ) : '';
$billing_phone = isset( $_POST['billing_phone'] ) ? sanitize_text_field( $_POST['billing_phone'] ) : '';
$billing_email = isset( $_POST['billing_email'] ) ? sanitize_email( $_POST['billing_email'] ) : '';
$data['shipping_first_name'] = $data['billing_first_name'];
$data['shipping_last_name'] = $data['billing_last_name'];
$data['shipping_address_1'] = $data['billing_address_1'] . $data['billing_address_2'];
$data['shipping_city'] = $data['billing_city'];
$data['shipping_postcode'] = $data['billing_postcode'];
$data['shipping_country'] = $data['billing_country'];
$data['shipping_state'] = $data['billing_state'];
return $data;
}
function handle_user_registration_on_checkout() {
// Получаем данные из POST-запроса
if ( isset( $_POST['billing_email'] ) & & isset( $_POST['reg'] )) {
if ($_POST['reg'] == '1'){
$email = sanitize_email( $_POST['billing_email'] );
$pass = sanitize_text_field( $_POST['pass'] );
// Регистрация пользователя
$user_id = custom_register_user_from_post( $email, $pass );
if ( is_wp_error( $user_id ) ) {
// Если email уже существует, выводим ошибку
wc_add_notice( $user_id->get_error_message(), 'error' );
} else {
wp_set_current_user( $user_id ); // Устанавливаем текущего пользователя
wp_set_auth_cookie( $user_id ); // Устанавливаем куки для авторизации
do_action( 'wp_login', $email, $user ); // Событие входа в систему
}}
}
}
add_action( 'woocommerce_checkout_process', 'handle_user_registration_on_checkout' );
function custom_register_user_from_post( $email, $pass ) {
// Проверяем, есть ли уже пользователь с таким email
if ( email_exists( $email ) ) {
return new WP_Error( 'email_exists', 'Этот email уже зарегистрирован.' );
}
// Создаем пользователя в WordPress
$user_id = wp_create_user( $email, $pass, $email );
if ( is_wp_error( $user_id ) ) {
return $user_id; // Возвращаем ошибку, если не удалось создать пользователя
}
update_user_meta( $user_id, 'billing_email', $email ); // Устанавливаем email
update_user_meta( $user_id, 'user_email', $email ); // Устанавливаем email для входа
// Устанавливаем роль пользователя как 'customer' для WooCommerce
$user = new WP_User( $user_id );
$user->set_role( 'customer' );
return $user_id;
}
add_filter( 'woocommerce_form_field', 'add_error_containers_to_checkout_fields', 10, 4 );
function add_error_containers_to_checkout_fields( $field, $key, $args, $value ) {
if ( is_checkout() ) {
// Добавляем контейнер для ошибок под полем
$error_container = '< div id = "' . esc_attr( $key ) . '-error" class = "form-input__error" > < / div > ';
$field .= $error_container;
}
return $field;
}
add_filter( 'woocommerce_add_error', 'remove_payments_word_from_errors_multilang' );
function remove_payments_word_from_errors_multilang( $error ) {
// Слова для удаления в разных языках
$translations = array(
'Платежи', // Русский
'Billing', // Английский
);
foreach ( $translations as $word ) {
$error = str_replace( $word, '', $error );
}
return trim( $error );
}
add_action( 'woocommerce_checkout_process', 'validate_phone_field_with_li_data_id' );
function validate_phone_field_with_li_data_id() {
// Получаем значение телефона из формы
$phone = isset( $_POST['billing_phone'] ) ? sanitize_text_field( $_POST['billing_phone'] ) : '';
// Проверяем формат телефона
if ( ! preg_match( '/^\+?[0-9\s\-\(\)]+$/', $phone ) ) {
wc_add_notice( 'phone_err', 'error', 'billing_phone' );
}
}
add_action( 'woocommerce_checkout_process', 'make_address_required_for_specific_shipping' );
function make_address_required_for_specific_shipping() {
// Получаем выбранный метод доставки
$chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' );
$chosen_shipping = isset( $chosen_shipping_methods[0] ) ? $chosen_shipping_methods[0] : '';
// Проверяем, выбран ли метод доставки "official_cdek:137"
if ( $chosen_shipping === 'official_cdek:137' ) {
// Проверяем, заполнен ли адрес
if ( empty( $_POST['billing_address_1'] ) ) {
wc_add_notice('adress_error', 'error' );
}
}
}
function auto_fill_shipping_fields_from_billing( $order_id ) {
// Получаем объект заказа
$order = wc_get_order( $order_id );
if ( ! $order ) {
return; // Если заказ недоступен, выходим
}
// Получаем значения полей billing из глобального $_POST
$billing_first_name = isset( $_POST['billing_first_name'] ) ? sanitize_text_field( $_POST['billing_first_name'] ) : '';
$billing_last_name = isset( $_POST['billing_last_name'] ) ? sanitize_text_field( $_POST['billing_last_name'] ) : '';
$billing_address_1 = isset( $_POST['billing_address_1'] ) ? sanitize_text_field( $_POST['billing_address_1'] ) : '';
$billing_address_2 = isset( $_POST['billing_address_2'] ) ? sanitize_text_field( $_POST['billing_address_2'] ) : '';
$billing_city = isset( $_POST['billing_city'] ) ? sanitize_text_field( $_POST['billing_city'] ) : '';
$billing_postcode = isset( $_POST['billing_postcode'] ) ? sanitize_text_field( $_POST['billing_postcode'] ) : '';
$billing_country = isset( $_POST['billing_country'] ) ? sanitize_text_field( $_POST['billing_country'] ) : '';
$billing_state = isset( $_POST['billing_state'] ) ? sanitize_text_field( $_POST['billing_state'] ) : '';
$billing_phone = isset( $_POST['billing_phone'] ) ? sanitize_text_field( $_POST['billing_phone'] ) : '';
$billing_email = isset( $_POST['billing_email'] ) ? sanitize_email( $_POST['billing_email'] ) : '';
// Копируем данные в поля доставки
$order->set_shipping_first_name( $billing_first_name );
$order->set_shipping_last_name( $billing_last_name );
$order->set_shipping_address_1( $billing_address_1 );
$order->set_shipping_address_2( $billing_address_2 );
$order->set_shipping_city( $billing_city );
$order->set_shipping_postcode( $billing_postcode );
$order->set_shipping_country( $billing_country );
$order->set_shipping_state( $billing_state );
// Сохраняем изменения в заказе
$order->save();
}
add_filter('timber/context', function($context) {
if (function_exists('is_product') & & is_product()) {
$product_id = get_the_ID();
@ -54,3 +376,4 @@
return $context;
});