Ответы пользователя по тегу WordPress
  • Как добавить локализацию?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    Polylang
    WPML
    MultilingualPress
    qTranslateX
    и еще вагон и целая тежелжка плагинов, на любой вкус и кошелек.
    Ответ написан
  • Как правильно загрузить favicon в Wordpress?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    Загрузить и вывести иконку на сайте это задача школьника. Не знаю чем руководствовались разработчики Wordpress, что даже такую примитивную задачу умудрились раздуть и сделать людям проблему. Мой мозг не понимает, почему они выбирают сложный путь вместо простого. Удивительная CMS.

    Боюсь, что тут удивительный вы, а не CMS. Изучите сначала матчасть, а потом возмущайтесь. Часть клиентов требуют favicon.ico в корне сайта, именно с таким именем, именно в формате .ico. Часть клиентов требуют более качественное изображение, там уже поддерживаются разные размеры, разные форматы и тд. Именно эти форматы генерирует WordPress, чтобы не нужно было ручками их создавать. Чтобы было понятнее зачем этот "зоопарк" - иконка используется в поиске, в браузерах на вкладке, на мобильных, если вы установите/сохраните страницу на home screen, на тайлах в microsoft-продуктах и тд. Разные устройства ожидают разный формат, разный размер и часто даже свой конкретный мета-тег.

    Для покрытия максимального количества use cases нужно загрузить 512x512 PNG в админке + положить 16х16 или 32х32 favicon.ico в корне сайта (не в wp-content, не в корне темы, а именно в корне сайта - там где index.php и wp-config.php).
    Ответ написан
  • WP получить acf поля из бд?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    Выполнять отдельный SQL-запрос в каждой итерации цикла - не очень разумно и плохо для производительности. Давайте для начала получим количество элементов в рипитере:
    SELECT meta_value FROM wp_postmeta WHERE post_id=83 && meta_key='recipients'

    Результат:
    array:1 [
      0 => [
    	  'meta_value' => '3'
      ]
    ]

    Далее, сформируем на уровне PHP массив валидных ключей:
    $total = (int) $results[0]['meta_value']; // Значение в базе в string
    $keys = [];
    
    for ( $i = 0; $i < $total; $i ++ ) {
    	$keys[] = "recipients_{$i}_email";
    }
    
    dump( $keys );

    Результат:
    array:3 [
      0 => "recipients_0_email"
      1 => "recipients_1_email"
      2 => "recipients_2_email"
    ]

    А теперь можно одним запросом получить все значения для этих полей указав их в WHERE meta_key IN (). Получается у нас что-то типа такого:
    $keys = implode(',', $keys); // собираем строку для IN
    $query = "SELECT * FROM wp_postmeta WHERE post_id=83 AND meta_key IN ({$keys})";

    Единственное, что PHP склеит массив в строку без кавычек, а для IN нужно чтобы значения были в кавычках. Конкретно этот запрос ошибку выдаст. Не знаю, как у вас реализовано выполнение запросов, но PDO::quote() к примеру решает данную проблему. Думаю дальше сами разберетесь.
    Ответ написан
  • Как менять картинки в своем слайдере из админки в wordpress?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    Везде пишут про специальные плагины для WP. Но можно ли обойтись без них?

    Можно и даже нужно.

    Ready-made плагины слайдеров для WP - адский треш и угар. Там обычно целый Adobe Premier и Adobe AfterEffects в админке, позволяющий настраивать эффекты переходов между слайдами, длительность (и даже кривую Bezier) анимаций и тд. Разумному человеку эта ересь конечно же не нужна.

    Для вывода загруженных картинок в свой слайдер вам всего лишь нужно получить нужные аттачменты (post type) с помощью запроса WP_Query. Как организовать механизм загрузки картинок в админке именно в нужном вам месте (Customizer, страница настроек, страница редактирования front page и тд) - зависит от того где вам это надо, но наиболее простой и удобный способ - воспользоваться плагином ACF (или аналогом).
    Ответ написан
  • Как вывести медиафайлы по таксономии?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    Создали таксономию вы правильно, все ок.

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

    2. Что касается вывода на странице - все просто. Картинки это post type 'attachment'. Таксономия ваша - это обычная таксономия вашего post type. Соответственно, вы можете спокойно создавать кастомный запрос WP_Query для post_type attachment, и в нем подзапрос - tax_query по вашей таксономии category_image. Подробнее в документации.
    Ответ написан
  • Ребят, откуда беруться эти класы?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    1. Функция get_header() подключает шаблон header.php.
    2. В шаблоне header.php в теге body стоит вызов функции body_class().
    3. Функция body_class() строить атрибут class="" для тега body, собирая в строку определенное количество классов, в зависимости от страницы/шаблона, авторизован ли пользователь и тд, которые она получает функцией get_body_class().
    4. Функция get_body_class() получает массив предустановленных динамических классов, в зависимости от ряда условий - поддержка RTL, на какой странице (типе страницы) находимся, какой шаблон используется, авторизован ли пользователь и еще целый ряд других.
    5. Перед возвратом этого массива классов в функции стоит хук-фильтр body_class, подключившись к которому данный список можно изменить под свои нужды.

    Все это элементарно узнать одним из следущих способов:

    1. По очереди посмотреть документацию всех этих функций.
    2. Поискать эти функции в коде WordPress.
    3. Начать наконец использовать нормальный IDE (например PhpStorm) и перестать теряться с 3х соснах. Просто Ctrl/Cmd + Click на функции и переходим к ней. Дальше клацаем в ней и тд. Пару кликов - и все становится предельно понятно.
    Ответ написан
  • Когда и какие типы записей создавать в wordpress?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    Если у сущности должен быть свой автономный URI, нужно иметь возможность запрашивать пачками по критериям, сущность минимум требует даты, названия/слага, статуса и возможности эти сущности группировать - тогда Custom Post Type.

    Taxonomy - это свойство другой сущности, по которому нужно группировать, сортировать и выбирать сущности. Запросы по таксономиям (рубрики, метки, термины кастомных таксономий) быстрые и удобные, в том числе со своими уникальными URI и параметрами.

    Метаданные (post_meta) это просто дополнительная информация, по которой желательно ничего не группировать, не фильтровать и не сортировать без очень острой на то необходимости (а даже если она возникла, лучше трижды подумать). Просто любая дополнительная инфа в свободном формате. Основное предназначение - вывод на экран при просмотре конкретной сущности, которой эти метаданные принадлежат. Своего URI у таких данных нет.

    Собственно, не считая пользователей и комментариев, это все что вам доступно в WordPress из коробки.

    По конкретным блокам по ссылке:

    - "Исполнение заказа" и "Почему верта" - обычные метаданные
    - "Реализованные проекты" - custom post type
    - Какие-нибудь "категории" или "типы" или "виды" реализованных проектов - custom taxonomy
    Ответ написан
  • Wordpress: почему не работает адаптивная верстка с кэшированием?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    Использовать плагины, которые поддерживают отдельные кеши для десктопа и мобильных устройств.
    Ответ написан
  • Как быстро заменить текст в страницах Wordpress?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    А где вы этот код выполняете?

    Вообще единственный быстрый и адекватный способ это сделать - именно поиск-замена в базе данных. Можно не делать прямо в самой базе запросом, а воспользоваться WP-CLI и ее командой wp search-replace.

    Синтаксис приведенной вами команды вроде в порядке:

    UPDATE table_name
    SET column_name=REPLACE( column_name, 'text_to_find', 'replace_with_this' );
    Ответ написан
  • Где получить сертификат по WordPress?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    У Upwork тоже можно пройти тест. Дают ли сертификат - хз, никогда в жизни не понимал зачем они нужны, кроме каких-нибудь энтерпрайз-инструментов, без которых в корпоративном секторе с тобой разговаривать даже не станут (SAP и все такое).
    Ответ написан
  • Как в плагине carbon-fields динамично добавлять поле?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    Это называется рипитер (repeater field). В Carbon Fields смотрите Complex Field и Repeating Groups.
    Ответ написан
  • Как вывести список меток в карточке товара в woocommerce?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    Например, в карточке товара код выглядит вот так:

    Нормальный код, что вас в нем смущает? Переменная $product содержит в себе объект Product со всеми свойствами и методами. Это расширенный аналог объекта Post, только от WooCommerce.

    мне нужно выводить в карточке товара фразы по типу: "Нет в наличии", "Под заказ" и т. п. Ничего более умного, кроме как делать это через метки я не придумал.

    Зачем? У WooCommerce есть управления наличием товаров (Stock Management, не знаю как оно правильно в русской версии). И вся эта информация потом будет доступна в $product.

    Проблема в том, что метки тоже не выводятся. Я пытался между Артикулом и Ценой добавлять различный код, найденный в инете. Либо сайт падает с 500 ошибкой, либо ничего не меняется.

    Добавлял в functions.php код и вставлял шорткод в тоже место. Тоже не работает.

    Судя по всему вы не разработчик, поэтому оно вам так тяжело дается. Но вы совершенно не туда копаете. Советую обратиться к специалисту по WooCommerce, он решит эту задачу быстро и эффективно. Обучать вас на Тостере работе с платформой WooCommerce, основам ООП - не вариант.
    Ответ написан
  • Какой плагин использовать на вордпресс для определения геолокации?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    Первое что нужно понимать - геолокацию лучше всего делать на уровне сервера. У Nginx и Apache есть для этого модули, многие сервисы типа CloudFlare (если вы используете) делают геолокацию и передают данные в заголовках. В обеих случаях данные геолокации будут доступны в массиве $_SERVER. Это обеспечит максимальную производительность. Есть еще вариант на уровне модуля PHP, но имхо это полумера. Ну а если это на уровне PHP (а тем более на уровне WordPress), то скорость будет желать лучшего. Для геолокации нужно сверить IP по огромной базе данных. На уровне сервера это бинарный файл и все оптимизировано до максимума. На PHP это все runtime и крайне неэффективно.

    Впрочем, если вам все равно нужно простое и быстрое решение в виде плагина, несмотря на все недостатки - смотрите тут https://wordpress.org/plugins/tags/geolocation/.

    Есть еще вариант запрашивать сторонний API, передавая ему IP-адрес, но это вообще адски медленная муть по сравнению с серверной геолокацией.

    Дополнительно не забудьте учесть, что так или иначе данные геолокации вам будут доступны на уровне PHP. Это означает, что если вы используете плагин для кеширования страниц целиком (full page cache), то WordPress в этом случае не запускается вообще (а то и PHP не запускается - зависит от реализации механизма FPC). В этом случае придется опираться на Javascript. Для этого есть HTML Geolocation API, но он эффективен на устройствах с геолокацией и запрашивает у пользователя разрешение на доступ к данным геолокации. Более надежным (но менее производительным) будет что-то из разряда https://dev.maxmind.com/geoip/geoip2/javascript/. Ну или аналоги ищите.
    Ответ написан
  • WP ко всем адресам добавлен pagespeed, как избавиться от этого кеша?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    Возможно плагин записал настройки в .htaccess на сервере, или в процессе настройки просил вас это сделать руками, а вы уже забыли об этом. Ибо если посмотреть HTTP-заголовки конкретно этого (и некоторых других) файла то там есть x-page-speed: on, что означает что удалили вы явно не всё.

    Update: И как подсказывает Дмитрий в комментах, скорее всего это модуль PageSpeed для Apache. Вам его нужно отключить.
    Ответ написан
  • Как дать клиенту прямую ссылку на покупку через WooCommerce?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    Грубо:
    function prefix_automatically_add_to_cart()
    {
    	// Сначала решите как будете передавать ID товара - через 
    	// GET в ссылке, через кастомный rewrite, POST, куки и тд.
    	// Далее, здесь получаете этот ID, в зависимости от решения выше.
    	$product_id = 1;
    
    	if ( WC()->cart->get_cart_contents_count() === 0 ) {
    		// Програмно добавляем товар в корзину
    		WC()->cart->add_to_cart( $product_id );
    
    		// Переадресовываем на корзину (или чекаут)
    		wp_redirect( WC()->cart->get_cart_url() );
    		// wp_redirect( WC()->cart->get_checkout_url() );
    		
    		die;
    	}
    }
    add_action( 'template_redirect', 'prefix_automatically_add_to_cart' );
    Ответ написан
  • Theme check выдает ошибку get_post_format and/or has_post_format как исправить?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    Theme Check не говорит что тут ошибка, он как бы спрашивает WTF?! - вы декларируете поддержку Post Formats с помощью add_theme_support(), но в реальности нигде их не используете. Таким образом он вам как бы намекает - либо крестик снимите, либо трусы оденьте.

    Добавьте реальные Post Formats в код темы:

    - определение формата в Loop при выводе записей функциями has_post_format() и get_post_format()
    - модификация вывода в зависимости от формата (или назначение кастомного CSS класса)
    - добавьте CSS стили для этих кастомных классов

    Либо уберите их поддержку. Потому что сейчас вы врете потенциальному пользователю/покупателю - говорите что есть поддержка, но самой поддержки на самом деле нет.
    Ответ написан
  • Как скрыть логотип ВК на Англо-язычном сайте?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    "Англоязычность" сайта у вас наверняка определяется на уровне WordPress/PHP, так что и скрывать логотип имеет смысл там же. То есть, возвращать с сервера страницу вообще без этого логотипа, а не костылями JS/CSS пытаться скрыть его присутствие.

    Ну а как конкретно это сделать - зависит от того, каким плагином / методом у вас реализована многоязычная поддержка. Обычная проверка:

    // Спрашиваем у плагина какой текущий язык
    $current_language = some_plugin_function_to_get_current_language();
    
    if ( $current_language !== 'en' ) {
        // Вывод кнопки ВК
    }
    Ответ написан
  • Как отредактировать create_function() в wordpress?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    Анонимная функция:

    $conditional_function = function() {
        return cherry_condition($options_type[$id], $options[$id], $users[$id]);
    }
    $conditional_result = $conditional_function();
    Ответ написан
  • Как закэшировать отдельный шаблон wordpress?

    HeadOnFire
    @HeadOnFire Куратор тега WordPress
    WordPress & Laravel Evangelist
    Вам понадобится посмотреть код плагина кеширования и найти то место, где можно включиться и помочь ему понять, что если wp_is_mobile() у нас true, то берем (или создаем и берем) мобильный кеш, если false - десктопный. Если используется их метод кеширования через mod_rewrite, то и настройки этих rewrite надо будет подкрутить, на уровне сервера определяете desktop/mobile.

    В описании плагина есть:

    8. Enable/Disable cache option for mobile devices


    То есть, плагин уже умеет различать девайсы, по определению. Возможно стоит поискать есть ли у него там хуки.
    Ответ написан