• Как загрузить существующий сайт на github?

    Сергей Паньков,
    В других случаях докер прекрасен. У вас ничто ни с чем не будет конфликтовать, вы можете поднять на одном железе кучу всего с разными конфликтующими зависимостями.

    Это не более чем personal preference. Большая часть разработчиков работает с достаточно узким стеком и никаких конфликтов не бывает от слова совсем. Я например работаю с PHP (WordPress, Laravel, Symfony), Javascript/Node.js, Go - это достаточно широкий стек, значительно шире типового - на macOS это все решается нативно через homebrew - valet в качестве сервера (nginx + php), MySQL/PostrgreSQL/SQLite/MongoDB, Redis, Memcached, ElasticSearch и еще парочка сервисов. В том числе 6 версий PHP, куча legacy проектов на поддержке. И никаких конфликтов. И работает на порядки быстрее. И работать в целом с этим значительно удобнее. Ну а если уж надо 1в1 воссоздать среду продакшна, тогда Vagrant и полноценная копия. Поймите меня правильно - я люблю докер и считаю его прекрасным инструментов. Для тех задач, для которых он создан. То, для чего вы его используете, к этим задачам не совсем относится. Делать так конечно можно, но форсить это как best practice для людей без опыта devops и контейнеризации я считаю совершенно лишним. Грубо говоря, докер имеет смысл только в конкретных use cases. И если у вас есть этот use case, то у вас к этому моменту уже есть devops отдел который знает что делать.

    На счет "проще и понятнее" - это тоже лукавство. Проще и понятнее кому? Веб-мастеру с пятнадцатилетним стажем? Зелёному новичку, который задаёт такие вопросы в Q&A?

    Да в целом всем проще. В первую очередь в командной среде и для онбординга новых людей. Да, сильная сторона докера в том, что он то как раз позволяет вроде как это дело упростить, унифицируя среду. По крайней мере таков promise. В реальности же баги самого докера на разных ОС и issues которые выплывают из этого зачастую не дебажатся вообще. И это в относительно больших командах случается значительно чаще, чем вы думаете. Я считаю что для каждой ОС и для каждого стека уже есть хорошие user friendly решения. Без докера.

    всё в статику рендерилось специальная ферма, поднимаемая на несколько минут при обновлениях. В итоге сайт с овердофига страниц и отчетов держал огромные нагрузки, поскольку все страницы, включая комментарии пользователей, были доступны в виде статики. Так еще и клиентские машины не нагружались этим рендером.

    Экспорт в статику можно сделать либо на этапе CI в deployment pipeline (вот для этого докер как раз и хорош), либо вообще на ходу через nginx fascgi_cache. Использовать для этого свою ферму имхо - усложнение. По сути - самопал вместо готовых специализированных инструментов (CI).

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

    А представьте, что ни с какими архивами и докерами вообще возиться не надо. Клонируете проект в папку и делаете composer install, или ./make, или wp up. И все остальное делается само - с прода / стейджинга / посевов / shared snapshot создается актуальная база, синхронизируется UGC, ставится код и зависимости. Смысл в том, что сложности / зависимости и оптимальные процессы в разных проектах разные, и в разных командах разные. И только этот конкретный проект должен о них ведать. И в нем должен быть инструмент для разворачивания среды - будь то composer c его post-install скриптами, wp-cli c кастомными командами, gnu make, шелл скрипты - не важно. Это должно быть уникально для каждого проекта. На базе какого-то шаблона. И у каждой команды он может быть свой (например, у меня в одном из проектов все на маках, наемным разрабам маки предоставляют - значит среда именно этого проекта 100% будет оптимизирована под инструменты свойственные именно macOS). И все это в итоге ничем не хуже докера, но быстрее и эффективнее. И такое же гикое. И такое же оптимизированное и автоматизированное.

    Но, опять же - мы с вами меряемся длиной достаточно сложных use cases, и что характерно - мы оба понимаем и используем докер (пусть и в разных случаях). Мой же коммент изначально к тому, что большинство типовых проектов (а это 90% разрабов и их заказов) вообще в этом всем не нуждается. Им достаточно по FTP слить с боевого, подключить git-репу c темой/плагином и все. И для этих задач им проще/удобнее какой-нибудь openserver или mamp.
  • Как избавиться от пустого цикла без которого ничего не работает?

    godsplane, ну, потому что параметр tag у WP_Query / get_posts должен быть string, а у вас на этих страницах переменной $tags, и тем более свойства $tag->slug нету. Я бы вот так делал:

    // Default args.
    $args = [
        'post_type'   => 'portfolio',
        'numberposts' => 100,
        'orderby'     => 'menu_order',
        'order'       => 'DESC',
    ];
    
    // Tag should be handled on single entry only. 
    if ( is_singular( 'portfolio' ) ) {
        $tags = get_the_tags( get_the_ID() );
        // Make sure tag exists.
        if ($tags) {
            // Pop the last tag.
            $tag = array_pop( $tags );
            // Set 'tag' property of WP_Query.
            $args['tag'] = $tag->slug;   
        }
    }
    
    $lastposts = get_posts( $args );


    В этом случае вы устанавливаете 'tag' в запрос только тогда, когда $tag точно содержит объект WP_Term. В остальных случаях не будет ошибок и WP_Query не будет выполнять лишних телодвижений.

    Кроме этого, у вас в параметрах запроса куча лишнего:
    - suppress_filters и так по умолчанию установлен в true,
    - никогда не используйте в numberposts значение -1, используйте достаточно большое число (например - 100, 500, 1000 - зависит от конкретного случая),
    - category, include, exclude, meta_key, meta_value тут лишние
  • Как избавиться от пустого цикла без которого ничего не работает?

    godsplane, это нормальный вариант, но вам и $tag->slug в get_posts() убирать надо в идеале.
  • Как загрузить существующий сайт на github?

    Кроме контента у сайта на WP есть конфигурация. Часть конфигурации, насколько я понимаю, находится в БД, а часть может быть вынесена в файлы настроек.
    Эти файлы имеет смысл выносить в git.

    Часть конфига категорически нельзя выносить в git. Например - соли, логин-пароль для доступа в базу. Вообще, в идеале принято либо не добавлять wp-config.php в git, либо выносить sensitive данные в отдельный подключаемый конфиг и не вносить только его, либо вообще выносить значения в .env файл.

    Ваш сайт - это, в идеале, несколько docker-контейнеров:

    Да что ж все так носятся с этим докером. Это совершенно ненужная прослойка. Есть решения значительно проще и понятнее.

    Рендер делают в отдельном контейнере, иногда на отдельной машине.

    шта?? Зачем? Какой такой рендер? Вы реально усложняете простые вещи.

    Прелесть контейнеризации в том, что для бэкапа сайта нужно по факту забэкапить только БД и несколько пару докер-файлов, докер-компоуз и горсточку конфигов.

    Для переноса / бекапа сайта надо:
    - база (дамп)
    - свой кастомный код (должно быть под гитом)
    - сторонний код (сам WP, плагины и тд - в идеале должно устанавливаться/разворачиваться автоматом)
    - медиа-файлы и прочий user generated content
    - кастомный код, используемый только локально (конфиг или .env, плагины для dev-среды онли)
  • Корректно ли использовать переменные сессии браузера для передачи массива в ajax обработчик?

    Не знаю как другие, я лично ничего не понял из этого описания и без примеров кода. Одно могу сказать наверняка - данные, сохраненные в сессии, доступны только на сервере / для бекенда. На фронтенде браузер знает только об идентификаторе сессии, а не о конкретных данных в ней. Поэтому что, как и куда вы передаете - непонятно.
  • Для чего нужны МХ-записи?

    Ziptar,
    Нет, тем более, что я даже близко к разработке не имею отношения.

    Судя по тегам на которые вы подписаны, вы вообще сисадмин / интересуетесь этой темой. Так что это даже больше чем разработчик, в контексте вопроса про MX.

    Если человеку это нафиг не надо - пусть не лезет, а наймёт того, кому надо.

    Не нужно быть мудаком и вести себя подобным образом. Изменение МХ-записей для своего домена не требует найма специалиста. Это одно из тех действий, которое вполне может быть решено самостоятельно с помощью Тостера.
  • Для чего нужны МХ-записи?

    Ziptar, да, только вы смотрите на это с точки зрения разработчика, который это все знает и для него "это же элементарно". И это ключевая ошибка. Есть люди, которые не совсем понимают что такое "почтовый сервер", "домен", "доменные записи" и тд, и та тонна информации, которую вываливает гугл, совершенно не помогает - там проще потеряться, чем разобраться. Если задача стоит изучить эту область - тогда да, гугл поможет, можно будет найти массу интересных материалов и залипнуть надолго изучая все тонкости. Но если человеку это нафиг не надо? Если задача - быстро уточнить вопрос, выполнить в результате какое-то действие и забыть об этом навсегда?
  • Как очистить ключ от пробелов в meta_query?

    Александр Мищенко, это к лучшему. Меньше проблем в будущем будет.
  • Как очистить ключ от пробелов в meta_query?

    Александр Мищенко, А вот это уже не так просто. Дело в том, что сравнение происходит на уровне MySQL, в самой базе данных. Можно попробовать кастить данные в numeric и надеяться, что пробелы будут устранены:
    $recent2 = new WP_Query(
        [
            'showposts' => 100,
            'meta_query' => [
                [
                    'key' => 'cena', 
                    'value' => [2500, 2999],
                    'compare' => 'BETWEEN',
                    'type' => 'NUMERIC', // Форсируем приведение данных к числам
                ]
            ]
        ]
    );

    Попробуйте так, по идее должно сработать. Если же не сработает - остается только менять данные в базе. В этом случае разумнее всего сделать уже все по уму - изменить тип поля с text на number, программно пройтись по самим данным в базе и конвертировать (удалить пробелы).
  • Как очистить ключ от пробелов в meta_query?

    Александр Мищенко, Ну это вообще другая задача и к ней совершенно с другой стороны подходить надо. Получается что вводные данные у вас все-таки фиксированные, это массив со значениями 2500, 2999 и их очищать от пробелов не нужно. Нужно чтобы результирующий SQL запрос в сравнении мог оперировать значениями как '2600', так и '2 600', верно? И речь идет о значениях, сохраненных как произвольные поля уже в самих записях. Так?
  • Как очистить ключ от пробелов в meta_query?

    Александр Мищенко, У вас изначально в задаче стояло array(2500, 2999) - это массив из нескольких значений, отсюда появился и array_map(). Если же значение у вас одно, то достаточно одного preg_replace():
    $price = preg_replace('/\s/', '', get_field('cena'));

    А можно и сразу в самом meta_query:
    'meta_query' => [
        [
            'key' => 'cena',
            'value' => preg_replace('/\s/', '', get_field('cena')),
            'compare' => 'BETWEEN'
        ]
    ]
  • Как очистить ключ от пробелов в meta_query?

    Александр Мищенко, да не важно чей код, вы же можете любой фрагмент переписать под ваши задачи. Ну и да, такие детали как "данные приходят от ACF в виде строк" на самом деле важны.

    Так получилось у вас или что-то еще мешает? У вас цена это одно поле (и передается в meta_query одно ID), или их несколько?
  • Как очистить ключ от пробелов в meta_query?

    Александр Мищенко,
    1. Тогда почему в примере кода в самом вопросе у вас цена во-первых integer, во-вторых hardcoded?
    2. Задача в вопросе решается строками после переменной $values. Как, чем и откуда вы ее заполните - вопроса не касается.
    3. Чтобы заполнить данные из ACF используйте get_field() или цикл если речь о рипитере каком-нибудь. Впрочем, подозреваю что здесь у вас одно из relational полей - relationship или post object, они из коробки вернут массив ID, если это указано в настройках поля (выбор там между object и id).
  • Как решить проблему с 404 ошибкой при изменении количества товаров на страницу WooCommerce?

    IvanRu08, вам нужно понять жизненный цикл запроса в целом, потом это же в контексте WP - так называемый WordPress page lifecycle а так же природу работы хуков. Это позволит понять, что add_filter, вызванный в шаблоне, работать не будет. Про остальной код молчу, там один только switch чего стоит.
  • Хороший хостинг под мои требования?

    SEOD, Бросьте, "все детали" никому не интересны. Интересно сочетание оффшор + btc + inherent абузоустойчивость. Впрочем, это наш чисто спортивный интерес - автору как бы должно быть очевидно, что участвующие в этой дискуссии ничего не посоветуют, по ряду причин. По крайней мере публично.
  • Как правильно создать ajax-тему Wordpress?

    Александр Соболев, если делать SPA, то роутинг надо делать на фронтенде. Как - зависит от фреймворка, на котором вы будете делать SPA - React Router, @angular/router, vue-router и тд. WordPress тут уже ни при чем, он только отдаем JSON по API. Ну а роуты API (если стандартных не хватает) делаются по доке https://developer.wordpress.org/rest-api/extending...
  • Как решить проблему с 404 ошибкой при изменении количества товаров на страницу WooCommerce?

    IvanRu08, тут с этим кодом все печально. Переписывать все надо, и это уже не вопрос на Тостере, а задача для фриланса.
  • Как решить проблему с 404 ошибкой при изменении количества товаров на страницу WooCommerce?

    IvanRu08,
    функционал

    Функциональность

    create_function

    Прекращайте некрофилию. Эта функция давно deprecated. Читайте про closures - анонимные функции:
    add_filter( 'loop_shop_per_page', static function() {
        return 10;
    }, 19 );


    Но вот так уже не срабатывает

    Вы обернули вызов add_filter() в функция. Теперь вам нужно это функцию вызвать. И не просто вызвать, а ее и в нужное время, поскольку речь идет о хуке.
    Зачем вы обернули фильтр в функцию?