• Картинки мутные только на сафари, есть выход?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Попробуйте следующие варианты:
    img {
        image-rendering: optimizeQuality;
    }

    или:
    <object type="image/svg+xml" data="img.svg" width="100" height="100"></object>

    или:
    <embed type="image/svg+xml" src="img.svg" width="100" height="100"/>
    Ответ написан
    1 комментарий
  • Hyyan Polylang for Woocommerce - как исправить (очередную) ошибку, чтобы работало с 8 версией php?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Где неправильность в том, что "locale" это bool?

    С чего вы это взяли?
    Ясно же написано: попвытка обратиться к свойству locale у переменной типа bool
    То есть $polylang->curlang - bool (false)
    Нужно выяснить, почему там false? а не объект, и поправить.
    Или тупо добавить проверку

    if ($polylang->curlang) {
      $polylang->curlang->locale = ...
    }


    но это лечение симптомов, а не болезни.
    Ответ написан
    1 комментарий
  • Как сделать, чтобы php8+ понимал woocommerce_format_localized_decimal?

    @weart
    Поскольку плагин больше не поддерживается, можете править его файлы

    в этом месте попробуйте заменить на

    $retval = $a->format((float) $input, \NumberFormatter::TYPE_DOUBLE);
    Ответ написан
    4 комментария
  • Путаница с z-index - что я упускаю?

    @Asokr
    Задайте элементу с тенью
    pointer-events: none
    Ответ написан
    1 комментарий
  • Как на ios в теге video убрать controls?

    @archelon
    вот мой код из свежего проекта
    <video autoplay="" muted="" loop="" disablepictureinpicture="" webkit-playsinline="" playsinline="" pip="false" poster="poster.jpg">
          <source type="video/mp4" src="video.mp4">
        </video>

    scss
    video {
      background-color: transparent;
      border-bottom: 1px solid transparent; /* хак для предотвращения мелькания при загрузке на некоторых версиях ios */
      &::-webkit-media-controls-panel {
        display: none !important;
        -webkit-appearance: none;
        opacity: 0;
        visibility: hidden;
      }
      &::-webkit-media-controls-play-button {
        display: none !important;
        -webkit-appearance: none;
        opacity: 0;
        visibility: hidden;
      }
      &::-webkit-media-controls-start-playback-button {
        display: none !important;
        -webkit-appearance: none;
        opacity: 0;
        visibility: hidden;
      }
    }
    Ответ написан
    Комментировать
  • В jQuery как при изменении значения текстовых инпутов поменять значение другого текстового инпута?

    @balamyt92
    ; select * from users; --
    Вы хотите что то вроде этого, специально сделал что бы не точно как хотите, разбирайтесь, адаптируйте
    Ответ написан
    Комментировать
  • Woocommerce - как вывести внутри шаблона категории все подкатегории - с "внуками" и "правнуками"?

    wfantastic
    @wfantastic
    увлечен wordpress
    нужно использовать рекурсивную функцию:
    функция принимает два параметра: $parent_id - идентификатор родительской категории, и $level - уровень вложенности текущей категории. Если передать $parent_id равным 0, то будут выведены все верхнеуровневые категории. Функция использует get_categories() для получения списка дочерних категорий и рекурсивно вызывает саму себя для вывода вложенных категорий
    function get_child_category_list( $parent_id, $level = 0 ) {
        $args = array(
            'hierarchical' => 1,
            'show_option_none' => '',
            'hide_empty' => 0,
            'parent' => $parent_id,
            'taxonomy' => 'product_cat'
        );
    
        $subcategories = get_categories( $args );
    
        if ( $subcategories ) {
            $output = '<ul class="subcategories level-' . $level . '">';
    
            foreach ( $subcategories as $category ) {
                $output .= '<li>';
                $output .= '<a href="' . get_term_link( $category ) . '">' . $category->name . '</a>';
    
                $output .= get_child_category_list( $category->term_id, $level + 1 );
    
                $output .= '</li>';
            }
    
            $output .= '</ul>';
    
            return $output;
        } else {
            return '';
        }
    }

    вызвать в шаблоне попробуйте так:
    if ( is_product_category() ) {
        $parent_id = get_queried_object_id();
        echo get_child_category_list( $parent_id );
    }
    Ответ написан
    Комментировать
  • Как правильно задать title для каждого изображения в магазине, чтобы он был точно такой же, как alt?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Дополнительные параметры в тег изображения можно передать в виде массива в функцию the_post_thumbnail() или get_the_post_thumbnail()

    $size = 'post-thumbnail';
    
    $attr = array(
    	'class' => 'attachment-' . $size,
    	'alt'   => the_title_attribute(),
    );
    
    the_post_thumbnail( $size, $attr );


    В вашем решении в функцию .attr() нужно передавать переменную, а не строку

    jQuery( 'img' ).attr( 'title', image_alt );
    Ответ написан
    Комментировать
  • Как войти в ящик доменной бизнес-почты на mail.ru?

    https://biz.mail.ru/login/ваш_домен или просто через главную страницу https://mail.ru, введите e-mail (вместе с собакой) в качестве логина.
    Ответ написан
    2 комментария
  • Как добавить свое значение к цене вариации?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    //функция для изменения цен с помощью числа
    function wpp_price_plus() {
        return 100;
    }
    
    add_filter('woocommerce_product_variation_get_regular_price', 'wpp_custom_price', 99, 2 );
    add_filter('woocommerce_product_variation_get_price', 'wpp_custom_price', 99, 2 );
    function wpp_custom_price( $price, $product ) {
        return (float) $price + wpp_price_plus();
    }
    
    add_filter('woocommerce_variation_prices_price', 'wpp_custom_variable_price', 99, 3 );
    add_filter('woocommerce_variation_prices_regular_price', 'wpp_custom_variable_price', 99, 3 );
    function wpp_custom_variable_price( $price, $variation, $product ) {
         // Удаление кэшированной цены продукта
        wc_delete_product_transients($variation->get_id());
        return (float) $price + wpp_price_plus();
    }
    
    // Обработка кэширования цен
    add_filter( 'woocommerce_get_variation_prices_hash', 'add_price_plus_to_variation_prices_hash', 99, 3 );
    function add_price_plus_to_variation_prices_hash( $price_hash, $product, $for_display ) {
        $price_hash[] = wpp_price_plus();
        return $price_hash;
    }
    Ответ написан
    Комментировать
  • Как правильно подключить поле TinyMCE в Customizer?

    V_A_B
    @V_A_B
    ¯\_(ツ)_/¯
    Подсмотрел в гайд, вот здесь, здесь есть образец создания класса-контрола в самом начале, но простого нотиса, который ничего не позволяет менять

    а по завершению стати ссылка на гид. там и лежит весь этот фарш. скачивайте архив и берете исходники нужные из файлов... они там по сути подписаны

    class ✅

    <?php
    if(!defined('ABSPATH')){exit;}
    class Skyrocket_TinyMCE_Custom_control extends WP_Customize_Control{
    	/**
    	 * The type of control being rendered
    	 */
    	public $type = 'tinymce_editor';
    	/**
    	 * Enqueue our scripts and styles
    	 */
    	public function enqueue(){
    		wp_enqueue_script( 'skyrocket-custom-controls-js', get_template_directory_uri() . '/js/customizer.js', array( 'jquery' ), '1.0', true );
    		wp_enqueue_style( 'skyrocket-custom-controls-css', get_template_directory_uri() . '/css/customizer.css', array(), '1.0', 'all' );
    		wp_enqueue_editor();
    	}
    	/**
    	 * Pass our TinyMCE toolbar string to JavaScript
    	 */
    	public function to_json() {
    		parent::to_json();
    		$this->json['skyrockettinymcetoolbar1'] = isset( $this->input_attrs['toolbar1'] ) ? esc_attr( $this->input_attrs['toolbar1'] ) : 'bold italic bullist numlist alignleft aligncenter alignright link';
    		$this->json['skyrockettinymcetoolbar2'] = isset( $this->input_attrs['toolbar2'] ) ? esc_attr( $this->input_attrs['toolbar2'] ) : '';
    		$this->json['skyrocketmediabuttons'] = isset( $this->input_attrs['mediaButtons'] ) && ( $this->input_attrs['mediaButtons'] === true ) ? true : false;
    	}
    	/**
    	 * Render the control in the customizer
    	 */
    	public function render_content(){
    	?>
    		<div class="tinymce-control">
    			<span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
    			<?php if( !empty( $this->description ) ) { ?>
    				<span class="customize-control-description"><?php echo esc_html( $this->description ); ?></span>
    			<?php } ?>
    			<textarea id="<?php echo esc_attr( $this->id ); ?>" class="customize-control-tinymce-editor" <?php $this->link(); ?>><?php echo esc_attr( $this->value() ); ?></textarea>
    		</div>
    	<?php
    	}
    }



    подключенный css в function enqueue класса ✅

    /* ==========================================================================
       Textarea/TinyMCE
       ========================================================================== */
    .tinymce-control textarea {
    	width: 100%;
    	padding: 10px;
    }



    подключенный js в function enqueue класса ✅

    jQuery( document ).ready(function($) {
    	"use strict";
    	/**
    	 * TinyMCE Custom Control
    	 *
    	 * @author Anthony Hortin <http://maddisondesigns.com>
    	 * @license http://www.gnu.org/licenses/gpl-2.0.html
    	 * @link https://github.com/maddisondesigns
    	 */
    
    	$('.customize-control-tinymce-editor').each(function(){
    		// Get the toolbar strings that were passed from the PHP Class
    		var tinyMCEToolbar1String = _wpCustomizeSettings.controls[$(this).attr('id')].skyrockettinymcetoolbar1;
    		var tinyMCEToolbar2String = _wpCustomizeSettings.controls[$(this).attr('id')].skyrockettinymcetoolbar2;
    		var tinyMCEMediaButtons = _wpCustomizeSettings.controls[$(this).attr('id')].skyrocketmediabuttons;
    
    		wp.editor.initialize( $(this).attr('id'), {
    			tinymce: {
    				wpautop: true,
    				toolbar1: tinyMCEToolbar1String,
    				toolbar2: tinyMCEToolbar2String
    			},
    			quicktags: true,
    			mediaButtons: tinyMCEMediaButtons
    		});
    	});
    	$(document).on( 'tinymce-editor-init', function( event, editor ) {
    		editor.on('change', function(e) {
    			tinyMCE.triggerSave();
    			$('#'+editor.id).trigger('change');
    		});
    	});
    });



    Добавляем настройки в кастомайзер ✅

    ...
    $customizer->add_setting( 'sample_tinymce_editor',
       array(
          'default' => '',
          // 'transport' => 'postMessage',
          'sanitize_callback' => 'wp_kses_post'
       )
    );
    $customizer->add_control( new Skyrocket_TinyMCE_Custom_control( $customizer, 'sample_tinymce_editor',
       array(
          'label' => __( 'TinyMCE Control' ),
          'description' => __( 'This is a TinyMCE Editor Custom Control' ),
          'section' => 'section_VAB_Agree',
          'input_attrs' => array(
             'toolbar1' => 'bold italic bullist numlist alignleft aligncenter alignright link',
             'mediaButtons' => true,
          )
       )
    ));
    ...



    Выводим где-то ✅

    echo get_theme_mod('sample_tinymce_editor');


    Результат ✅

    6196a4e88705c960309249.jpeg

    6196a5083210a592782074.jpeg
    Ответ написан
    Комментировать
  • Mozilla не видит контуров svg(stroke), как пофиксить?

    RAX7
    @RAX7
    В названии аргументов фильтра ошибка.
    <filter id="filter0_b_601_49" x="93.425" y="129.676" width="237" height="445.648" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
          <feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood>
    -      <feGaussianBlur in="BackgroundImage" stdDeviation="25"></feGaussianBlur>
    +      <feGaussianBlur in="BackgroundImageFix" stdDeviation="25"></feGaussianBlur>
          <feComposite in2="SourceAlpha" operator="in" result="effect1_backgroundBlur_601:49"></feComposite>
          <feBlend mode="normal" in="SourceGraphic" in2="effect1_backgroundBlur_601:49" result="shape"></feBlend>
        </filter>

    Хром видимо игнорирует кривой фильтр и отрисовывает без него, а лиса просто отказывается рисовать элемент с таким фильтром.
    Зачем вообще там нужен этот фильтр для меня осталось загадкой
    Ответ написан
    2 комментария
  • Какое свойство в svg может дать больше места для анимации?

    @antares4045
    viewBox="-15 -15 926 735"

    правда это слегка уменьшит масштаб картинки, но с этим, я думаю вы справитесь
    Ответ написан
    Комментировать