• Как добавить доп. валидацию в Contact form 7 WP?

    deniscopro
    @deniscopro Куратор тега WordPress
    WordPress-разработчик, wpcute.ru
    А вот если в поле имейл вписать пару букв

    Если используется именно поле email, то оно будет валидировать корректность введенного email-адреса.

    В стандартных средствах как включить такую валидацию не нашел

    Как-то давно делал, в частности менял выводимые сообщения об ошибках.
    Выглядело примерно так
    //Добавляем фильтры
    add_filter('wpcf7_validate_tel*', 'dco_wpcf7_validate', 10, 2);
    add_filter('wpcf7_validate_email*', 'dco_wpcf7_validate', 10, 2);
    add_filter('wpcf7_validate_text*', 'dco_wpcf7_validate', 10, 2);
    add_filter('wpcf7_validate_textarea*', 'dco_wpcf7_validate', 10, 2);
    
    function dco_wpcf7_validate($result, $tag) {
        //Получаем объект тега
        $tag = new WPCF7_Shortcode($tag);
    
        //Получаем значение поля
        $value = isset($_POST[$tag->name]) ? trim(wp_unslash(strtr((string) $_POST[$tag->name], "\n", " "))) : '';
    
        //Указываем правила для тега с именем "your-name"
        if ('your-name' == $tag->name) {
            //Если тег обязателен и имеет пустое значение — выводим сообщение об ошибке
            if ($tag->is_required() && '' == $value) {
                $result->invalidate($tag, 'Укажите имя');
            }
        }
    
        //Указываем правила для тега с типом "email"
        if ('email' == $tag->basetype) {
            //Если тег обязателен и имеет пустое значение — выводим сообщение об ошибке
            if ($tag->is_required() && '' == $value) {
                $result->invalidate($tag, 'Укажите верный электронный адрес');
                //Если значение не пустое и не является корректным email-адресом — выводим сообщение об ошибке
            } elseif ('' != $value && !wpcf7_is_email($value)) {
                //Функция "wpcf7_get_message" выводит сообщения с вкладки "Уведомления при отправке формы" настроек формы
                $result->invalidate($tag, wpcf7_get_message('invalid_email'));
            }
        }
    
        //Указываем правила для тега с типом "tel"
        if ('tel' == $tag->basetype) {
            //Если тег обязателен и имеет пустое значение — выводим сообщение об ошибке
            if ($tag->is_required() && '' == $value) {
                $result->invalidate($tag, 'Укажите верный телефон');
                //Если значение не пустое и не является корректным телефонным номером — выводим сообщение об ошибке
            } elseif ('' != $value && !wpcf7_is_tel($value)) {
                //Функция "wpcf7_get_message" выводит сообщения с вкладки "Уведомления при отправке формы" настроек формы
                $result->invalidate($tag, wpcf7_get_message('invalid_tel'));
            }
        }
        
        //Указываем правила для тега с именем "your-message"
        if ('your-message' == $tag->name) {
            //Если тег обязателен и имеет пустое значение — выводим сообщение об ошибке
            if ($tag->is_required() && '' == $value) {
                $result->invalidate($tag, 'Введите текст сообщения');
            }
        }
    
        return $result;
    }
    Ответ написан
    2 комментария
  • Как валидировать форму на чистом css при помощи псевдоклассов invalid и placeholder-shown?

    profesor08
    @profesor08 Куратор тега CSS
    Ответ написан
    Комментировать
  • Как установить расширение (плагин) для копирования стилей в photoshop cc 2018?

    @dkflbwf
    учусь пока
    Photoshop CC 2021 по инструкции tecj стабильно работает.
    Ответ написан
    Комментировать
  • Как установить расширение (плагин) для копирования стилей в photoshop cc 2018?

    @tecj
    Далее привожу ссылку на инструкцию по установке css hat 2.1.1 на актуальную версию photoshop 21.1.1(2020)
    https://docs.google.com/document/d/16AUGcej3xj1zD9...
    Ответ написан
    1 комментарий
  • Как настроить перенаправление с www на без www в yoast seo?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день!
    Вообще, подобное лучше настраивать через htaccess для Apache или через конфиги nginx.
    Даже сама компания Yoast об этом говорит.
    https://yoast.com/how-to-remove-www-from-your-url/
    https://yoast.com/video/ask-yoast-redirecting-domain/
    Но если вы по каким-то причинам не хотите делать это на уровне конфигов, то сделайте на уровне РНР
    https://stackoverflow.com/questions/2079457/www-to...
    Ответ написан
    2 комментария
  • Как реализовать эффект взрыва изображений в блоке с помощью css анимации?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Как сделать несколько анимаций одновременно: тут.
    2. Задайте разный тайминг в нужных анимациях (в процентах).
    Ответ написан
    3 комментария
  • Почему текст блока с абсолютным позиционированием внутри flex контейнера не растягивается на всю ширину?

    serjikz
    @serjikz
    web-developer
    Проблема не во flex-контейнере, а в особенности абсолютного позиционирования и центрирования таким образом (через transform: translatex()).

    Любой блок, спозиционированный абсолютно и которому не даны размеры, будет всегда пытаться ужать самого себя (и контент в себе) если он вылазит за родителя. Уберите transform - увидите, что блок у вас прилипает к правому краю вашего элемента и он уже в 2 строки сразу. Если вы сделаете left меньше (в вашем случае хотя бы 48%)- текст будет в одну строку даже с transform (но эффекта центрирования конечно тогда не будет). Всё из-за особенности позиционирования. Если использовать right - будет тоже самое.

    В то же время свойство transform делает следующее - оно не перемещает сам по себе элемент, а перемещает, можно сказать, отражение этого элемента. То есть сам по себе элемент остается на своём месте (left: 50%;) а transform просто двигает его "отражение" влево. Грубо говоря браузер фоткает ваш элемент, скрывает его и фотку двигает на нужное расстояние. Элемент то у вас в 2 строки - значит и на "фотке" он будет в 2 строки.

    Решить это можно только путем задания ширины блоку, который позиционируется абсолютно (задать ему нужную ширину).

    Также можно ещё как вариант центрировать блок через отрицательный левый margin, задавая точное значение в px (половину от ширины блока, который позиционируете).

    Если вам нужна резина - подумайте над тем, чтобы отказаться от абсолютного позиционирования. Если вам нужна и резина и абсолютное позиционирование - делайте ширину этому блоку 100% (будет он тянуться на всю ширину его родителя).

    Оч надеюсь, что объяснил понятно, в тексте такие штуки объяснять достаточно проблематично.
    Ответ написан
    Комментировать
  • Как обновлять доп поля acf wordpress при загрузке excel таблицы?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов zolin.digital
    Я как-то искал решение и пришлось в итоге писать руками. В общем логика выглядела так:

    1. Взял старую библиотеку PHPExcel. Она конвертирует excel-файл в обычный массив
    2. Массив в цикл, в цикле по колонке с id-поста получаете нужное поле с помощью get_post_meta()
    3. Сравниваете с данными из таблицы, если отличаются, пушите новые с помощью update_post_meta()
    Ответ написан
    2 комментария
  • Как в php отсортировать двумерный ассоциативный массив в зависимости от параметра?

    @Stalinko
    PHP'шник и фрилансер до мозга костей
    usort($array, fn($a, $b) => ($a['count'] ?? null) <=> ($b['count'] ?? null));
    Ответ написан
    4 комментария
  • Почему не отправляется почта на @ukr.net?

    jamessvetsky
    @jamessvetsky
    Специалист по почтам и рассылкам
    SPF нужно поменять. Два варианта, если MailChimp используете, то на значение "v=spf1 include:servers.mcsv.net ip4:176.57.223.0/24 ip4:92.53.116.0/22 a ~all"
    Если не используете, то на значение "v=spf1 ip4:176.57.223.0/24 ip4:92.53.116.0/22 a ~all"
    DKIM один явно неверный, можно сделать так - сначала в поддомен первого добавляете после m единичку (получится dkim1._domainkey) и тестируете через mail-tester.com Вас интересует третий блок - "Вы успешно прошли проверку подлинности"
    Потом убираете в первом DKIM единичку и добавляете во второй и снова тестируете. Заодно и мою SPF проверим.
    Ответ написан
    Комментировать
  • Как в ссылке передать параметры состояния с домена на поддомен?

    OCTAGRAM
    @OCTAGRAM
    Я бы просто кукис в домене «.имя.домена» использовал. Такие кукисы, с точкой в начале, действуют во всём домене с поддоменами. Другой вариант — подгружаем с поддомена динамический скрипт в домене. Генератор скрипта видит содержимое сессии и генерит скрипт, который покажет или скроет кнопки.
    Ответ написан
    Комментировать
  • Как в ссылке передать параметры состояния с домена на поддомен?

    Kozack
    @Kozack Куратор тега JavaScript
    Thinking about a11y
    В чем проблема то?
    <p><a href="poddomen.domen.com?display=open">Ссылка 1</a></p>
    <p><a href="poddomen.domen.com?display=close">Ссылка 2</a></p>
    Ответ написан
    3 комментария
  • Как удалить/добавить пост в Wordpress и его метаданные с помощью SQL запроса?

    TTA
    @TTA Автор вопроса
    Мутировавший технарь :)
    В общем спасибо всем местным гурям, сделал сам. Добавление/обновление 1500 постов со всякими проверками средствами wp api (wp_insert_post/wp_update_post) - заняло примерно 10 минут. Через $wpdb->query - около секунды. Может кому пригодится:
    //создаем уникальный индекс вместо обычного
    $wpdb->query('ALTER TABLE wp_posts DROP INDEX post_name');
    $wpdb->query('ALTER TABLE wp_posts ADD UNIQUE post_name (post_name)');
    $q ="INSERT INTO wp_posts SET  post_parent = 0, post_type = 'mytype', post_author = 1, post_content ='".$content_field."', post_title='".$content_title."', post_name= '".$content_name."' ON DUPLICATE KEY UPDATE post_name= '".$content_name."',  post_content = '".$content_field."', post_title='".$content_title."'";
    $wpdb->query($q);
     $post_id = $wpdb->get_var("SELECT ID FROM wp_posts wp WHERE post_name = '".$content_name."'");
    //Возвращаем обычный индекс
    $wpdb->query('ALTER TABLE wp_posts DROP INDEX post_name');
    $wpdb->query('ALTER TABLE wp_posts ADD INDEX post_name (post_name)');
    Ответ написан
    Комментировать
  • Что такое rest api простыми словами?

    HorrorInferno
    @HorrorInferno
    веб-разработчик, бэкэндер
    Если совсем простыми, то некий сервис даёт тебе доступ к своим данным, но не напрямую, а через оболочку, которая назвается REST API. Тебе даётся некий url, по которому ты можешь получить те самые данные. Как правило, при изменении параметров этого url, ты получаешь разные данные.
    Пример:
    Допустим ты берешь в качестве сервиса Википедию. Его специальный url, по которому ты можешь получить данные (его еще называют endpoint) выглядит так: https://en.wikipedia.org/w/api.php
    Допустим нам нужно найти какую-то краткую выдержку из вики по ключевым словам. Первым делом мы идем в документацию и смотрим, какие параметры нам для этого нужны. Для данной задачи нам потребуется url со следующими параметрами:
    https://en.wikipedia.org/w/api.php?action=opensearch&search=<search string>&prop=info&format=<format>&inprop=url


    search string - словосочетание, по которому мы хотим искать.
    format - формат в котором будет выдан ответ (самые популярные это json и xml)

    Пример обращения к WikiAPI:
    https://en.wikipedia.org/w/api.php?action=opensearch&search=microsoft&prop=info&format=json&inprop=url


    Ответ от WikiAPI:
    [
    "microsoft",
    [
    "Microsoft",
    "Microsoft Windows",
    "Microsoft Word",
    "Microsoft Excel",
    "Microsoft Office",
    "Microsoft Visual Studio",
    "Microsoft PowerPoint",
    "Microsoft SQL Server",
    "Microsoft Office 2007",
    "Microsoft Access"
    ],
    [
    "Microsoft Corporation (, abbreviated as MS) is an American multinational technology company with headquarters in Redmond, Washington.",
    "Microsoft Windows, or simply Windows, is a metafamily of graphical operating systems developed, marketed, and sold by Microsoft.",
    "Microsoft Word is a word processor developed by Microsoft. It was first released on October 25, 1983 under the name Multi-Tool Word for Xenix systems.",
    "Microsoft Excel is a spreadsheet developed by Microsoft for Windows, macOS, Android and iOS. It features calculation, graphing tools, pivot tables, and a macro programming language called Visual Basic for Applications.",
    "Microsoft Office is an office suite of applications, servers, and services developed by Microsoft. It was first announced by Bill Gates on 1 August 1988, at COMDEX in Las Vegas.",
    "Microsoft Visual Studio is an integrated development environment (IDE) from Microsoft. It is used to develop computer programs for Microsoft Windows, as well as web sites, web apps, web services and mobile apps.",
    "Microsoft PowerPoint is a presentation program, created by Robert Gaskins and Dennis Austin at a software company named Forethought, Inc.",
    "Microsoft SQL Server is a relational database management system developed by Microsoft. As a database server, it is a software product with the primary function of storing and retrieving data as requested by other software applications—which may run either on the same computer or on another computer across a network (including the Internet).",
    "Microsoft Office 2007 (codenamed Office 12) is a version of Microsoft Office, a family of office suites and productivity software for Windows, developed and published by Microsoft.",
    "Microsoft Access is a database management system (DBMS) from Microsoft that combines the relational Microsoft Jet Database Engine with a graphical user interface and software-development tools."
    ],
    [
    "https://en.wikipedia.org/wiki/Microsoft",
    "https://en.wikipedia.org/wiki/Microsoft_Windows",
    "https://en.wikipedia.org/wiki/Microsoft_Word",
    "https://en.wikipedia.org/wiki/Microsoft_Excel",
    "https://en.wikipedia.org/wiki/Microsoft_Office",
    "https://en.wikipedia.org/wiki/Microsoft_Visual_Studio",
    "https://en.wikipedia.org/wiki/Microsoft_PowerPoint",
    "https://en.wikipedia.org/wiki/Microsoft_SQL_Server",
    "https://en.wikipedia.org/wiki/Microsoft_Office_2007",
    "https://en.wikipedia.org/wiki/Microsoft_Access"
    ]
    ]
    Ответ написан
    2 комментария
  • Как вставить иконку только для первого пункта меню в Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Либо просто с помощью CSS бекграундом или :after дописать, или же если нужно все-таки разметку вставить () - в админке для пункта меню укажите специальный css-класс, например has-icon-login, далее хукаетесь в walker_nav_menu_start_el и модифицируете разметку:
    function my_custom_markup( $item_output, $item, $depth, $args ) {
    
    	// Отлавливаем элемент меню с нашим классом
    	if ( in_array( 'has-icon-login', $item->classes ) ) {
    		// Меняем разметку
    		return str_replace(
    			'<a',
    			'<i class="icon-user"></i><a',
    			$item_output
    		);
    	}
    
    	return $item_output;
    
    }
    add_filter( 'walker_nav_menu_start_el', 'my_custom_markup', 100, 4 );
    Ответ написан
    Комментировать
  • Как вынести комментарии worpdpress на отдельный поддомен?

    san_jorich
    @san_jorich
    Творческий кодер
    ligisayan, скажу честно - опыт не проходил, но сделал бы мультисайт, и шаблон страницы комментариев на суб-домен
    Ответ написан
    Комментировать
  • Ajax Загрузка комментариев WP?

    YarchicK
    @YarchicK
    Front-end developer
    function comm(){	 
    	$p_id = ( $_POST['spd'] );	
    	$args = array(
    		'posts_per_page' => -1,
    		'p' => $p_id
    	);
    	$yy_query = new WP_Query($args);	
    	while ( $yy_query->have_posts() ) {
    		$yy_query->the_post();
    global $withcomments;
    		$withcomments = true;
    		 comments_template();		
    	}	
     wp_die();
    }
    add_action('wp_ajax_mycomm', 'comm');
    add_action('wp_ajax_nopriv_mycomm', 'comm');

    ---
    $('.seecomments').click(function(){	
     	$.ajax({ 		
     		url: ajaxurl, 
     		type: 'POST',		
     		beforeSend: (function(){				
    					$('.comment_template').html('Загрузка..');
    			}),
     		data: ({
     			action: 'mycomm',	
     			spd: send_post_id 			
     		}),
     		success: function(data){ 		 
     			$('.comment_template').html(data);
     		}
     	})
     });

    ---
    В single.php
    //code...
    <div class="seecomments">показать комменты</div>
    <script>
    	var send_post_id = <?php the_ID(); ?>;
    </script>
    //code..
    Ответ написан
    Комментировать