Ответы пользователя по тегу WordPress
  • WordPress Customizer?

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

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    WooCommerce
    Easy Digital Downloads
    У Gravity Forms есть простая реализация покупок и платежей, которые можно прикрутить

    Изучите их код. Все доступно на GitHub.
    Ответ написан
  • Как сделать чтобы Wordpress понимал миниатюры созданные вручную?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Перестаньте извращаться. Если родные миниатюры вас не устраивают, используйте https://wp-kama.ru/id_142/kama-thumbnail.html
    Ответ написан
  • Как называть логично и правильно поля в ACF?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если у вас ACF Pro, то для таких блоков имеет смысл использовать Repeater Field. Я бы сделал так:
    • Field Group (группа полей) = Завод в цифрах
    • Поле (text) = Заголовок
    • Поле (Repeater) = Блок
    • Дочерние поля в блоке = Изображение, Число, Подпись

    Если у вас не Pro версия и поля Repeater нет, тогда:
    • Заголовок
    • Изображение 1
    • Число 1
    • Подпись 1
    • Изображение 2
    • Число 2
    • Подпись 2
    • Изображение 3
    • Число 3
    • Подпись 3

    Просто и понятно. Более разумного варианта не вижу.
    Ответ написан
    Комментировать
  • Правильная ли у меня структура для темы Woocommerce?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Вы не совсем уловили иерархию шаблонов WP. Файл index.php нужен не только потому что "без index.php тема не работает", а потому что это основной fallback шаблон, который используется если не обнаружен более подходящий (более специфичный).

    В вашем текущей конфигурации абсолютно все страницы сайта будут использовать index.php, только кроме архивов товаров. WooCommerce темплейт archive-product.php используется для отображения страниц с товарами (все товары, товары в категории и тд) включая главную страницу магазина (не сайта!), которая обычно example.ru/shop.
    Ответ написан
  • Как вордпресс формирут ссылку на изображение?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    При загрузке изображения WP записывает абсолютный URL картинки в таблице wp_posts в колонку guid. Изучите структуру БД для понимания.

    Сама ссылка формируется из таких составляющих:

    1. Home URL - корневой урл сайта
    2. Upload Dir - корневая папка загрузок, она же wp-content/uploads
    3. Папки дат, если включена соответствующая опция - например 2017/10
    4. Имя файла

    Домен для изображений можно изменить с помощью фильтра:
    add_filter( 'pre_option_upload_url_path', function( $upload_url_path ) {
        return 'http://images.example.ru';
    });
    Ответ написан
    5 комментариев
  • Как вывести число товаров в категории woocommerce?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Количество товаров доступно в объекте WP_Term этой категории:
    $category = get_term( TERM_ID, 'product_cat' ); // если известен ID категории, или же:
    $category = get_term_by( 'slug', TERM_SLUG, 'product_cat' ); // если надо по слагу категории
    echo $category->count;
    Ответ написан
    7 комментариев
  • Есть где нибудь самый разжованый гайд что такое хуки и с чем их кушать?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    В дополнение к ответу 4mobile - есть 2 вида хуков – actions и filters. Фильтры принимают данные, дают возможность их модифицировать и вернуть. Экшны позволяют в нужный момент выполнить какое-то действие.

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

    Вы бы лучше конкретнее написали, что именно вызывает у вас вопросы. В родной документации все подробно описано, гугл выдает тысячи ссылок с подробными тюториалами. Задавая конкретные вопросы сможете получить более точные ответы и прояснить для себя мутноватые места.
    Ответ написан
    2 комментария
  • Виртуальный Мультисайт на Wordpress, как реализовать?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    В общих чертах:
    1. Конфигурируете сервер чтобы обрабатывал example.ru и *.example.ru как один и тот же WP-сайт
    2. В wp-config.php устанавливаете урлы сайта с помощью констант (они имеют приоритет над значениями из БД), а значения этих констант устанавливаете динамически на ходу, в зависимости от запрашиваемого адреса:
    define( 'WP_HOME', $_SERVER['SERVER_NAME'] );
    define( 'WP_SITEURL', $_SERVER['SERVER_NAME'] );

    3. В том же конфиге добавляете для удобства еще одну константу, скажем, SUBDOMAIN. Берем $_SERVER['SERVER_NAME'], достаем из него имя субдомена и кладем в эту константу.
    4. Далее, в нужных местах берете значение этой константы и действуете по обстоятельствам. Например, хукаетесь в фильтр the_title и модифицируете название, исходя из значения константы.
    5. С sitemap, возможно, придется повозиться чуть дольше. Но каких-то особых проблем быть не должно.
    6. Возможно, в процессе отладки вылезут какие-то еще мелкие нюансы, но вряд ли что-то серьезное.

    UPDATE:
    Обдумывал идею, пришло в голову вот еще что - надо уменьшить повторение кода в тех местах, где данные будут модифицироваться в зависимости от значения константы SUBDOMAIN. Я бы засетапил какой-нибудь массив, в котором ключами будут выступать как раз значения поддоменов, а значениями массива - необходимые данные. Где его хранить, в БД или в конфиге - не принципиально. Что-то типа:
    $data = [
        'moskva' => [
            'name' => 'Москва',
            'term_id' => 11, // ID термина таксономии cities, которая может использоваться для группировки контента, это позволит на "подсайтах" показывать только релевантный контент
            'title_suffix' => ' в Москве и области', // динамическая часть тайтла сайта / страниц
            ...
        ],
        'spb' => [
            ...
        ],
        ...
    ];

    Ну и получать доступ к этим данным:
    $title = $title . $data[ SUBDOMAIN ]['title_suffix'];
    Ответ написан
    6 комментариев
  • Не хочет обновляться wp?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Посмотрите в файле wp-config.php, возможно там есть вот такое:
    define( 'AUTOMATIC_UPDATER_DISABLED', true );
    define( 'WP_AUTO_UPDATE_CORE', false );

    Удалите эти строки, если они есть.
    Ответ написан
  • Как реализовать мультиязычность?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если мультиязычка зеркальная - каждая страница или статья/новость имеет перевод на другой язык, тогда один сайт и плагин для мультиязычки - WPML (платный) или Polylang (бесплатный, платные add-ons).

    Если контент (структура сайта, страницы, записи и тд) на языковых версиях отличается - тогда WordPress Multisite.

    Все остальное выбросьте из головы.
    Ответ написан
    2 комментария
  • Wordpress. Как обновить все записи, их более 2000?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Что значит обновить? Дату и время последнего изменения обновить? Как кросспостинг отслеживает изменения? Я вообще подозреваю, что он висит на хуке сохранения поста в вадминке. Соответственно, только ручками пересохранять, или же писать скрипт, который будет циклом идти по постам и вызывать соответствующую функцию/метод плагина.
    Ответ написан
    Комментировать
  • Wordpress: собственный обработчик POST-запросов?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Аякс не обязателен в вашем случае.
    2. Использовать совет MrTimon тем более не стоит (хотя этот метод является правильным).

    В вашей ситуации наиболее простым и адекватным решением будет по старинке постить форму саму на себя (на текущий урл), хукаться в init и выполнять необходимые действия.

    UPDATE: В комментариях обсуждение и детали.
    Ответ написан
  • Как сделать выдачу записей по релевантности Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Вы для начала определитесь четко, что вы вкладываете в понятие "релевантность". Конкретные параметры, их вес и тд. А тогда запилите руками. WP из коробки использует совсем базовый поиск - нахождение искомого слова/фразы в БД по некоторым полям.

    Посмотрите в сторону ElasticSearch + ElasticPress.
    Ответ написан
  • Почему не работает трансляция?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    А если вот так:

    <?php
    /**
     * Plugin Name: Translation demo
     */
    namespace langdemo;
    
    if (!defined('WPINC')) {
        die;
    }
    
    function run() {
        require_once plugin_dir_path(__FILE__) . 'class-plugin.php';
        $plugin = new Plugin();
        $plugin->run();
    }
    
    add_action( 'plugins_loaded', 'run' );
    Ответ написан
    Комментировать
  • Как удалить или скрыть текстовый редактор?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    css / js
    Ответ написан
    Комментировать
  • Залить CSV файл в БД при наличие произвольных полей в записях?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Ответ написан
    Комментировать
  • Не отображаются страницы таксономий в произвольном типе записей, что делать?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    У вас одинаковый slug и у post type, и у taxonomy. Соответственно, будет срабатывать первое правило из двух, а именно правило custom post type. В вашем случае, при попытке открыть урл test.com/exercises/street WP будет искать запись типа exercises (custom post type) со слагом street. Такой записи нет, отсюда 404. Термин таксономии он искать не будет, так как Rewrite API работает по принципу "нашли первое совпадение и прекратили проверку".
    Ответ написан
    Комментировать
  • Как правильно обработать кастомную форму wordpress с админки?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Хукайте в admin_post_*

    Еще почитать: https://www.sitepoint.com/handling-post-requests-t...
    Ответ написан
    Комментировать
  • Какой идеальный вариант хостинга для Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. VPS c 2мя ядрами проца, SSD и минимум 4Гб оперативы (потому что у вас много сайтов и всем нужно раздать места в кеше), у нормального хостера который не оверселлит, по крайней мере явно. Проверенные - Amazon AWS, Digital Ocean. Да, и без swap.
    2. FreeBSD
    3. Nginx, сертификаты Let's Encrypt, HTTP/2
    4. PHP-FPM 7.1
    5. MariaDB 10.2
    6. Memcached или Redis
    7. Адекватные настройки всего этого дела
    8. Адекватные плагины кеширования (drop-ins для объектного кеша и для full-page кеширования где оно имеет смысл)
    9. Все упомянутые сервисы через сокеты
    10. Опционально - Varnish, HAProxy для SSL termination, Nginx fastcgi_cache для кеширования страниц целиком (где в этом есть смысл, вместо плагина на уровне WP)
    11. Для управления всем этим не использовать Plesk, Vesta, ISP и прочую ересь. Учитесь делать все руками и самостоятельно.

    Вообще, как говорится, дьявол всегда кроется в деталях. Иногда вопрос упирается исключительно в настройки - то fpm pool некорректно настроен, то open table cache в MySQL, то слишком долгий keep alive у Nginx, то упираетесь в лимит открытых файлов, то не кешируется достаточное количество файловых дескрипторов и тд. Корректные настройки всех сервисов под конкретные потребности конкретных сайтов - ключ к успеху.

    Ну и, конечно, самое-самое главное - адекватный код самих сайтов. Ибо одна говнотема "все-в-одном" с парочкой таких же говноплагинов способна ронять даже хорошо настроенный сервер.
    Ответ написан
    2 комментария