Eu tenho um tipo de postagem personalizado (CPT) chamado event
. Eu tenho uma caixa meta para o tipo com vários campos. Gostaria de validar alguns campos antes de publicar um evento. Por exemplo, se a data de um evento não for especificada, eu gostaria de exibir uma mensagem de erro informativa, salve o evento para edição futura, mas impeça a publicação desse evento. O status 'pendente' de uma postagem de CPT sem todas as informações necessárias é a maneira correta de tratá-la?
Qual é a melhor prática para validar campos de CPT e impedir que uma postagem seja publicada, mas salve-a para edição futura.
Muito obrigado, Dasha
Respostas:
Você pode impedir que a postagem salve tudo junto com pequenos hacks JQuery e valide os campos antes de salvar no lado do cliente ou no servidor com o ajax:
primeiro, adicionamos nosso JavaScript para capturar o evento de envio / publicação e o usamos para enviar nossa própria função ajax antes do envio real:
então criamos a função para fazer a validação real:
você sempre pode alterá-lo um pouco para fazer a validação apenas do seu tipo de postagem, adicionando uma verificação condicional para
my_publish_admin_hook
funcionar para o seu tipo de postagem e validar no lado do cliente, mas eu prefiro no lado do servidor.fonte
pre_submit_validation
encaixa.my_publish_admin_hook
bloco intercepta o envio do cliente após o envio - mas, em seguida, faz uma chamada AJAX para o servidor (envio pré-oficialpre_submit_validation
) que executa a validação do lado do servidor.Há duas etapas no método: primeiro, uma função para salvar os dados do campo metabox personalizado (conectado ao save_post) e, segundo, uma função para ler esse novo post_meta (que você acabou de salvar), validá-lo e modificar o resultado de salvando conforme necessário (também conectado ao save_post, mas após o primeiro). A função validadora, se a validação falhar, na verdade altera o post_status de volta para "pendente", impedindo efetivamente a publicação da postagem.
Como a função save_post é chamada muito, cada função tem verificações para executar apenas quando o usuário pretende publicar e apenas para o seu tipo de postagem personalizado (mycustomtype).
Normalmente, também adiciono algumas mensagens de aviso personalizadas para ajudar o usuário a saber por que a postagem não foi publicada, mas essas foram um pouco complicadas de incluir aqui ...
Não testei esse código exato, mas é uma versão simplificada do que fiz em configurações de tipo de postagem personalizadas em larga escala.
Para vários campos metabox, basta adicionar mais marcadores de conclusão, recuperar mais post_meta e fazer mais testes.
fonte
você deve verificar / validar seu valor de meta campo no ajax, ou seja, quando o usuário clicar no botão "Publicar / Atualizar". Aqui estou validando o produto woocommerce com o meta campo "product_number" para o valor vazio.
Depois disso, adicione a função manipulador ajax,
fonte
Só queria acrescentar que, para ler as variáveis de postagem, usando a solução da Bainternet, você terá que analisar a string
$_POST['form_data']
usando aparse_str
função PHP (apenas para poupar algum tempo de pesquisa).Então você pode acessar cada variável apenas usando
$varname
. Por exemplo, se você tiver um meta campo chamado "my_meta", poderá acessá-lo assim:fonte