Ответы пользователя по тегу WordPress
  • Как настроить доступ к сайту к WordPress по Api через WooCommerce?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Установил плагины WP REST API

    Не нужно его устанавливать, он давно уже является частью ядра WP, а данный плагин уже deprecated.

    По доступам:

    woocommerce.github.io/woocommerce-rest-api-docs/#a...
    woocommerce.github.io/woocommerce-rest-api-docs/?p...

    В той же документации:

    401 Unauthorized – Authentication or permission error, e.g. incorrect API keys
    Ответ написан
    2 комментария
  • Как сделать редирект ссылки?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Во-первых, понадобится создать страницу со слагом 'out' или же кастомное правило rewrite с таким же слагом.
    Во-вторых, понадобится научить WP разпознавать GET-переменную 'url'.
    Во-третьих, на эту страницу или request (в случае с rewrite rule) надо повесить функционал, который будет проверять эту GET-переменную 'url', убеждаться что она безопасна и корректна, и выполнять переадресацию

    Это чисто функциональная часть, обработчик самого редиректа по такой схеме.

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

    Я вам тут описал логику работы, полный ответ с примерами кусков кода выходит за рамки Тостера, это задача для фриланса. Если хотите попробовать сами решить - перечитывайте логику и начинайте работать. По мере появления более узких и конкретных вопросов - задавайте.
    Ответ написан
    5 комментариев
  • Как настроить отображение нужных частей записи в Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Боюсь, вы взялись за очень амбициозную задачу, если:

    Кроме кодекса, там очень все сложно, я совсем начинающий и пытаюсь почти с нуля создать свою тему. PHP тоже не знаю, но на примере смогу понять


    Потому как разработка кастомной темы, а тут еще и кастомной платформы по недвижимости по сути - это весьма нехилый кусок работы и тут вам понадобятся:

    - полноценные, хорошие знания WP - ядра, запросов, хуков итд
    - полноценные, хорошие знания PHP - ибо WP написан на PHP и все, кроме верстки, у вас будет связано с PHP
    - хорошие знания SQL, потому как в вопросах той же фильтрации контента без этого не обойтись

    Отвечать по самому вопросу не буду, потому как тут талмуд надо. Да и его будет мало, потому что 95% успеха в этой задумке - это опыт и понимание как строить сложный и потенциально нагруженный проект. Если этого нет, проект не взлетит, ибо:

    - во-первых, вы его вряд ли сделаете в разумные сроки и в приемлемом виде, но даже если, то см. дальше
    - его попросту не пропустят на популярные площадки типа ThemeForest, по уровню и качеству решений просто уйдет в отказ
    - даже если каким-то чудом пройдет (но нет), то оно не выдержит критики пользователей-покупателей, ибо работать будет "так себе", расширять-допиливать без боли не получится (а допиливать надо всегда)

    Вывод - возьмите сначала задачу попроще. На ней изучите PHP и WordPress немного основательнее. А уже потом беритесь за амбициозные проекты.

    И еще бонус-новость - для успеха своей "премиум-темы" сама тема и ее качество имеют даже не первостепенное значение. Самое главное - Его Величество Маркетинг. Без него (и вливаний в него) даже хорошие продукты пролетают мимо, никем не замеченные.
    Ответ написан
    1 комментарий
  • Advanced Custom Fields - Как вывести значения поля?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Артибут - это термин кастомной таксономии. Вам нужно получить его ID или объект WP_Term, уверен, это не будет проблемой. Имея ID/WP_Term, значение его поля получаете одним из способов:

    get_field( 'field_name', $taxonomy . '_' . $term_id );
    get_field( 'field_name', 'term_' . $term_id ); // Доступно только в версии 5.5.0 и выше
    get_field( 'field_name', $term_object );


    Все это есть в доках.
    Ответ написан
    7 комментариев
  • Как изучать платформы(Wordpress и тд)?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Учить английский. На русском инфы очень мало, к тому же в основном устаревшая. Если сравнивать с английским, то ее вообще критически мало, особенно актуальной и качественной.
    2. wp-kama.ru
    3. Запускаете Xdebug с остановкой в начале выполнения и шагаете по всему процессу. Смотрите и изучаете что происходит и как работает движок.
    4. Далее изучаете уже с Xdebug отдельные интересующие фрагменты.
    5. Читаете и изучаете сам код ядра.
    6. А потом то же самое с разными плагинами.
    Ответ написан
    Комментировать
  • Как настроить ЧПУ на wordpress apache+nginx?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Зачем вам Apache? Используйте Nginx + PHP-FPM, тогда для ЧПУ надо всего лишь одну строчку в конфиге Nginx.
    2. Если все-таки Apache нужен, настраивайте ЧПУ в .htaccess. Nginx в данной связке всего лишь форвардит (проксирует) запросы на Apache, а их обработку производит последний.
    Ответ написан
    Комментировать
  • Как вывести произвольное поле (ACF) продукта на странице корзины Woocommerce?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Значения полей получаются через API-функцию ACF get_field() (или the_field). Первым параметром передается название поля, вторым (необязательным) - ID записи, с которой это поле связано (еще есть термины, юзеры, опции - но это данного вопроса не касается). Возьмите ID записи продукта и передайте в функцию:

    the_field( 'field_name', $product_id );
    Ответ написан
  • Выводить id taxonomy?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Еще проще - get_queried_object_id()
    Ответ написан
    Комментировать
  • Как получить таксономию нижнего уровня на странице поста?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    php.net/manual/en/function.array-reverse.php

    $terms = get_the_terms( get_the_id(), 'category' );
    $terms = array_reverse( $terms );
    echo $terms[0]->term_taxonomy_id;
    Ответ написан
  • Tag_id link for current country?

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

    Во-вторых, чтобы ссылка на один термин одной таксономии учитывала другой термин другой таксономии, вам нужно или комбинировать их в урл (привет, custom rewrite rules, ну или на крайняк добавлять GET-параметром), либо сохранять выбранный термин из таксономии "страна" между страницами - например в куках. По другому WP совершенно никак не может догадаться о том, что при выборке по taxonomy=XXX&term_id=7 должно еще применяться AND taxonomy=YYY&term_id=Z
    Ответ написан
    1 комментарий
  • Большое время между Core init и Main Loop. Где копать?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    5ae8677286270930142007.jpeg

    1. Обновите плагин до 2й версии, там дополнительные данные появятся.
    2. Core init - это условное событие, по сути сумма основных действий на хуке init.
    3. Main Loop - это уже момент выполнения основного цикла.
    4. Важно понимать, что между 2 и 3 происходит еще достаточно много чего, в том числе запросы к БД - посты, их метаданные, термины таксономий и их метаданные, выборка пунктов меню и их метаданных, некоторые опции, а также подключение темплейтов и сборка последующего вывода. На это тратится определенное количество времени, часто - существенно больше, чем на инициализацию ядра. В вашем случае тратится весьма много.
    5. Чтобы более подробно смотреть что происходит "под капотом", необходимо делать профилирование кода - смотрите в сторону Xdebug и его профайлера, в сторону XHProf/Tideways, Blackfire.io и тд.

    Грубо говоря, между Core Init и Main Loop и должна быть "задержка", но это вовсе и не задержка, в это время происходит много чего. Насколько эта задержка большая - зависит от вашего кода, базы, настроек сервера и тд.
    Ответ написан
  • WordPress. get_posts compare с значением ID?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Во-первых, meta_query делает подзапрос по таблице wp_postmeta, а не wp_posts, и в таблице wp_postmeta поля ID нет - там есть post_id и meta_id.
    2. Для решения вашей задачи подойдет фильтр posts_where, с помощью которого вы можете добавить WHERE ID >= $currentid.
    Ответ написан
    Комментировать
  • Как измененить ключевое поле при просмотре постов в админке?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Когда вы отключаете Title у Custom Post Type, он все еще остается в таблице wp_posts, и вообще-то нужен. Отключается только его UI в админке. Чтобы поле в БД не пустовало, WP генерит ему дефолтное значение. Можно вместо этого устанавливать свое собственное, какое угодно:

    function my_custom_title( $data, $postarr ) 
    {
        if( $data['post_type'] === 'my-post-type' ) {
            // вот тут присваиваете нужное вам значение
            // посмотрите что в массиве $postarr, там должно быть ваше кастомное поле
            $data['post_title'] = 'my post title'; 
        }
    
        return $data;
    }
    add_filter( 'wp_insert_post_data', 'my_custom_title', 10, 2 );


    https://wp-kama.ru/hook/wp_insert_post_data
    Ответ написан
  • Страницы wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Для терминов разного типа нужно создавать отдельную таксономию. Как дефолтные теги и категории. В вашем случае:
    - Таксономия 1 - страны
    - Таксономия 2 - другие термины (Природа, Развлечения и тд)
    Ответ написан
    2 комментария
  • На Upworke JSS 81 и не выходит взять проект?

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

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    без плагинов

    Меня всегда улыбает, когда люди пишут эту фразу...

    Плагины в WP - это просто куски кода. Тот же код в плагине или в functions.php делает ровно то же самое. Единственное исключение - это если плагин еще предоставляет страницу настроек, а вам она не нужна - тогда качаете плагин, открываете код и копируете оттуда ровно то, что вам надо. В общем, вопрос не в том, использовать плагин или нет, вопрос исключительно в том, насколько хорош его код. То же касается и "код в functions.php" - туда тоже можно впихнуть какую-то гадость.

    А теперь конкретно по вопросу комментов: Устанавливаете плагин Disable Comments и закрываете вопрос раз и навсегда.

    Если прям совсем мешает лишний плагин в списке - открываете его код, удаляете все лишнее, оставшееся копируете куда там вам удобнее и используете в таком виде. Но я не вижу совершенно никакого смысла в этом (а я фанат производительности и вырезания лишнего кода), в данном случае плагин решает вопрос максимально эффективно.
    Ответ написан
    2 комментария
  • Как узнать, что нагружает wordpress и увеличить скорость загрузки сайта?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Так, для начала стоит понять, что кеширование не устраняет проблему, а только маскирует. Ну а если даже с включенным кешированием загрузка больше 1-2 секунд, то там прямо таки катастрофа какая-то внутри, так быть не должно вообще. Грубо говоря, где-то есть какие-то участки, на которых прям большое красное табло должно быть с мигающей надписью SYSTEM ERROR. Прям совсем что-то дикое.

    Второе - говорить "какой-то плагин тормозит" некорректно. Тормозит всегда код. Конкретный участок конкретного кода. И не важно в каком он плагине, в теме или еще где. Надо находить именно узкий участок и корректировать.

    Что делать? Во-первых, развернуть локальную копию. Это как минимум даст понять, насколько на ситуацию влияет хостинг. Если локально все намного лучше - менять хостинг 100%. Если не очень - включаем отладку, анализируем с помощью Xdebug и профилирования. Выявляем узкие места (а их там точно хватает) и потихоньку устраняем.

    Если это небольшой фриланс-проект с апворка с fixed-price $50 долларов - лучше не тратить время, отдать клиенту, вернуть деньги и закрыть контракт. Если бюджет на эту возню есть - тогда копать как я написал выше.
    Ответ написан
    Комментировать
  • Как исправить ошибку 404 при пагинации?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Никогда не используйте query_posts. Никогда. Сломанная пагинация - это первая проблема, которая всплывает от query_posts. То, что вам нужно (ограничение в 2 поста на странице) делается через хук pre_get_posts.
    Ответ написан
    4 комментария
  • Как использовать одну базу пользователей на 2х сайтах wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    С помощью констант в wp-config.php можно указать кастомные таблицы wp_user / wp_usermeta. Укажите одни и те же для обеих сайтов в их конфигах:

    define( 'CUSTOM_USER_TABLE', $shared_table_prefix . 'my_users' );
    define( 'CUSTOM_USER_META_TABLE', $shared_table_prefix . 'my_usermeta' );
    Ответ написан
    4 комментария