No início de wp_insert_post
, a função que salva / atualiza uma postagem, existe um filtro chamado wp_insert_post_empty_content
. Por padrão, esse filtro verifica se os campos de título, editor e trecho estão todos vazios; nesse caso, o processo de salvamento será interrompido.
No entanto, como todos os campos a serem salvos são passados para esse filtro, você pode expandir esse filtro para incluir qualquer outro teste para determinar se a postagem deve ser considerada vazia. Seria algo como isto:
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;
}
Nota: a função deve retornar 'true' para interromper o processo de salvamento.
Se o campo personalizado não for exclusivo, você também poderá ecoar um aviso.
132_url
onde132
está o ID da postagem. Do que você sempre tem um valor único aqui. Além disso: campos personalizados devem ser salvos nasave_post
ação. Nesta ação, você pode verificar o campo personalizado (se não estiver vazio e tiver um valor exclusivo, por exemplo) e com base nissoupdate_post_meta
ou não. Eu acho que você também pode verificar o campo personalizado e, se ele não tiver um valor exclusivo, definapost-status
comodraft
ou algo mais, para desativar a publicação. Caso contrário, acho que você precisa do jQuery para fazer isso.