Задать вопрос
  • Как починить код/PHPStorm?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Во-первых, в вашем абстрактном классе лишние точки с запятой после фигурных скобок методов.
    Во-вторых, раз вы уже копипастили сюда весь код, то где у вас определяется $User?
    В третьих, у меня все работает:

    5a44c172df8c3897576880.jpeg
    Ответ написан
    Комментировать
  • Написать плагин для 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
    JOIN в MySQL является синонимом INNER JOIN. А в вашем случае, если я правильно понял ваше сумбурное описание, нужен LEFT JOIN.

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

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

    Кратко суть:

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

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Будет зависеть от состояния - внешнего вида, дисплея, клавиатуры, батареи, охлаждения. Но в целом - скорее да, чем нет. Прошки не сильно теряют в цене со временем.
    Ответ написан
    Комментировать
  • Активные окна в mac os. Как исключить автоматическое переключение активного окна?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Достаточно старая головная боль (впрочем, беспокоит не всех, многие не замечают в этом неудобства). Насколько мне известно, никаким "волшебным" способом не лечится. Есть вот такие рекоммендации, который по сути сводятся к изменению поведения конкретных приложений.
    Ответ написан
    Комментировать
  • Ошибка при подключении 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 комментария
  • Как решить проблему с Notice?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если совсем по полочкам раскладывать, то:

    - Ваша строчка 9 проверяет не равны ли captcha в $_POST и rand_code в $_SESSION.
    - Ваша строчка никак не проверяет, чтобы эти переменные существовали / были определены, поэтому когда их нет - PHP информирует вас об этом (Notice) - прямым текстом говорит, что в упомянутых массивах нет таких индексов (элементов).
    - Чтобы устранить PHP Notice, необходимо всегда проверять, заданы ли необходимые переменные:

    1. В самом простом случае:
    if ( 
        ( isset( $_POST['captcha'] ) && isset( $_SESSION['rand_code'] ) ) // переменные / индексы определены
        && $_POST['captcha'] != $_SESSION['rand_code'] // собственно, сравнение значений
    ) {
        // остальной код
    }


    2. В реальных условиях чаще всего это происходит в контексте функций / методов и когда идет ряд проверок, принято использовать подход "fail early" (вариации - quit early, bail out early) – проверки идут не вложенными, а одна за одной, наиболее ожидаемые - первыми. Пример аналогичного фрагмента кода с учетом этой практики:
    function some_method_name() {
    
        // Если индексы не существуют или они приводятся к false - выходим из логики
        if ( empty( $_POST['captcha'] ) || empty( $_SESSION['rand_code'] ) ) {
            return; // может быть return false и тд - зависит от конкретной реализации
        }
    
        // Этот код выполнится только если предыдущая проверка прошла успешно и оба индекса имеют значения с которыми можно работать дальше
        if ( $_POST['captcha'] != $_SESSION['rand_code'] ) {
            // остальной код
        }
    }
    Ответ написан
    Комментировать