Ответы пользователя по тегу WordPress
  • Как показать блок в header везде кроме постов?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    if ( ! is_single() ) {
        // код будет выполнен только если это одна запись и ее тип не страница или аттачмент 
    }

    Впрочем, этот код изолирует также и любые custom post type, поэтому если надо исключить только записи типа post, то:
    if ( ! is_singular( 'post' ) ) {
        // код будет выполнен везде кроме single типа post
    }
    Ответ написан
    Комментировать
  • Что значит "Отсутствует заголовок CORS «Access-Control-Allow-Origin»"?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Произвожу стандартную замену названий директорий Wordpress, чтобы не было так ясно, что это Wordpress.

    Прекратите фигней заниматься. Это совершенно бесполезное занятие.

    отсутствует заголовок CORS «Access-Control-Allow-Origin»

    Это по кросс-доменным запросам. Настраивается на уровне сервера.
    Ответ написан
  • Написать плагин для WordPress, который в выводит код сразу после открытия HEAD?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Эта рекоммендация не шибко полезна. Забейте на нее болт.
    2. Сразу после открытия тега head должны идти служебные и самые критичные теги, а не аналитика.
    3. Чтобы поместить код в head, используйте вывод в хуке wp_head.
    4. Можно также подгружать через wp_enqueue_script с параметром $in_footer равным false (или его опусканием, так как false является значением по умолчанию)
    Ответ написан
  • Почему созданный шаблон не появляется в списке шаблонов?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Создаем сам шаблон вида page-произвольное_имя.php

    Нет, вы немножко запутались. Если называть page-{your-page-slug}.php, то это динамический шаблон, который будет использоваться согласно иерархии шаблонов и будет использован для страницы со слагом 'your-page-slug' (например, у вас есть страница example.com/contact-us, шаблон для нее будет page-contact-us.php).

    А если вы используете именно Page Template, определяя его в комментарии в шапке шаблона, то название файла не имеет совершенно никакого значения. Я их всегда помещаю в папку templates или называю tmpl-your-custom-template-name.php

    Что касается почему вы их не видите - в последней версии WP выпадающий список шаблонов кешируется, поэтому новые шаблоны появляются не сразу. Пока что не совсем понятно - это баг или фича. Ссылки на тикеты уже дал Maksym
    Ответ написан
    2 комментария
  • Получить список выполняемых action и filters?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Сделайте себе один из лучших возможных подарков к Новому Году - выделите 1 день на то, чтобы установить и настроить Xdebug, научиться работать с ним в вашем IDE (очень рекоммендую PhpStorm), и использовать все возможности этого отладчика. Это кардинально изменит то, как вы программите.

    Пожалуйста.
    Ответ написан
    Комментировать
  • Как добавлять и удалять отдельный пункт меню в зависимости от разрешения экрана динамически?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    В принципе, у WordPress есть полезная функция wp_is_mobile(), которая возвращает булевое true/false. Она разделяет десктопы и мобильные устройства (планшеты, смартфоны). И это происходит на стороне PHP, то есть – на сервере. Впрочем, в вашем случае лучше решать с помощью CSS и media queries.
    Ответ написан
  • Почему тормозит SELECT запрос (выполняется 0.5 сек)?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Вообще по поведению похоже на обычную работу кеша. Данные обновились, кеш инвалидируется и холодный запрос занимает 0,5с. После его выполнения результат кешируется, поэтому последующее выполнение запроса происходит "мгновенно". Грубо говоря, 0,5с - это и есть реальное время выполнения этого запроса. Вот только почему у вас нету такого с wp_postmeta - вот это уже интересно.
    Ответ написан
    3 комментария
  • Нагрузка на Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Количество записей не имеет особого значения. И 300к записей - это не много.
    2. Если у вас много фильтров (а значит много метаданных и поиск надо делать по ним) - используйте ElascticSearch + ElasticPress.
    Ответ написан
    Комментировать
  • Как сделать на wordpress функцию get_posts?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Функция get_posts() является оберткой для WP_Query. Соответственно, все аргументы надо смотреть там. Аргумент 'title' должен быть строкой, а вы ему массив передаете. Поэтому он его и не понимает (и не должен). И больше одного title он тоже не поймет, ибо строка. Поэтому "элементов там может быть несколько" - не совсем понятно о чем вы и чего пытаетесь добиться.

    Я так подозреваю, что $_POST['choice'] это у вас из селекта прилетает. Так вот, я б на вашем месте в value тега option в селекте этом подставлял ID записей, а не title. Тогда их множественно можно забирать.

    Но из вашего описания сложно понять что именно вам надо. Отсюда - одни догадки. Опишите задачу более детально.
    Ответ написан
    Комментировать
  • Как сохранять большое количество продуктов в wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Я бы запилил через CLI, сам скрипт может быть и на PHP, или как расширение для WP-CLI. Им брал бы по одной записи из АПИ, записывал в WP/WC через REST API и писал подробности в лог. Отдельно написал бы простой аггрегатор / просмотрщик лога, чтобы удобно было смотреть результаты. А дальше запустил бы это все и ушел спать. В дальнейшем другой CLI-скрипт на кроне, который бы сверял данные между сторонним АПИ и WP/WC и синхронизировал данные с помощью первого скрипта.
    Ответ написан
  • Отображение анонсов статей на главной?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Несколько дней назад отвечал на аналогичный вопрос.

    Кратко суть:

    1. Если у вас страница назначена как главная, глобальный (основной) WP_Query будет содержать данные этой страницы (это у вас сейчас).
    2. Если страница не назначена, то глобальный WP_Query будет содержать последние записи (так у вас было раньше и они выводились).
    3. Лечится произвольным WP_Query и циклом для вывода анонсов. По ссылке есть ссылка на документацию с примерами, также гуглите wordpress secondary loop или wordpress вторичный цикл.
    Ответ написан
    1 комментарий
  • Ошибка при подключении jquery к теме wordpress, как решить?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Вывод ошибки оформите в теге code, удобнее читать
    2. Добавьте код подключения jQuery-плагина bic calendar и twitter bootstrap.

    Исходя из ошибки, jQuery подкючился и работает. Кроме него, плагину bic calendar нужна еще библиотека twitter bootstrap. Ну и сам плагин, естественно.
    Ответ написан
  • Как вернуть шрифт в админку WordPress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    wp-includes перезалейте
    Ответ написан
  • Как вывести thumbnail?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Функция the_post_thumbnail() работает только внутри WordPress Loop, потому что берет post_id (у какого поста картинку взять) из глобального $post. В вашем случаем используется обычный foreach, глобальный $post не заменяется, поэтому post_id надо передать явно через функцию верхнего уровня:
    echo get_the_post_thumbnail_url( $recet['ID'], 'large', );
    Ответ написан
    Комментировать
  • Почему цыкл в функции Wordpress при обновлении через ajax выводит только последний пост?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    У вас $post_ids скорее всего содержит строку вида 1,2,3. Сделайте из нее массив:

    'post__in' => explode( ',', $post_ids ),
    Ответ написан
    Комментировать
  • Как убрать 'category' из url без плагинов и не через htaccess?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Не советую этого делать, ничем хорошим это обычно не заканчивается. Уже сто раз тут на Тостере спрашивали, делали вопреки рекоммендациям этого не делать, а потом жаловались что что-то не так работает.

    Смотрите в сторону custom post types.

    Если вам нужно разделить записи и новости, то я бы делал стандартные записи (posts) новостями, для этого создал страницу со слагом news, назначил ее как страницу записей, а пермалинки переименовал бы в /news/%postname%/. После этого все новости у вас станут доступны по адресу /news/слаг-конкретной-новости/, а архив всех новостей - /news/. А вот записи (если нужно их использовать для чего-то другого) надо делать как custom post type, со своей произвольной структурой. Либо наоборот, для новостей создаете custom post type, а записи оставляете для чего-то еще.
    Ответ написан
    Комментировать
  • Почему не отображаются записи в цикле?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Главный цикл WordPress (Main/Primary Loop) использует для вывода главный запрос, то есть WP_Query (Main Query). Если главная страница не назначена, то главный запрос будет содержать последние записи. Если вы назначили главной страницу, то этот запрос будет содержать только одну эту страницу и ее контент, вместо записей. Чтобы вывести записи на такой главной странице, вам нужен вторичный цикл (Secondary Loop). Создаете новый запрос с помощью new WP_Query(), передав необходимые аргументы, и выводите вторым циклом. Подробнее об этом есть в документации.
    Ответ написан
    2 комментария
  • Как сделать шорткод с php внутри?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Используйте обычную конкатенацию.
    2. Проблема в том, что the_title() выводит тайтл, а в шорткоде вам нужно возвращать его. Для этого есть get_the_title():
    function shorcode_title( $atts ) {
      return '<p>' . get_the_title() . '</p>'; 
    }
    
    add_shortcode( 'title', 'shorcode_title' );
    Ответ написан
    2 комментария
  • Почему не работает новый созданный шаблон?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Сегодня уже пролетало, в последней версии WP для списка доступных шаблонов добавили кеширование, вплоть до 1 часа. Поэтому новые шаблоны могут появляться в списке не сразу. В данный момент считается багом (я не успел вникнуть в суть) и вроде бы должно быть изменено в лучшую сторону.
    Ответ написан
    1 комментарий
  • Что такое apply_filter в хуках и как используется?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Apply_filters не в хуках, это и есть хук :)

    Если не вдаваться в разъяснения в виде кода (это уже хорошо сделал WP_Panda), то человеческими словами это работает так:

    1. В каком-то месте у вас есть значение. Вы его определили или получили откуда-то. Но вы хотите дать возможность другим разработчикам менять это значение, при этом не меняя ваш код. В примере панды это имя Vasya.

    2. Чтобы дать возможность другим изменить ваше значение, вы оборачиваете его в функцию apply_filters, даете этому фильтру какое-то название (в примере панды - change_vasya_name), и передаете в эту функцию саму переменную, которая содержит ваше значение (Vasya).

    3. Другой разработчик пишет свою функцию, которая подключается к этому фильтру по его имени - add_filter( 'change_vasya_name', $text ) - и эта функция на лету примет на входе то значение, которое определили вы (Vasya), может его заменить/изменить (например, на Petya) и вернуть обратно.

    4. WordPress когда читает код всех файлов собирает все фильтры в одну стопочку, и их коллбеки (см. п. 3) раскладывает тоже по стопочкам, каждому фильтру свои коллбеки. На одном фильтре может быть много коллбеков (функций). Далее он сортирует их по приоритетам и выполняет по очереди. Таким образом, вместо того, чтобы просто взять ваше значение (Vasya) и использовать дальше его, WP посмотрит, есть ли на этом фильтре функции, если да - выполнит их и вместо Vasya уже будет использовать то значение, которое вернет последний фильтр (в нашем случае он один и возвращает Petya).
    Ответ написан
    2 комментария