-
Notifications
You must be signed in to change notification settings - Fork 195
Classe Odin_Post_Form
Você não precisa mais utilizar plugins para criar formulários de publicação no Odin. Utilize a classe Odin_Post_Form que será capaz de gerar o formulário e ainda validar os campos por HTML5 e PHP antes deles serem salvos, sanitizar o que for preciso e incluir também termos de taxonomias e custom fields.
Adicione as seguintes linhas em seu functions.php
:
require_once get_template_directory() . '/core/classes/abstracts/abstract-front-end-form.php';
require_once get_template_directory() . '/core/classes/class-post-form.php';
Devemos instanciar a classe Odin_Post_Form
para criar o Formulário:
function odin_post_form() {
$form = new Odin_Post_Form(
'form_id', // ID do formulário
'post', // Tipo de post a ser criado. Padrão: 'post'
'draft', // Status do post ao ser criado. Padrão: 'draft'
array( 'class' => 'form' ) // Atributos do formulário. Padrão: 'array()'
);
return $form;
}
add_action( 'init', array( odin_post_form(), 'init' ), 1 );
Isso apenas cria a instância do formulário! Você ainda precisa adicionar os campos e também exibir ele no tema.
Adicione os campos utilizando o método set_fields()
como por exemplo:
$form->set_fields(
array(
array(
'fields' => array(
array(
'id' => 'post_title', // Obrigatório
'label' => array(
'text' => __( 'Título do Post', 'odin' ), // Obrigatório
'class' => 'example-class example-class-2'
),
'type' => 'text', // Obrigatório
'required' => true, // Opcional (bool)
'attributes' => array( // Opcional (html input elements)
'placeholder' => __( 'Digite o título do post' )
)
),
array(
'id' => 'post_content', // Obrigatório
'label' => array(
'text' => __( 'Conteúdo do Post', 'odin' ), // Obrigatório
'class' => 'example-class example-class-2'
),
'type' => 'textarea', // Obrigatório
'required' => true, // Opcional (bool)
),
)
),
)
);
Como é possível ver no exemplo, é necessário criar um array que funcionará como fiedset e dentro dele outro array que terá campos do nosso formulário de contato.
O fieldset poderá ter três parâmetros:
$form->set_fields(
array(
array(
'legend' => __( 'Legenda do grupo' ), // Opcional
'attributes' => array( // Opcional (atributos que pode ter em um fieldset em html)
'class' => 'some-css-class'
),
'fields' => array( // Obrigatório
// Aqui vão os campos do fieldset
)
)
)
);
Cria um campo comum de texto:
array(
'id' => 'text_example', // Obrigatório
'label' => array(
'text' => __( 'Text Example', 'odin' ), // Obrigatório
'class' => 'example-class example-class-2'
),
'type' => 'text', // Obrigatório
'required' => true, // Campo obrigatório (true/false) Opcional
'attributes' => array( // Opcional (atributos para input HTML/HTML5)
'placeholder' => __( 'Some text here!' )
),
'default' => 'Default text', // Opcional
'description' => __( 'Description Example', 'odin' ), // Opcional
)
Cria um campo de e-mail.
array(
'id' => 'email_example', // Obrigatório
'label' => array(
'text' => __( 'Email Example', 'odin' ), // Obrigatório
'class' => 'example-class example-class-2'
),
'type' => 'email', // Obrigatório
'required' => true, // Campo obrigatório (true/false) Opcional
'attributes' => array( // Opcional (atributos para input HTML/HTML5)
'placeholder' => __( 'Some text here!' )
),
'default' => 'Default text', // Opcional
'description' => __( 'Description Example', 'odin' ), // Opcional
)
Cria um campo de arquivo.
array(
'id' => 'file_example', // Obrigatório
'label' => array(
'text' => __( 'File Example', 'odin' ), // Obrigatório
'class' => 'example-class example-class-2'
),
'type' => 'file', // Obrigatório
'required' => true, // Campo obrigatório (true/false) Opcional
'attributes' => array( // Opcional (atributos para input HTML/HTML5)
'placeholder' => __( 'Some text here!' )
),
'default' => 'Default text', // Opcional
'description' => __( 'Description Example', 'odin' ), // Opcional
)
Cria um campo input em HTML que aceita os tipos do HTML5.
array(
'id' => 'html5_input_example', // Obrigatório
'label' => array(
'text' => __( 'HTML5 input Example', 'odin' ), // Obrigatório
'class' => 'example-class example-class-2'
),
'type' => 'input', // Obrigatório
'required' => true, // Campo obrigatório (true/false) Opcional
'attributes' => array( // Opcional (atributos para input HTML/HTML5)
'type' => 'color',
'required' => 'required',
'class' => 'regular-text',
'styles' => 'background: #444;'
),
'default' => '#ffffff', // Opcional
'description' => __( 'Description Example', 'odin' ), // Opcional
)
Cria um campo de múltiplas linhas de texto.
array(
'id' => 'textarea_example', // Obrigatório
'label' => array(
'text' => __( 'Textarea Example', 'odin' ), // Obrigatório
'class' => 'example-class example-class-2'
),
'type' => 'textarea', // Obrigatório
'required' => true, // Campo obrigatório (true/false) Opcional
'attributes' => array( // Opcional (atributos para input HTML/HTML5)
'placeholder' => __( 'Some text here!' )
),
'default' => 'Default text', // Opcional
'description' => __( 'Description Example', 'odin' ), // Opcional
)
Cria um campo de checkbox.
array(
'id' => 'checkbox_example', // Obrigatório
'label' => array(
'text' => __( 'Checkbox Example', 'odin' ), // Obrigatório
'class' => 'example-class example-class-2'
),
'type' => 'checkbox', // Obrigatório
'required' => true, // Campo obrigatório (true/false) Opcional
// 'attributes' => array(), // Opcional (atributos para input HTML/HTML5)
'default' => '', // Opcional (utilize 1 para deixar marcado como padrão)
'description' => __( 'Description Example', 'odin' ), // Opcional
)
Cria um campo de select.
array(
'id' => 'select_example', // Obrigatório
'label' => array(
'text' => __( 'Select Example', 'odin' ), // Obrigatório
'class' => 'example-class example-class-2'
),
'type' => 'select', // Obrigatório
'required' => true, // Campo obrigatório (true/false) Opcional
// 'attributes' => array(), // Opcional (atributos para input HTML/HTML5)
'default' => 'three', // Opcional
'description' => __( 'Description Example', 'odin' ), // Opcional
'options' => array( // Obrigatório (adicione aque os ids e títulos)
'one' => 'One',
'two' => 'Two',
'three' => 'Three',
'four' => 'Four'
),
)
Cria um campo de radio.
array(
'id' => 'radio_example', // Obrigatório
'label' => array(
'text' => __( 'Radio Example', 'odin' ), // Obrigatório
'class' => 'example-class example-class-2'
),
'type' => 'radio', // Obrigatório
'required' => true, // Campo obrigatório (true/false) Opcional
// 'attributes' => array(), // Opcional (atributos para input HTML/HTML5)
'default' => 'three', // Opcional
'description' => __( 'Description Example', 'odin' ), // Opcional
'options' => array( // Obrigatório (adicione aque os ids e títulos)
'one' => 'One',
'two' => 'Two',
'three' => 'Three',
'four' => 'Four'
),
)
Para indicar qual será o campo responsável pelo título e pelo conteúdo do post utilize os métodos set_title_field()
e set_content_field()
:
$form->set_title_field( 'post_title' );
$form->set_content_field( 'post_content' );
Para indicar quais serão os campos com conteúdo extra para o post utilize o método set_content_field()
:
$form->set_custom_fields( array(
'custom_field_text',
'custom_field_url',
'custom_field_image',
) );
Irá receber uma array com o ID de cada field.
Para indicar quais serão os termos de taxonomias para o post utilize o método set_terms()
:
$form->set_terms( array(
'category' => 'category_field',
'post_tag' => 'post_tag_field',
) );
Irá receber uma array com as chaves sendo a taxonomia e os valores o ID de cada field.
Com tudo configurado você já poderá exibir o formulário de contato no seu tema utilizando o método render()
.
Veja um exemplo com a função que chamamos de odin_contact_form()
:
echo odin_contact_form()->render();
Formulário simples com Título do Post, Conteúdo do Post, Categoria, Tags, Nome do Autor e E-mail do Autor:
require_once get_template_directory() . '/core/classes/abstracts/abstract-front-end-form.php';
require_once get_template_directory() . '/core/classes/class-contact-form.php';
function odin_post_form() {
$form = new Odin_Post_Form(
'form_id', // ID do formulário
'post', // Tipo de post a ser criado. Padrão: 'post'
'draft', // Status do post ao ser criado. Padrão: 'draft'
array( 'class' => 'form' ) // Atributos do formulário. Padrão: 'array()'
);
$form->set_title_field( 'post_title' );
$form->set_content_field( 'post_content' );
$form->set_terms( array(
'category' => 'category_field',
'post_tag' => 'post_tag_field',
) );
$form->set_custom_fields( array(
'author_name',
'author_mail',
) );
$form->set_fields(
array(
array(
'fields' => array(
array(
'id' => 'post_title', // Obrigatório
'label' => array(
'text' => __( 'Título do Post', 'odin' ), // Obrigatório
'class' => 'example-class example-class-2'
),
'type' => 'text', // Obrigatório
'required' => true, // Opcional (bool)
'attributes' => array( // Opcional (html input elements)
'placeholder' => __( 'Digite o título do post' )
)
),
array(
'id' => 'post_content', // Obrigatório
'label' => array(
'text' => __( 'Conteúdo do Post', 'odin' ), // Obrigatório
'class' => 'example-class example-class-2'
),
'type' => 'textarea', // Obrigatório
'required' => true, // Opcional (bool)
),
)
),
array(
'fields' => array(
array(
'id' => 'category_field', // Obrigatório
'label' => array(
'text' => __( 'Categoria do Post', 'odin' ), // Obrigatório
'class' => 'example-class example-class-2',
),
'type' => 'select', // Obrigatório
'required' => true, // Opcional (bool)
'default' => '1',
'options' => get_terms( array(
'taxonomy' => 'category',
'hide_empty' => false,
'fields' => 'id=>name',
) ),
),
array(
'id' => 'post_tag_field', // Obrigatório
'label' => array(
'text' => __( 'Tags do Post', 'odin' ), // Obrigatório
'class' => 'example-class example-class-2',
),
'type' => 'text', // Obrigatório
'required' => true, // Opcional (bool)
),
array(
'id' => 'author_name', // Obrigatório
'label' => array(
'text' => __( 'Nome do Autor', 'odin' ), // Obrigatório
'class' => 'example-class example-class-2',
),
'type' => 'text', // Obrigatório
'required' => true, // Opcional (bool)
),
array(
'id' => 'author_mail', // Obrigatório
'label' => array(
'text' => __( 'E-mail do Autor', 'odin' ), // Obrigatório
'class' => 'example-class example-class-2',
),
'type' => 'email', // Obrigatório
'required' => true, // Opcional (bool)
),
)
)
)
);
return $form;
}
add_action( 'init', array( odin_post_form(), 'init' ), 1 );
Depois no tema basta adicionar a seguinte linha para mostrar o formulário
echo odin_post_form()->render();
Odin_Post_Form esta localizado em core/classes/class-post-form.php
.