Как еще можно добавить PHP код в посты WordPress?

Ссылка скопирована
1 ответ

До последнего времени использовался плагин Insert PHP Code Snippet, на прошлой неделе было замечено, что плагин отвалился и не работает. Т.е. на страницы выводится тупо его шорткод и все. Поиск показал еще похожий плагин Code Snippet, но после его активации на всем вп сразу критическая ошибка.
Каким образом, с плагином или без, можно вставить php код в посты WP?

Дополнительно:

Постарайтесь как можно скорее отказаться от вставки PHP-кода непосредственно в посты, вместо этого пользуйтесь шорткодами и/или встроенными в Worpdress функциями add_filter и do_action

  • Дело в том, что определенная логика должна отработать внутри поста - поясню конкретно на моем примере.
    Пост в моем случае - краткое описание вакансии, при этом сама вакансия, с полным описанием и контактной формой находится на другом сайте. На этот сайт на эту конкретную вакансию юзер переходит по ссылке, ссылка добавлена к посту как кастомное поле - form_link.
    Поскольку постов с вакансиями может быть довольно много, редактор заполняет только краткое описание вакансии и url этой ссылки. Пост вакансии шаблонизирован, разбит на блоки, один из блоков как раз эта ссылка. Вот в коде этой ссылки и прописана логика, а именно в атрибут href вызывается значение поля -

    ....href="<?php the_field('form_link'); ?>"

    Вот этот код и был добавлен в сниппет с помощью Insert PHP Code Snippet, и добавляется он именно шорткодом. Проблема в том, что с новыми версиями WP плагин этот работает корректно только если шорткод прописан в классическом редакторе чистым текстом, а в моем случае, где все вокруг шаблоны гутенберга - нужно извернуться, чтобы сработало правильно. Если я просто добавляю в шаблон абзац с шорткодом, или Reusable Block c шорткодом, php-код не отрабатывает, выводится текстом шорткод и все.

    Я сейчас нашел временный выход, но понимаю, что надо конечно на уровне темы прописать, что то вроде такого:
    Если встречается ссылка с таким то css-классом, взять значение ссылки из поля form_link и использовать его как атрибут href.
    Но с php не очень, если мои рассуждения верны, подскажите как это правильно сделать?

  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Алексей Денисов Ответ

    PHP-код прямо в посты WordPress лучше не вставлять. Это небезопасно, плохо переносится между редакторами и часто ломается после обновлений. Нормальная схема: код живёт в теме, дочерней теме, mu-plugin или маленьком кастомном плагине, а в посте используется shortcode или блок.

    Для вашего случая с ACF-полем form_link проще всего сделать shortcode, который выводит кнопку со ссылкой из текущей записи:

    add_shortcode('vacancy_form_link', function () {
        $url = get_field('form_link', get_the_ID());
     
        if (! $url) {
            return '';
        }
     
        return sprintf(
            '&lt;a class="vacancy-form-link" href="%s" target="_blank" rel="noopener"&gt;%s&lt;/a&gt;',
            esc_url($url),
            esc_html__('Откликнуться', 'textdomain')
        );
    });

    add_shortcode('vacancy_form_link', function () { $url = get_field('form_link', get_the_ID()); if (! $url) { return ''; } return sprintf( '&lt;a class="vacancy-form-link" href="%s" target="_blank" rel="noopener"&gt;%s&lt;/a&gt;', esc_url($url), esc_html__('Откликнуться', 'textdomain') ); });

    После этого в Gutenberg вставляете обычный блок «Шорткод»:

    [vacancy_form_link]

    [vacancy_form_link]

    Если нужно менять href у уже существующей ссылки по CSS-классу, это можно сделать JavaScript-ом, но лучше так не делать: ссылка должна быть правильной уже в HTML. Иначе хуже SEO, доступность и работа без JS.

    Куда положить код: для быстрого решения — в functions.php дочерней темы; для более правильного — в небольшой mu-plugin, если логика вакансий не должна зависеть от темы. Плагины, которые исполняют PHP из контента, лучше убрать: они расширяют поверхность атаки и часто конфликтуют с блочным редактором.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно