wpbrasil / odin

Framework and base theme for development with WordPress.
http://wpod.in
563 stars 196 forks source link

Metabox para pagina especifica. #457

Open thiagocrepald opened 7 years ago

thiagocrepald commented 7 years ago

Bom dia pessoal,

conheci o Odin nesta semana e parei de utilizar o plugin Meta Box para utilizar o mesmo. Gostei muito pela praticidade e objetividade da documentação.

Estou com o seguinte problema, como faço para criar uma Metabox em uma página especifica.

Preciso criar os campos personalizados, porém na Quem Somos irá ter campos diferentes da Contato por exemplo.

Como posso fazer isso? É possível?

allysonsouza commented 7 years ago

Olá @thiagocrepald,

Por padrão o Odin não oferece este recurso, mas você pode fazer com um pouco de código. Primeiro passo é saber, como distinguir quais campos devem ser exibidos em cada página? Pelo título? ("Quem somos", "Contato")? Pelo modelo de página selecionado no select de atributos da página? Ou por um campo de opção (uma metabox) que definirá quais outras meta boxes serão exibidas?

O principal é você saber onde isso será definido/verificado e então criar um código JavaScript para alternar os campos a serem exibidos.

mariovalney commented 7 years ago

Olá @thiagocrepald tudo bem?

Uma outra solução seria fazer a verificação da página antes de adicionar os fields com set_fields.

thiagocrepald commented 7 years ago

@allysonsouza show de bola, na vdd acho que por titulo seria mais fácil..

Você já criou algo neste modelo?

thiagocrepald commented 7 years ago

@mariovalney com um if por exemplo?

lenivene commented 5 years ago

@allysonsouza show de bola, na vdd acho que por titulo seria mais fácil..

@thiagocrepald se você usa vários idiomas no site, por titulo seria uma boa solução? :thinking:

williamgcd commented 4 years ago

@thiagocrepald Não sei se já resolveu isso, mas precisei fazer algo do tipo hoje e ao pesquisar alguma solução, achei essa sua pergunta. Eu acabei alterando a class Odin_Metabox.

Segue o que eu fiz:

// Adicionar um parametro no construct public function __construct( $id, $title, $post_type = 'post', $context = 'normal', $priority = 'high', $post_name = [] )

// Algumas linhas abaixo, junto com as outras declarações, eu coloquei a do post_name $this->post_name = (!is_array($post_name) ? [$post_name] : $post_name);

// Depois, no metodo add(), eu adicionei o seguinte conteúdo logo no começo

global $post;
// Has a post_name specificity?
if (count($this->post_name)) {
    // If the name is not in the array, skip it.
    if (!in_array($post->post_name, $this->post_name)) {
        return false;
    }
}

Coloquei o arquivo aqui para usar se quiser.

class-metabox.zip