У меня есть заказное поле под названием xxxx_url
. xxxx_url
должен быть уникальным.
Итак, прежде чем публиковать пост, я хочу убедиться, что xxxx_url
он уникален или нет? Если это не уникально, публикация сообщения должна быть отклонена.
Я попробовал publish_post
. Но это не правильно, так как это срабатывает, когда мы публикуем сообщение. Я хочу запустить свой код непосредственно перед публикацией.
custom-field
filters
hooks
actions
Я самый глупый человек
источник
источник
132_url
где132
идентификатор сообщения. Чем у вас всегда есть уникальная ценность здесь. Кроме того: пользовательские поля должны быть сохранены вsave_post
действии. В этом действии вы можете проверить настраиваемое поле (если оно не пустое и имеет уникальное значение, например), и на основании этогоupdate_post_meta
или нет. Я думаю , вы могли бы также проверить пользовательские поля , и если он не имеет уникального значения, установитьpost-status
наdraft
или что - то еще, чтобы отключить публикацию. В противном случае, я думаю, вам нужен jQuery для этого.Ответы:
В начале
wp_insert_post
функции, которая сохраняет / обновляет сообщение, есть фильтрwp_insert_post_empty_content
. По умолчанию этот фильтр проверяет, все ли поля заголовка, редактора и отрывка пусты, в этом случае процесс сохранения будет остановлен.Однако, поскольку все поля, которые должны быть сохранены, передаются в этот фильтр, вы можете расширить этот фильтр, включив в него любой другой тест, чтобы определить, следует ли считать публикацию пустой. Это было бы что-то вроде этого:
Примечание. Функция должна возвращать значение «истина», чтобы остановить процесс сохранения.
Если настраиваемое поле не уникально, вы можете также вывести предупреждение.
источник
wp_insert_post_empty_content
семантически предназначен для пустого контента . Сказав это, я не нашел ни одного семантически подходящего крючка для этого.wp_insert_post_valid_content
чтобы выразить это, но в остальном он находится в правильном месте.wp_insert_post_empty_content
фильтр?Как насчет использования AJAX для проверки уникальности еще до того, как отправить публикацию?
Хотя код не проверен, но он должен работать. Возможно, вам придется поиграть с ним, чтобы получить желаемый результат.
источник
Я бы подключился к фильтру wp_insert_post_data и обработал бы его как можно менее навязчиво, потому что, насколько я понимаю, вы не хотите блокировать вставку сообщения, вы просто хотите избежать публикации сообщения с дублирующимися мета-значениями.
Я не могу сэкономить слишком много в этом случае, потому что вы не делитесь ни одним кодом, но вот некоторый псевдокод фильтра, который будет работать:
Еще одна замечательная особенность этого фильтра в том, что он отделен от вложений одним
wp_insert_attachment_data
.Надеюсь, это поможет, и что бы вы ни делали, это звучит потрясающе!
источник
$data['post_status']
естьpublish
и пользователь обновляет его? Разве создание поста неdraft
создаст404
проблему для этого поста?Чек должен идти в
wp_insert_post
. Этот хук срабатывает всякий раз, когда сообщение публикуется или редактируется.Там вы можете выполнить пользовательский запрос, чтобы проверить, есть ли какое-либо сообщение с таким же
xxxx_url
значением или нет.источник
wp_insert_post
действие запускается после сохранения сообщения, оно не может заблокировать публикацию или вставку сообщения.If it isn't unique it should reject publishing post.
в своем вопросе.