• Как в woocommerce отключить валидацию полей при самовывозе?

    vasmor
    @vasmor
    Интересуюсь
    Приведенный ниже код отключит валидацию указанных полей и скроет их при выборе способа доставки Самовывоз.

    add_filter( 'woocommerce_checkout_fields', 'hide_local_pickup_method', 999 );
    function hide_local_pickup_method( $fields_pickup ) {
    
        $shipping_method_pickup = 'local_pickup:2'; // это значение поля самовывоза необходимо уточнить через исходный код в браузере
    
    	// для полей из группы 'billing'
        // в следующей строке в массив внести идентификаторы полей, валидацию которых нужно отключить
        $hide_billing_fields_pickup = array( 'billing_city', 'billing_state', 'billing_address_1', 'billing_address_2', 'billing_address_3', 'billing_porch', 'billing_floor' );
     
        $chosen_methods_pickup = WC()->session->get( 'chosen_shipping_methods' );
        $chosen_shipping_pickup = $chosen_methods_pickup[0];
     
        foreach( $hide_billing_fields_pickup as $field_pickup ) {
            if ( $chosen_shipping_pickup == $shipping_method_pickup ) {
                $fields_pickup['billing'][$field_pickup]['required'] = false;
                $fields_pickup['billing'][$field_pickup]['class'][] = 'hide_pickup';
            }
            $fields_pickup['billing'][$field_pickup]['class'][] = 'conditional-visibility-field';
        }
    
    	// для полей из группы 'shipping'
        // в следующей строке в массив внести идентификаторы полей, валидацию которых нужно отключить
        $hide_shipping_fields_pickup = array( 'shipping_city', 'shipping_state', 'shipping_address_1', 'shipping_address_2', 'shipping_address_3', 'shipping_porch', 'shipping_floor' );
    
        foreach( $hide_shipping_fields_pickup as $field_pickup ) {
            if ( $chosen_shipping_pickup == $shipping_method_pickup ) {
                $fields_pickup['shipping'][$field_pickup]['required'] = false;
                $fields_pickup['shipping'][$field_pickup]['class'][] = 'hide_pickup';
            }
            $fields_pickup['shipping'][$field_pickup]['class'][] = 'conditional-visibility-field';
        }
    
    	// для полей из группы 'order'
        // в следующей строке в массив внести идентификаторы полей, валидацию которых нужно отключить
    	$hide_order_fields_pickup = array( 'additional_time_from', 'additional_time_to', 'additional_date' );
    	
    	foreach( $hide_order_fields_pickup as $field_pickup ) {
            if ( $chosen_shipping_pickup == $shipping_method_pickup ) {
                $fields_pickup['order'][$field_pickup]['required'] = false;
                $fields_pickup['order'][$field_pickup]['class'][] = 'hide_pickup';
            }
            $fields_pickup['order'][$field_pickup]['class'][] = 'conditional-visibility-field';
        }
    
        return $fields_pickup;
    }
    
    add_action( 'wp_footer', 'local_pickup_fields', 999 );
    function local_pickup_fields() {
        if ( is_checkout() ) {
    		?>
    		<style>
    			.hide_pickup {display: none!important;}
    		</style>
    		<script>
    			jQuery( function( $ ) {
    				if ( typeof woocommerce_params === 'undefined' ) {
    					return false;
    				}
    				$(document).on( 'change', '#shipping_method input[type="radio"]', function() {
    					// local_pickup:2 - это значение поля самовывоза необходимо уточнить через исходный код в браузере
    					$('.conditional-visibility-field').toggleClass('hide_pickup', this.value == 'local_pickup:2');
    				});
    			});
    		</script>
    		<?php
    	}
    }
    Ответ написан
    1 комментарий
  • Как убрать завершающий слеш на конце тега?

    vasmor
    @vasmor
    Интересуюсь
    Как-то давно, не помню уже где, нашел такой сниппет:
    if ( ! is_admin() && ( ! defined( 'DOING_AJAX' ) || ( defined( 'DOING_AJAX' ) && ! DOING_AJAX ) ) ) {
        ob_start( 'html5_slash_fixer' );
    	$len = ob_get_length();
    	if ( $len && $len > 0 ) {
        	add_action( 'shutdown', 'html5_slash_fixer_flush' );
    	}
    }
    
    function html5_slash_fixer( $buffer ) {
        return str_replace( ' />', '>', $buffer );
    }
    
    function html5_slash_fixer_flush() {
        ob_end_flush();
    }

    исправно работает...
    периодически использую его в проектах, когда заказчику ну очень нужен чистый лист в валидаторе;)
    Ответ написан
    1 комментарий
  • Почему может не выводиться значение acf поля на статическую страницу? Polylang виноват?

    vasmor
    @vasmor
    Интересуюсь
    'heading-small' - имя поля правильно написано?
    может нужно с нижним подчеркиванием, вместо тире - 'heading_small'?
    Ответ написан
  • Как в плагине WP Contact Form 7 создать одну форму для всех услуг или товаров с персональной привязкой по title?

    vasmor
    @vasmor
    Интересуюсь
    Еще пару способов:
    - использовать специальные почтовые теги (прописываются в теле письма)
    1. [_post_title] - заменяется в сообщении на заголовок страницы/записи - сработает только в том случае, если форма выводится в составе контента!
    2. [_url] - заменяется на url страницы/записи - срабатывает в любом случае
    доп. инфа тут
    Ответ написан
    1 комментарий
  • Как реализовать такой цикл вывода постов на wp?

    vasmor
    @vasmor
    Интересуюсь
    Есть такой вариант:
    Получаем посты по $term

    $query = new WP_Query( array(
        'post_type' 		=> $type, // Ваш тип записи
    	'posts_per_page'	=> -1,        
    	'tax_query' => array(
    		array(
    			'taxonomy' => $tax, // Такса типа записи
    			'field'    => 'slug', 
    			'terms'    => $term // Нужный терм
    		)
    	)
    ) );


    Через цикл создаем массив id всех меток, присутствующих в полученных на предыдущем шаге постах

    $all_tags = [];
    
    if ( $query->have_posts() ) {
    	while ( $query->have_posts() ) {
    		$query->the_post();
    
    	        $cur_terms = get_the_terms( $post->ID, $post_tag ); // $post_tag - нужная таксономия (если это стандартная метка поста, то $post_tag = 'post_tag')
    	        if( is_array( $cur_terms ) ){
    		        foreach( $cur_terms as $cur_term ){
    			         $all_tags[] = $cur_term->term_id;
    		       }
    	        }        	
    	}
    }
    // Возвращаем оригинальные данные поста. Сбрасываем $post.
    wp_reset_postdata();
    
    $all_tags = array_unique($all_tags); // Оставляем уникальные значения в массиве


    Выводим кнопки табов

    echo '<ul>';
    
    	$i = 0;
    	foreach ( $all_tags as $tag ) {
    		$class_active = $i === 0 ? ' tab-active' : ''; // для первой кнопки ставим активный класс
    		$tag_name = get_term( intval( $tag ) )->name; // Наименование метки
    		echo '<li class="tab-caption' . $class_active . '">' . $tag_name . '</li>';
    	$i++;
    	}
    
    echo '</ul>';


    Выводим контент табов

    echo '<div>';
    
    	$k = 0;
    	foreach ( $all_tags as $tag ) {
    		$class_active = $k === 0 ? ' tab-active' : '';
    		
    		echo '<div class="tab-content' . $class_active . '">';
    			if ( $query->have_posts() ) {
    				while ( $query->have_posts() ) {
    					$query->the_post();
    
    				        if ( has_term( intval( $tag ), $post_tag ) ) { // Выводим только те посты, в которых есть текущая метка в цикле
    				        	the_content(); // Здесь вывод данных поста. Как вариант - get_template_part( 'path/to/template' );
    				        }    	
    				}
    			}
    			// Возвращаем оригинальные данные поста. Сбрасываем $post.
    			wp_reset_postdata();
    		echo '</div>';
    	$k++;
    	}
    
    echo '</div>';
    Ответ написан
    7 комментариев