Ответы пользователя по тегу WordPress
  • WordPress, как скрыть информацию из профиля пользователя от поисковиков?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Для начала уточните - это публичные профили, или приватные (для их просмотра надо авторизоваться). Если приватные - забудьте и спите спокойно, роботы не будут регистрироваться, авторизовываться и индексировать закрытые части сайта. А если профили публичные - тогда, имхо, публичные данные и должны быть доступны для индексации.
    Ответ написан
  • Как переходить по ссылке с параметрами и не словить 404 в WordPress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Из коробки все должно работать - во-первых, ссылки со слешем и без должны быть рабочие, обе (на одной из них редирект), а во-вторых, GET-параметры совершенно никак не должны влиять. Дело, вероятнее всего не в WordPress, а в настройках вашего сервера.
    Ответ написан
    1 комментарий
  • Откуда в Яндекс вебмастере берутся ссылки с параметрами "?p="?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Ну вообще это прямой не-ЧПУ урл, параметр pавен ID записи. Откуда его берет поисковик? Проверьте canonical url и shortlink в head.

    5e774c4cbb4dc253041801.jpeg
    Ответ написан
  • Почему не отображатся custom posts в категории?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если речь о встроенной таксономии category, то для корректной работы необходимо корректно связывать custom post type с ней. Вместо 'taxonomy' => [ 'category' ] попробуйте сразу после вызова register_post_type() добавить:
    register_taxonomy_for_object_type( 'category', 'news' );
    Ответ написан
  • Как добавить в результаты поиска страницы, данные на которых выведены через WP_Query?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Вы неправильно понимаете механизм поиска. По умолчанию поиск ищет по таблице wp_posts в полях post_title и post_content. Шорткоды ваши в post_content хранятся в оригинальном виде, а не результирующем тексте (выводе шорткода). По той же причине не попадают в поиск результаты WP_Query в шаблоне страницы - потому что эти данные не хранятся в post_content.

    Пробуйте решить задачу через фильтр posts_search, используйте плагин для расширенного поиска или пишите свой поиск со своим произвольным запросом.
    Ответ написан
    Комментировать
  • Можно ли с помощью формы на странице сайта добавить новое поле в повторителе плагина ACF?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Можно.

    См. пункт правил 5.12. Задачи и задания.
    Ответ написан
    Комментировать
  • Как из ACF получить значения группы полей для всех записей?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    SELECT * 
    FROM `wp_postmeta` 
    WHERE `meta_key` = 'field_name';

    Для более детального ответа уточните ваш use case. Чем более детально описана ситуация / проблема, тем более точно на нее можно ответить.
    Ответ написан
  • Как деплоить правки?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Во-первых, запомнить раз и навсегда 2 простые истины:

    1. Продакшн база данных должна быть только на продакшне и больше нигде. Эти данные нельзя as-is использовать локально - в том числе по причинам юридическим и privacy (привет логины-пароли клиентов, их персональные данные и тд). Грубо говоря, за это можно и пострадать.
    2. Локальная / development база данных работает только с тестовыми / посевными данными.

    Между ними никакой синхронизации не должно быть, никогда. От слова совсем. И WordPress тут вообще ни при чем - эта проблема существует и в Laravel, Symfony, Ruby on Rails и тд. Просто там с нуля сразу учат решать ее правильно. Впрочем, продакшн-данные можно (и даже нужно) использовать как пример для генерации локальных данных. Например, в production БД можно посмотреть какие реальные first name и last name используются юзерами, чтобы улучшить валидацию и/или отображение.

    Как с этим жить?

    1. Для переноса изменений структуры базы данных используются миграции. В WordPress для этого есть dbDelta().
    2. Для переноса посевных данных используются посевы (seeds). Например, если нужно залить список терминов в глоссарий (custom taxonomy), заполнить список отделов компании и тд - все это сеется.
    3. Все остальное (настройки мышкой в админке, добавление контента и тд) делается руками. Локально вы вообще не должны даже думать о том, чтобы создавать какие-то страницы 1 в 1 с рассчетом на то, что потом будете их как-то "синхронизировать" на боевой сервер. Это в корне неправильный mindset, который и привел вас к этой проблеме. На локальной версии вы все тестируете с тестовыми данными. Даже если вы не используете lorem ipsum, а вставляете реальный текст предоставленный клиентом - это все равно тестовые данные.
    4. Чтобы сайт не ломался в процессе выкатывания изменений (когда код залили, а контент еще делается) код нужно писать с учетом этой логики (опять же - дело в mindset). Например, есть такое понятие как feature flags, есть function_exists(), есть isset(). Ваш код должен работать корректно всегда - например, если данные для какого-то блока не заполнены, то блок не выводится вообще.
    Ответ написан
    Комментировать
  • Почему код не отрабатывает из-за кода сверху?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    <?php the_field('important__title', $post->ID); ?>

    Функция the_field() принимает 2 параметра - название поля и ID объекта, которому это поле принадлежит (выборка значения из БД происходит по этим 2м параметрам). Если второй параметр не указать, то ACF попытается использовать ID глобального $post. И если делать это в рамках стандартного цикла WordPress Loop, то это всегда будет работать как положено, отсюда привычка вызывать the_field() без второго параметра. Но у вас нету глобального цикла, соответственно глобальная $post - скорее всего вообще пуста. Поэтому вам нужно принудительно передать ID нужно поста, в данном случае - 34, если поле принадлежит записи которую вы получали выше. Если же должно принадлежать глобальной записи - не используйте переменную $post.
    Ответ написан
    3 комментария
  • Как сделать такой быстрый сайт?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Скорость загрузки 93/100

    Во-первых, это никакая не скорость загрузки. Эти XX/100 это условный набор "требований" и "рекомендаций", которые по итогу влияют в некоторой степени на скорость, но не являются определяющими. И уж точно сами по себе эти цифры не являются "скоростью".

    https://developers.google.com/speed/pagespeed/insi...

    В целом секрет субъективно воспринимаемой вами скорости в том, что
    - сайт/сервер физически находится близко к вам (РФ),
    - сервер/хостинг весьма шустрый (Nginx, HTTP/2, Brotli и тд)
    - сам по себе сайт весьма простенький, там по определению нету чего-то тяжелого
    - он неплохо оптимизирован, не нагружен ничем лишним
    - скорее всего там кеширование в статику, полностью (PHP, и тем более MySQL даже не поднимаются)

    Если убрать метрику и прочий сторонний мусор (или хотя бы обернуть в задержку их загрузку) - будет визуально восприниматься еще быстрее. В целом, хорошая работа по оптимизации. Но никакого rocket science там нету, все описано в блогах миллион раз.
    Ответ написан
  • Как выводить динамически правильно такого вида блоки в Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Объекты эти - custom post type.
    Вывод в основном шаблоне для этого custom post type - главным циклом.
    Вывод в виде блока в другом шаблоне (главная, например) - WP_Query и кастомный цикл.
    Ответ написан
    Комментировать
  • Как задать $defaults = array() для register_sidebar?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Обертка виджетов указывается при определении сайдбара именно с помощью этой функции - register_sidebar() c помощью параметров before_widget / after_widget, и это легко переопределить:
    register_sidebar( [
        'name'          => 'My Sidebar',
        'id'            => 'my-sidebar',
        'before_widget' => '<div class="my-custom-class">',
        'after_widget'  => '</div>'
    ] );

    Default значение в самой функции менять не надо, вы не поняли как это работает. Вы либо передаете в register_sidebar() свой массив с настройками, либо если не передадите - тогда WP будет использовать $defaults
    Ответ написан
  • Как редактировать тему WordPress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Взрослые дяди и тети делают вот так:

    1. Разрабатываете локально.
    2. Все изменения под git.
    3. Атомарные изменения коммитите.
    4. Делаете push в remote repository на каком-нибудь GitHub / BitBucket / GitLab.
    5. C помощью CI/CD код билдится, тестируется и деплоится на сервер.
    6. О статусе сборки/деплоя сообщается в выбранный канал коммуникации (Telegram, Slack, email и тд).

    С точки зрения действий все очень просто и удобно - сделали локальные изменения, все ок - коммит, пуш, через пару десятков секунд или пару минут получили уведомление что все на сервере, можно смотреть. Если в процессе сборки вылезла ошибка - деплоя не будет и об этом вам тоже будет сообщено.
    Ответ написан
    Комментировать
  • Как устранить "WordPress необходим доступ к вашему серверу"?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Корректные пользователь:группа
    2. Папки рекурсивно 755
    3. Файлы рекурсивно 644

    Bonus point: ISP Manager и прочие панельки - зло.
    Ответ написан
    Комментировать
  • ACF: если вывести поля ACF через Elementor, а потом попытаться сделать их блоками для Гутенберга - нужно ли переписывать их или их содержимое?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Костыльно. Тут по определению либо одно, либо другое - Elementor или ACF. Скрестить бульдога с носорогом конечно можно - науке известны извращения куда круче - но смысла в этом ровно ноль целых ноль десятых.
    Ответ написан
    1 комментарий
  • Как разрешить пользователям публиковать свои статьи?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    По умолчанию пользователи получают роль Подписчик / Subscriber, который может только читать и комментировать. Есть еще роль Author - эти могут писать статьи, но не публиковать. После написания их статьи может (и должен) проверять редактор с ролью Editor - эти уже могут писать и публиковать как свои, так и чужие материалы.
    Ответ написан
    Комментировать
  • Elementor, Divi, WPBakery, Visual Composer, BeaverBuilder или что-то другое?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Тут для себя надо сначала решить какова конечная цель этой затеи. Если вы хотите в процессе разобраться с кодом, научиться решать с помощью кода любую задачу - тогда билдеры в сторону, берем ACF и готовимся к интересному и увлекательному путешествию. Будет дольше, сложнее, но в долгосрочной перспективе - полезнее. Если же вам надо быстро собрать вменяемый сайт, который вы запустите и дальше основное время будет уходить на контент для него, маркетинг и СЕО и подсчет заработанных денег - тогда начните с поиска подходящей темы, с дизайном который вам нравится и с функциональностью, которая вам максимально подходит. Найдете такую тему - покупайте. И пользуйтесь тем билдером, который будет в нее встроен. А на вот этих всех "писано против него" не обращайте внимания. Билдеры - это инструмент, который решает конкретные задачи. Если для вашего use case они решают задачу достаточно хорошо для ваших возможностей - значит они (или какой-то конкретный билдер) являются подходящим инструментом для вашего случая.
    Ответ написан
    Комментировать
  • Как массово генерировать сайты на Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Зачем вообще плодить клоны? Доменную часть делаете динамической, отлавливаете поддомен и в зависимости от него меняете только нужные данные на выводе. Это все один сайт.
    Ответ написан
    2 комментария
  • Как решить проблему с подключением jQuery на Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Ошибки в подключении jQuery нет. Скорее всего ошибка в подключении owlCarousel (это сам скрипт слайдера/карусели). Без вашего кода ванговать бессмысленно.
    Ответ написан
  • Как скрыть группу полей Advanced Custom Fields если поля пустые?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Вы проверяете в вашем IF не приводится ли $cions к true. Но $icons, как я предполагаю, является массивом.
    2. Сделайте var_dump($icons); перед вашим IF и посмотрите что внутри.
    3. Исходя из результата скорректируйте условие IF.

    Скорее всего у вас там массив такого вида (приблизительно):
    $icons = [
        'icon-1' => '',
        'icon-2' => '',
        ...
    ];

    А такой массив не является пустым. Пустыми являются элементы этого массива.
    Ответ написан