В начале wp_insert_post
функции, которая сохраняет / обновляет сообщение, есть фильтр wp_insert_post_empty_content
. По умолчанию этот фильтр проверяет, все ли поля заголовка, редактора и отрывка пусты, в этом случае процесс сохранения будет остановлен.
Однако, поскольку все поля, которые должны быть сохранены, передаются в этот фильтр, вы можете расширить этот фильтр, включив в него любой другой тест, чтобы определить, следует ли считать публикацию пустой. Это было бы что-то вроде этого:
add_filter ('wp_insert_post_empty_content','wpse312975_check_unique_url',10,2);
function wpse312975_check_unique_url ($maybe_empty, $postarr) {
// extract custom field from $postarr, check uniqueness
if ($unique) return false else return true;
}
Примечание. Функция должна возвращать значение «истина», чтобы остановить процесс сохранения.
Если настраиваемое поле не уникально, вы можете также вывести предупреждение.
132_url
где132
идентификатор сообщения. Чем у вас всегда есть уникальная ценность здесь. Кроме того: пользовательские поля должны быть сохранены вsave_post
действии. В этом действии вы можете проверить настраиваемое поле (если оно не пустое и имеет уникальное значение, например), и на основании этогоupdate_post_meta
или нет. Я думаю , вы могли бы также проверить пользовательские поля , и если он не имеет уникального значения, установитьpost-status
наdraft
или что - то еще, чтобы отключить публикацию. В противном случае, я думаю, вам нужен jQuery для этого.