• Как сделать редирект ссылки?

    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 комментарий
  • Под какой браузер вы верстаете в первую очередь?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Есть такие концепции как Mobile First и Progressive Enhancement. Вот если им следовать, то проблема исчезает сама по себе (ну или в крайнем случае минимизируется). Сначала верстаем под максимально простое и примитивное, включая какой-нибудь дубовый мобильный браузер или старый ИЕ. И только когда для динозавров все ок, начинаем прогрессивно накручивать покер со всем сопутствующим. Каждый этап мониторится во всех браузерах и версиях, упомянутых в ТЗ проекта, пошагово а не "все сверстали под хром, а потом смотрим в остальных и держим кулачки".
    Ответ написан
    Комментировать
  • Большое время между 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 комментария
  • Влияет ли SSL сертификат от Let’s Encrypt на ранжирование в Google?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Руководитель ... сказал за-за этих сертификатов Google понизит в выдаче сайт.

    Я бы за такую чушь вашего руководителя понизил в зарплате, а то и в должности.

    пруфы нужны. Может есть какой-то комментарий Google на этот счёт?

    Пруфы нужно не с вас спрашивать, а с вашего руководителя.

    По сути:

    1. Не важно кем выдан сертификат, пока он подписан действительным рутом. Все валидные сертификаты одинаковы с точки зрения поисковика.
    2. Сертификаты Let'sEncrypt имеют кросс-подпись IdenTrust, то есть подтверждены другим (и серьезным) authority.
    3. Гугл (как и многие другие) непосредственный спонсор Let's Encrypt, да еще и имеет самый высокий статус - Платинум спонсор.
    4. Вот тут Google Cloud Services предлагают своим облачным клиентам сертификаты Let's Encrypt. Интересно, почему?
    5. А вот тут Google черным по белому поддерживает:

    Ongoing efforts to bring encryption to everyone

    To help site owners migrate (or originally create!) their sites on HTTPS, we want to make sure the process is as simple and cheap as possible. Let’s Encrypt is a free and automated certificate authority that makes securing your website cheap and easy. Google Chrome remains a Platinum sponsor of Let’s Encrypt in 2017, and has committed to continue that support next year.
    Ответ написан
    Комментировать
  • Максимальный вес JS файлов?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    У каждого проекта должен быть "бюджет", так называемый performance budget. Исходя из него можно сказать сколько будет "много", а сколько - "в самый раз". Необходимо адекватно понимать, что браузеру нужно не только скачать, но и распаковать, проанализировать и выполнить. При чем если вы бандлите стопиццот слайдеров и прочих jQuery-плагинов, все это будет делаться со всеми, даже если на конкретной странице используется только один из плагинов. Самая главная проблема с этим - это даже далеко не загрузка этих файлов, а именно parse, execute и render time в браузере. Идеальный вариант - как можно меньше. Но в реальности - нужно исходить из баланса - время на разработку (кастомная ванилька под нужные браузеры отнимет больше времени чем паклепать на jQuery), производительность у конкретной ЦА (если 80% на мобилах и далеко не iPhone 7, то даже 200Кб распакованного скрипта будет заметно тупить).
    Ответ написан
    Комментировать
  • Вопрос как можно из удаленного хоста загрузить файл на локалку?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Чтобы скачать файл с удаленного хоста на локальный, с локального выполняем:

    scp username@remote:/file/to/send /where/to/put

    Где,
    username@remote - удаленный хост и юзер на нем
    :/file/to/send - абсолютный путь к нужному файлу на удаленном хосте
    /where/to/put - абсолютный путь к целевой папке на локальном хосте
    Ответ написан
    Комментировать
  • Какие есть недорогие VPS с большим объемом дискового пространства?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Amazon - маленький instance для computing-задач и S3 для складирования. Или аналог от Google Cloud. Вполне можно у обеих уместиться в Free Tier, то есть или не платить вообще, или платить копейки. Хотя да, придется вложить немного времени и усилий чтобы разобраться с их архитектурой и настроить все нормально под себя (это если нет опыта).
    Ответ написан
    Комментировать
  • На 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 комментария