• Почему не отправляется почта на @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..
    Ответ написан
    Комментировать
  • Почему ajax не работает с предзагрузкой файла картинок FileReader?

    @zkrvndm
    Софт для автоматизации
    Удалите этот код:
    $(document).on('submit', '#commentform', function(e) {
      e.preventDefault();
      var filter = $(this);
      $.ajax({
        url: filter.attr('action'),
        data: filter.serialize(),
        type: filter.attr('method'),
        success: function(data) {
          $('#review-thanks').addClass('active');
        },
        error: function() {}
      });
    });


    Вместо него используйте чистый JavaScript:
    // По готовности страницы, вешаем на форму обработчик onsubmit инлайново:
    
    document.addEventListener('DOMContentLoaded', function() {
    	document.querySelector('form#commentform').setAttribute('onsubmit', 'event.preventDefault(); form_send(this);');
    });
    
    // Функция для отправки формы на чистом JavaScript:
    
    function form_send(form) {
    	form.setAttribute('onsubmit', 'event.preventDefault();');
    	var url = form.getAttribute('action') + '?nocache=' + new Date().getTime();
    	var xhr = new XMLHttpRequest(); xhr.open('POST', url);
    	xhr.onreadystatechange = function() {
    		if (xhr.readyState === XMLHttpRequest.DONE) {
    			form.setAttribute('onsubmit', 'event.preventDefault(); form_send(this);');
    			if (xhr.status === 200) {
    				document.querySelector('#review-thanks').classList.add('active');
    				alert('Форма успешно отправлена, ответ сервера: ' + xhr.responseText);
    			}
    			else {
    				console.log('При отправке формы произошла ошибка, ниже объект с деталями ошибки:');
    				console.dir(xhr);
    				alert('При отправке формы произошла ошибка, детали смотрите в консоли.');
    			}
    		}
    	}
    	xhr.send(new FormData(form));
    }

    Алерты по желанию можете убрать.
    Ответ написан
    4 комментария
  • Не приходят письма при новом заказе в WooCommerce, что можно сделать?

    Vagrant0610
    @Vagrant0610 Автор вопроса
    PHP разработчик
    Вопрос решён. Настроил отправку писем через плагин WP Mail SMTP.
    Сделал следующим образом:
    1. Выбрал в настройках "Other SMTP".
    2. Вписал параметры (нашёл на сайте mail.ru) для почтовых программ:
    SMTP Host smtp.mail.ru
    SMTP Port 465
    Encryption None (Выбрать - SSL) TLS
    Auto TLS ON
    Authentication ON
    SMTP Username Knife@mail.ru
    SMTP Password *******************
    3. Очень важный момент! Что у mail, что у yandex и возможно у других почтовых сервисов, отправитель проверсяется на соответствие. По этому в самом верху на странице настроек плагина обязательно укажите тот же самый адрес почты что и в "SMTP Username".
    From Email Knife@mail.ru
    4. Преимущества такой настройки в том что при отправлении писем через такие сервисы, письма имеют безопасные подписи, по этому все письма которые приходят клиентам и вам, не попадают в папку "спам".

    На этом всё. После этого заработала почта в магазине.
    Ответ написан
    3 комментария
  • Docker. Как контролировать код, базу данных и выпуск в production?

    UnknownHero
    @UnknownHero Автор вопроса
    Добавлю ответ на свой же вопрос.

    Прошло достаточно времени и я успел посмотреть и попробовать множество инструментов связанных с Docker.

    Создал 2 приложения , первый этой сам сайт для которого хотел сделать инфраструктуру , второй это инструменты администрирования, тестирования и деплоя.

    Приложение для администрирование развёрнуто на 1-м сервере, на нём есть Docker Registry , Jenkins и ещё пару веб страниц с разной информацией. Всё это обернул в Nginx , работает здорово. Само приложение тоже использует Docker , но обновлять его нужно руками (ssh and etc).

    Сайт ( который на самом деле состоит из бизнес логики , DAL , Postgresql , Rest API , web-frontend , web-backend и ещё пару уровней абстракции :) ) использует содержит около 10 Dockerfile.

    Внутри приложения использую инструменты сборки (grunt для nodejs) и собираю приложение во время сборки образа (docker build) , либо после запуска контейнера для продолжительной разработки с помощью FIG.

    После правки кода, заливаю всё в git репозиторий, Jenkins собирает образы (docker build) и отправляет в Docker Registry, после чего сообщает серверам (сейчас он 1), что нужно обновить образы (docker pull) , и перезапустить контейнеры. Там где нужно сохранить данные , использую data containers , их я не перезапуска и не трогая.
    Со временем хочу сохранять состояние data containers (docker commit) и заливать их на Docker registry (docker push) для бэкапа некоторых данных.

    Сервер собирает и перезапускает обновлённые контейнеры с помощью самописных bash скриптов (они не сложные ), т.к. родные для Docker инструменты для этих целей ещё в стадии разработки (Docker swarm , Docker machine , Docker compose) , а стороние решения скорее всего умрут после выхода этих инструментов.

    Через Environment variables говорю контейнеру в каком он режими работает (local/test/live), но нужно это только для минификаций и уровня логгирования. В этих настройках - чем меньше различия,тем лучше.

    Всё это загнал в vagrant , отлично работает ,но требует хорошое железо для разработки.

    В планах:
    - научиться тегировать образы, что бы можно было откатить все сервера до рабочего состояния в случае багов.
    - добавить процесс автоматического тестирования и оценки качества в Jenkins (для docker приложений нужно поднимать ещё jenkins slave )
    - прикрутить ansible для деплоя и прочих удобностей для администрирования. Связать его с Jenkins

    Итог:
    -Однин раз написал, везде использую.
    - Автоматизация до уровня commit = staging deploy
    - Разделение административных инструментов и сервисов от бизнес приложения.
    - Независимые компоненты ,которые можно легко заменить, слабая связаность.
    ну и минусы:
    - одному тяжело уследить за таким зоопарком )) Был бы администратор/DevOps , было бы зачительно быстрее всё.
    Ответ написан
    1 комментарий
  • NGINX перенаправление внутренних страниц с .php на /?

    castomi
    @castomi
    Серверный администратор - tickets.settin.ru
    if ($request_uri ~* "^(.*/)index\.(html|php)$") { return 301 $1; }

    Если честно не совсем понятен Ваш вопрос, он больше на жалобу похож. Вот мой вариант убирает index.php и index.html на корень текущей папки. Вы это спрашивали? Если нет, задайте вопрос более корректно.
    Ответ написан
    5 комментариев
  • Как на nginx настроить редирект c www?

    ky0
    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    Всё описанное вами тривиально делается директивами rewrite: https://nginx.org/ru/docs/http/ngx_http_rewrite_mo...
    Ответ написан
    2 комментария
  • Как сделать грамотный preload Css\JS для сайта под wp?

    Попробуйте абсолютно бесплатный плагин LiteSpeed Cache — он реально помогает с оптимизацией WP:
    Со стилями и скриптами: минификация, объединение, генерация Critical CSS (бесплатно, в отличии от остальных) асинхронная загрузка
    С изображениями: оптимизация, ленивая загрузка
    Со шрифтами: асинхронная загрузка
    А если ещё сайт перенести на хостинг с веб сервером LiteSpeed, то и кэшированием займется, на Apache вроде не работает кэширование.
    У меня с ним страницы грузятся за 0,4-0,6 сек и 1,2-1,6 на мобильных по данным PageSpeed Insight.
    Самое лучшее и удобное решение для WP, установил, один раз настроил и забыл. Работает как часы, сайты летают.
    Ответ написан
    3 комментария
  • Как проверить есть ли необходимость загрузки google maps на странице?

    KickeRocK
    @KickeRocK
    FrontFinish
    function initialize() {
    var _map = document.getElementById("w3docs-map");
    if(!_map.firstChild){
      var prop = {
        center: new google.maps.LatLng(51.508742, -0.120850),
        zoom: 5,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      };
      var map = new google.maps.Map(_map, prop);
    }
    }
    Ответ написан
    3 комментария
  • Как устранить ошибку Pagespeed “Пассивные прослушиватели событий не используются для улучшения производительности при прокрутке”?

    Stalker_RED
    @Stalker_RED
    Если даже у тебя получится выставить passive: true, пользы это не принесет, потому что библиотека делает preventDefault, и ты получишь очередную ошибку.

    Как вариант - попробуй отказаться от этой библиотеки вообще.
    Ответ написан
    6 комментариев
  • Как добавить дополнительную пагинацию к слайдеру?

    FFxSquall
    @FFxSquall
    Могу писать код, могу не писать
    В Owl можно на любой элемент повесить событие перелистывания слайдов. Так, что смело верстайте какую угодно пагинацию и делайте например так:
    var owl = $(".owl-carousel");
    owl.owlCarousel(sliderOptions);
    
    $(".prev-slide").click(function() {
      owl.trigger('prev.owl.carousel');
    });
    
    $(".next-slide").click(function() {
      owl.trigger('next.owl.carousel');
    });

    Или обратитесь к документации

    Для навигации к конкретному слайду можно использовать event to.owl.carousel
    К примеру:
    <ul class="owl-pagination">
       <li class="owl-pagination__item"></li>
       <li class="owl-pagination__item"></li>
       <li class="owl-pagination__item"></li>
    </ul>

    var owl = $(".owl-carousel");
    owl.owlCarousel(sliderOptions);
    $(".owl-pagination__item").click(function() {
      var position = $(this).index();
      // если нужно ставим тут класс .active элементу по которому кликнули и снимаем у остальных
      owl.trigger("to.owl.carousel", [position, 500]);
    });
    Ответ написан
    5 комментариев
  • Почему не достигаются цели в яндекс метрике?

    @Asokr
    Столкнулся с подобной проблемой. Через пару часов обнаружил, что FireFox, на котором происходило тестирование достижения целей - обзавелся новой штукой - "Защита от отслеживания" - она в свою очередь у меня была включена, и блокировала tag.js яндекса, и пиксель фейсбука. Таким образом они не грузились, ошибок не было, как и достижения целей.

    Обратите на это внимание, при тестировании.
    Ответ написан
    Комментировать
  • Как сделать live поиск по данным из excel файла?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Для php есть либы, которые понимают формат excel. Их и используйте.

    Для "живого" поиска - используйте обмен данными в json-структуре и выполняйте отправку на сервер только когда выполнятся все условия:
    1. Содержимое поля поиска изменилось.
    2. Интервал ожидания ввода очередного символа более, чем в 1.5 раза от среднего интервала ввода всех предыдущих символов.
    3. Прошло не менее 0.5 секунды от момента предыдущего изменения поля.
    4. Поле содержит 3 или более символа.
    5. Запрос не равен предыдущему (добавили и сразу удалили символ).
    Ответ написан
    Комментировать