Validando valores personalizados de metarca e campos obrigatórios

16

Algo que eu nunca vi abordado é a melhor maneira de validar que campos de formulário específicos sejam preenchidos corretamente para as meta caixas de postagem personalizadas.

Estou procurando obter opiniões de especialistas sobre a melhor forma de validar campos personalizados para quaisquer metaboxes que possam ser criados. Meu interesse é:

  • garantir que a validação de campo ocorra antes da publicação / atualização da postagem
  • utilizando uma classe / código que não entre em conflito com outro javascript do wordpress
  • permite definir campos específicos conforme necessário, enquanto outros podem ser opcionais
  • validar campos com base em regras personalizáveis, incluindo regex para itens como formato de email
  • controlar a exibição visual de quaisquer erros / avisos

Desde já, obrigado!

NetConstructor.com
fonte

Respostas:

21

A maneira mais fácil é adicionar a validação Javascript através do plugin jQuery Validate . Aqui está o passo a passo mais básico:

Perto da sua chamada add_meta_box, enfileire o plug-in jQuery Validate, bem como um arquivo JS para o seu script simples:

add_action('admin_enqueue_scripts', 'add_my_js');   
function add_my_js(){    
  wp_enqueue_script('my_validate', 'path/to/jquery.validate.min.js', array('jquery'));
  wp_enqueue_script('my_script_js', 'path/to/my_script.js');
}

Em my_script.js, inclua o seguinte:

jQuery().ready(function() {
    jQuery("#post").validate();
});

Isso permitirá a validação no formulário de postagem. Em seguida, no retorno de chamada add_meta_box, onde você define os campos personalizados, você adiciona uma classe "obrigatória" para cada campo que deseja validar, assim:

<input type="text" name="my_custom_text_field" class="required"/>

Todos os campos com "obrigatório" em sua classe serão validados quando a postagem for salva / publicada / atualizada. Todas as outras opções de validação (regras, estilo de erro etc.) podem ser definidas na função document.ready em my_script.js; verifique o jQuery Validar documentos para todas as opções.

danblaker
fonte
Obrigado, tentarei amanhã, mas você poderia explicar como fazer validações diferentes. Por exemplo, validando para um endereço de e-mail correto, validando que não há mais que ou pelo menos XX caracteres, que um campo de formulário é preenchido ... coisas assim?
NetConstructor.com
Além disso, isso valida antes que a postagem seja salva / atualizada? Se não, como posso fazer isso?
NetConstructor.com
Os exemplos e a documentação do plug-in de validação do jQuery (vinculado na minha resposta) mostrarão como fazer todas essas coisas. A validação ocorre no envio por padrão, mas você pode acioná-lo no desfoque ou na alteração de qualquer elemento do formulário para seus campos personalizados.
Danblaker 29/09/10
Eu implementei essa solução e ela parece muito promissora, um problema, o que eu coloco no 'submitHandler'? Após a validação com jquery.validate, o Wordpress não faz nada (exceto o buttun permanece no estado animado). Como passo o bebê de volta ao WP?
Mike23
2
Se você estiver apenas tentando recuperar o botão Publicar no estado normal quando um campo obrigatório estiver vazio (ou alguma outra validação falhar), não será necessário fazer nada com o submitHandler; basta editar o código validate () para alterar o botão quando a validação falhar. Isso funciona: jQuery ("# ​​post"). Validate ({invalidHandler: function () {jQuery ('# publish'). RemoveClass ('button-primary-disabled'); jQuery ('# ajax-loading'). Css ('visibilidade', 'oculto');}});
Danblaker
2

O código básico completo para adicionar a validação do jQuery:

  1. Enfileire o script de validação. Presumo que o jQuery já esteja enquadrado.

    add_action('admin_enqueue_scripts',function($id){
        $validation',$validation_js_url = #your validation.js source;
        wp_register_script( 'validation',$validation_js_url,array(),'',true );
        wp_enqueue_script( 'validation' );
    });
  2. No arquivo js ou na tag de script:

    jQuery(document).ready(function($){
        var form = $("form[name='post']");
        $(form).find("input[type='submit']").click(function(e){
            e.preventDefault();
            $(form).validate();
    
            if($(form).valid())
            {
                $("#ajax-loading").show();
                $(form).submit();
            }else{
                $("#publish").removeClass().addClass("button-primary");
                $("#ajax-loading").hide();
            }
        });
    });
  3. Feito :)

Ijas Ameenudeen
fonte
E no lado do servidor?
NetConstructor.com
2

Eu usei esse código, muito útil, apenas mudou:

$(form).find("input[type='submit']").click(function(e){

Para:

$(form).find("#publish").click(function(e){

Porque se você tiver outro formulário dentro do formulário principal, inicie o script.

E:

$(form).submit();

Para:

$(this).submit();

Porque a primeira linha salva apenas a postagem como rascunho e você não pode mais publicá-la.

Escreveu tudo aqui: http://allgraphics.it/blog/2012/10/jquery-validation-sui-campi-di-input-postcustom-post-di-wordpress/

Ricky
fonte
2

Eu encontrei essa abordagem para resolver o problema de validar campos metabox usando código PHP

https://tommcfarlin.com/post-meta-data-error-messages/

Espero que isso ajude você (funciona para mim em um cenário semelhante)

Julio Garcés Teuber
fonte
Embora esse link possa responder à pergunta, é melhor incluir aqui as partes essenciais da resposta e fornecer o link para referência. As respostas somente para links podem se tornar inválidas se a página vinculada for alterada.
Gabriel
0

Se você deseja validar o lado do servidor, a opção mais fácil é usar Campos personalizados avançados para definir seus layouts de campos personalizados e, em seguida, o complemento Campo validado para definir sua validação por campo no WordPress Admin.

doublesharp
fonte