Skip to content
This repository has been archived by the owner on Apr 4, 2019. It is now read-only.

Uma classe para ser utilizada juntamente com a classe Odin_Metabox do Odin Framework, para alterar como os usuários inserem dados de taxonomias no WordPress, criando custom metaboxes.

License

Notifications You must be signed in to change notification settings

HasteDesign/Odin-Taxonomy-Metabox

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Taxonomy Metabox

Uma classe para ser utilizada juntamente com a classe Odin_Metabox do Odin Framework, para alterar como os usuários inserem dados de taxonomias no WordPress, criando custom metaboxes.

Muitas vezes os inputs padrão para termos de taxonomias não são adequados às necessidades dos projetos, no caso de taxonomias como tags, as vezes é desejável ter uma listagem das tags já cadastradas para a sua escolha durante a edição de uma publicação. Pensando nessa aplicação e nos possíveis desdobramentos e extensões que possam surgir sobre a modificação dos inputs de taxonomias, essa classe foi criada para auxiliar aqueles que se deparam com essa necessidade em seus projetos, seja servindo com sua utilização, ou mesmo como referência para a criação de sua própria classe.

Odin Framework

O Odin Framework possui uma classe de criação de custom metaboxes bem estruturada e organizada. Têm se mostrado um tema base bem aceito pela comunidade e possuí uma boa documentação para criação de metaboxes. Além disso, sua classe pode ser implementada em outros temas com facilidade, basta copiar alguns arquivos e modificar alguns diretórios.

Utilizando a classe no Odin Framework

Para utilizar a classe com o Odin Framework, basta colocar o arquivo class-metabox-taxonomy.php no diretório '../odin/core/classes'.

No seu functions.php, basta inserir:

require_once get_template_directory() . '/core/classes/class-metabox.php';
require_once get_template_directory() . '/core/classes/class-metabox-taxonomy.php';

Pronto! Agora você estará pronto para utilizar a classe no seu functions.php.

Utilizando a classe em outros temas

Para utilizar a classe em outros temas, copie a pasta assets, os arquivos class-metabox.php e class-metabox-taxonomy.php em um diretório do seu tema.

No arquivo class-metabox.php, altere o caminho do diretório '/core/assets/...' para o caminho corrreto do diretório em seu tema. Se você tiver colocado os arquivos em um diretório chamado core na raiz do tema, não será preciso alterar nada.

No seu functions.php, basta inserir:

require_once get_template_directory() . '/[meu_caminho]/class-metabox.php';
require_once get_template_directory() . '/[meu_caminho]/class-metabox-taxonomy.php';

Criando campos

A criação de campos segue a base de sua classe pai Odin_Metabox, a qual você pode ver a documentação em https://github.com/wpbrasil/odin/wiki/Classe-Odin_Metabox

Atualmente a classe oferece a possibilidade de criação de dois campos:

  • tags_checkbox
  • tags_select

Tags Checkbox

Funciona tanto para custom taxonomies hierárquicas quanto não-hierárquicas.

  $color = new Taxonomy_Metabox(
	    'cores',  // Slug/ID do Metabox (obrigatório)
	    'Cores',  // Nome do Metabox  (obrigatório)
	    'post',   // Slug do Post Type (opcional)
	    'normal', // Contexto (opções: normal, advanced, ou side) (opcional)
	    'high',   // Prioridade (opções: high, core, default ou low) (opcional)
	    'cor'     // Slug da taxonomia
	);
	
	/* É preciso realizar uma busca por todos os termos da taxonomia
	 * para passá-los no array de options do campo.
	 */
	$colors = get_terms('cor', 'hide_empty=0'); 
	
	/* Caso exista termos registrados, iterar sobre todos os termos e
	 * armazená-los em um array, associando term->name com term->slug.
	 */
	if( $colors ) {
			foreach ($colors as $cor) {
			      $boxes[$cor->name] = $cor->slug;
		    }
		
		/*
		 * Definir os campos passando o type 'tags_checkbox' e o array no options.
		 */
		$color->set_fields( 
		array(
	        array(
	            'id'          => 'cores',
	            'label'       => 'Cores',
	            'type'        => 'tags_checkbox',
	            'attributes'  => array('multiple' => 'multiple'),
	            'description' => __( 'Select the post color', 'odin' ),
	            'options'	    => $boxes
	        )
	    )
		);
	}

Tags Select

Funciona tanto para custom taxonomies hierárquicas quanto não-hierárquicas.

Listando todos os termos

    $veiculo_metabox = new Taxonomy_Metabox(
        'veiculo',      // Slug/ID do Metabox (obrigatório)
        'Veículo',      // Nome do Metabox  (obrigatório)
        'post',         // Slug do Post Type (opcional)
        'normal',       // Contexto (opções: normal, advanced, ou side) (opcional)
        'high',         // Prioridade (opções: high, core, default ou low) (opcional)
        'veiculo'       // Slug da taxonomia
    );

    /* É preciso realizar uma busca por todos os termos da taxonomia
     * para passá-los no array de options do campo.
     */
    $veiculos = get_terms('veiculo', array( 'hide_empty' => 0 ) );
    
    /* Caso exista termos registrados, iterar sobre todos os termos e
     * armazená-los em um array, associando term->name com term->slug.
     */    
    if( !empty( $veiculos ) && !is_wp_error( $veiculos ) ) {
        foreach ($veiculos as $veiculo) {
              $boxes[$veiculo->name] = $veiculo->slug;
        }
        
        /*
         * Definir os campos passando o type 'tags_checkbox' e o array no options.
         */
        $veiculo_metabox->set_fields( 
        array(
            array(
                'id'          => 'veiculo',
                'label'       => 'Veículo',
                'type'        => 'tags_select',
                //'attributes'  => array('multiple' => 'multiple'), //Utilize este parâmetro caso queira que o select seja de múltipla opção 
                'description' => 'Selecione o veículo da publicação.',
                'options'     => $boxes
            )
        )
        );
    }

Listando apenas termos Pai

    $veiculo_metabox = new Taxonomy_Metabox(
        'veiculo',      // Slug/ID do Metabox (obrigatório)
        'Veículo',      // Nome do Metabox  (obrigatório)
        'post',         // Slug do Post Type (opcional)
        'normal',       // Contexto (opções: normal, advanced, ou side) (opcional)
        'high',         // Prioridade (opções: high, core, default ou low) (opcional)
        'veiculo'       // Slug da taxonomia
    );

    /* É preciso realizar uma busca por todos os termos da taxonomia
     * para passá-los no array de options do campo.
     */
    $veiculos = get_terms('veiculo', array( 'hide_empty' => 0, 'parent' => 0) );
    
    /* Caso exista termos registrados, iterar sobre todos os termos e
     * armazená-los em um array, associando term->name com term->slug.
     */    
    if( !empty( $veiculos ) && !is_wp_error( $veiculos ) ) {
        foreach ($veiculos as $veiculo) {
              $boxes[$veiculo->name] = $veiculo->slug;
        }
        
        /*
         * Definir os campos passando o type 'tags_checkbox' e o array no options.
         */
        $veiculo_metabox->set_fields( 
        array(
            array(
                'id'          => 'veiculo',
                'label'       => 'Veículo',
                'type'        => 'tags_select',
                //'attributes'  => array('multiple' => 'multiple'), //Utilize este parâmetro caso queira que o select seja de múltipla opção 
                'description' => 'Selecione o veículo da publicação.',
                'options'     => $boxes
            )
        )
        );
    }

Listando apenas termos Filho

    $veiculo_metabox = new Taxonomy_Metabox(
        'veiculo',      // Slug/ID do Metabox (obrigatório)
        'Veículo',      // Nome do Metabox  (obrigatório)
        'post',         // Slug do Post Type (opcional)
        'normal',       // Contexto (opções: normal, advanced, ou side) (opcional)
        'high',         // Prioridade (opções: high, core, default ou low) (opcional)
        'veiculo'       // Slug da taxonomia
    );

    /* É preciso realizar uma busca por todos os termos da taxonomia com o atributo parent => 0, pegando os pais, e depois iterar sobre
     * cada um dos pais e pegar os termos filhos, armazenando-os em $veiculos, para então passá-los no array de options do campo.
     */
    $parent_veiculos = get_terms('veiculo', array( 'hide_empty' => 0, 'parent' => 0) );
    foreach( $parent_veiculos as $child_veiculos ) {
        $veiculos = get_terms('veiculo', array('parent' => $child_veiculos->term_id, 'hide_empty' => 0));
    }
    
    /* Caso exista termos registrados, iterar sobre todos os termos e
     * armazená-los em um array, associando term->name com term->slug.
     */    
    if( !empty( $veiculos ) && !is_wp_error( $veiculos ) ) {
        foreach ($veiculos as $veiculo) {
              $boxes[$veiculo->name] = $veiculo->slug;
        }
        
        /*
         * Definir os campos passando o type 'tags_checkbox' e o array no options.
         */
        $veiculo_metabox->set_fields( 
        array(
            array(
                'id'          => 'veiculo',
                'label'       => 'Veículo',
                'type'        => 'tags_select',
                //'attributes'  => array('multiple' => 'multiple'), //Utilize este parâmetro caso queira que o select seja de múltipla opção 
                'description' => 'Selecione o veículo da publicação.',
                'options'     => $boxes
            )
        )
        );
    }

About

Uma classe para ser utilizada juntamente com a classe Odin_Metabox do Odin Framework, para alterar como os usuários inserem dados de taxonomias no WordPress, criando custom metaboxes.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages