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

  • Я хочу дать авторизованным пользователям возможность вводить в специальный тип поста определенную техническую информацию (форматированную с помощью шорт-кодов), которую затем в своем плагине автоматически контролировать, преобразовывать и сохранять в отдельную таблицу базы в виде статической хтмл страницы.
    Подскажите, пожалуйста, как сделать:
    1. В случае ошибки в тексте пользователя (пытаюсь обрабатывать хуком save_post), чтобы можно было сообщить пользователю об ошибке, и не сохранять пост.
    2. Если всё в порядке, то параллельно с сохранением преобразованного в плагине поста, получить в программе соответствующую полностью сформированную хтмл страницу (начиная с DOCTYPE html), как при ее просмотре извне в браузере.
    3. Есть ли угроза безопасности при допуске посторонних к созданию постов, и что можно сделать, чтобы ее минимизировать? (как правильно сделать права, может какую-то фильтрацию действий или что-то такое…)

    • Тема изменена 7 лет, 8 месяцев назад пользователем strannik005.
Просмотр 15 ответов — с 1 по 15 (всего 17)
  • Друзья, может кто-то все ж знает? Особенно по п.2 не понимаю как это сделать… Еще нет опыта работы с WP, и сразу сложный проект…

    Особенно по п.2 не понимаю как это сделать…

    Я тоже не понимаю. Не понимаю в чём проблема 🙂 Пост -это и будет страница. Страница сайта в см.
    Или Вам что надо? О какой «программе» речь?

    и что можно сделать, чтобы ее минимизировать?

    Не давать внедрять в контент исполняемый код (яваскрипт в тч) и загружать вложения. Если всё же нужно разрешить загрузку картинок, то желательно их обработать перед публикацией (если будет вирус в картинке — он поломается). Также можно использовать CDN. А если у себя — запретить выполнение пхп в каталоге с картинками.

    • Ответ изменён 7 лет, 8 месяцев назад пользователем SeVlad.

    возможность вводить в специальный тип поста определенную техническую информацию (форматированную с помощью шорт-кодов),

    Как вариант — Может стоит использовать произвольные поля?

    Я тоже не понимаю. Не понимаю в чём проблема 🙂 Пост -это и будет страница. Страница сайта в см.
    Или Вам что надо? О какой «программе» речь?

    Я обрабатываю введенный пользователем пост (в save_post), и хочу уже в этот момент там получить полный хтмл-код страницы, как она будет выглядеть «после публикации» в браузере. Возможно ли такое? (Даже не обязательно в хуке save_post, но в цепочке обработки вордпрессом апдейта поста, главное, сразу при этом сохранении).

    Модератор Yuri

    (@yube)

    и хочу уже в этот момент там получить полный хтмл-код страницы

    Куда получить?
    И зачем?

    p.s. Полный вид (html код) страницы записи зависит от других, не связанных с текущим, процессов. Поэтому задача в общем случае не имеет решения.

    • Ответ изменён 7 лет, 8 месяцев назад пользователем Yuri.

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

    Противоречий не видите?

    Вангую Вы хотите получить что-то типа кеша страницы. Это можно сделать только запросив страницу по http. Те совершенно другой процесс. И вот его уже наверное можно запустить хуком save_post (как конкретно я не подскажу)

    И присоединюсь к вопросам Юрия — зачем этот огород?

    • Ответ изменён 7 лет, 8 месяцев назад пользователем SeVlad.

    Куда получить?
    И зачем?

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

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

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

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

    Нет. Публикация — это просто запись контента в базу. А страница формируется темой. Она не только отвечает за внешний вид, но может включать и виджеты и меню и даже внешние включения (карты, виджеты соцсетей и тп).

    хотите получить аля кеш страницы.

    Да. Ну или наиболее близкое к этому. 🙂

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

    Есть ощущение, что Вы идетё неправильным путём, но понять задумку не могу..

    Но Вы же можете отдельным скриптом генерировать нужные Вам html-файлы, заранее сформировав шаблон и подставляя в него данные из БД. Этот скрипт уже запускать по хуку или крону.

    В помощь http://codex.wordpress.org/Class_Reference/wpdb

    • Ответ изменён 7 лет, 8 месяцев назад пользователем SeVlad.
    Модератор Yuri

    (@yube)

    Про несвязанные процессы не понял.

    HTML-код, генерируемый CMS, зависит от состояния «системы» на момент генерации. А на состояние могут влиять действия юзеров и админов, и запланированные задачи, и, если есть, внешние включения. Все эти влияния не зависят друг от друга и могут выполнятся одновременно. Так что снапшот, сделанный в момент сразу после публикации, может значительно отличаться от того, что получит браузер посетителя в любой другой момент.

    Максимум, что Вы можете считать более-менее постоянным, это post_content. По крайней мере, в нормальной CMS он не может меняться между сеансами редактирования, т.е. между вызовами хука save_post.

    SeVlad и Юрий, спасибо большое, глупость свою понял. Еще плохо знаю, как работает Вордпресс.

    Правильно ли я понимаю, что для получения post_content я должен сделать так:
    $s=apply_filters(‘the_content’, $post->post_content);

    И где его можно вызвать в итоговом виде? Наверно же save_post — еще нельзя?

    Модератор Yuri

    (@yube)

    Правильно ли я понимаю, что для получения post_content я должен сделать так:
    $s=apply_filters(‘the_content’, $post->post_content);

    Если точно нужна обработка всех шорткодов, то да.
    И не забыть передать в обработчик $post 😉

    Наверно же save_post — еще нельзя?

    Думаю, можно. Только priority я бы поставил побольше, чтобы успели выполнится «модификаторы», висящие на том же хуке.

    И не забыть передать в обработчик $post

    Прошу прощения за малообразованность, обработчик $post это что имеется в виду и как сделать в коде?

    Думаю, можно. Только priority я бы поставил побольше, чтобы успели выполнится «модификаторы», висящие на том же хуке.

    Спасибо!

    Модератор Yuri

    (@yube)

    обработчик $post это что имеется в виду и как сделать в коде?

    передать в обработчик переменную $post 🙂

    
    add_action('save_post', 'my_save_post', 3, 99999);
    function my_save_post($post_ID, $post, $update) {
    
    }
    
Просмотр 15 ответов — с 1 по 15 (всего 17)
  • Тема «Обработка обновлений записей» закрыта для новых ответов.