wpbrasil / odin

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

Select não esta salvando a opção #496

Open rauan941 opened 4 years ago

rauan941 commented 4 years ago

Primeira vez utilizando o Odin e me apareceu um problema que não estou conseguindo resolver

As marcas estão cadastradas, cadastro o veículo normalmente porém quando preciso editar algo ele sempre volta para a primeira opção do select, e não para a última seleção

Ex: marcas que ele lista

Audi BMW Chevrolet Volkswagen - Seleciono esta Mercedes

Salvo e assim que atualizo ele fica na primeira opção da lista, no caso Audi, meu código:

array( 'id' => 'marca', // Obrigatório 'label' => ( 'FABRICANTE', 'odin' ), // Obrigatório 'type' => 'marca', // Obrigatório 'description' => ( 'Escolha a marca do veículo', 'odin' ), // Optional ),

Se alguém souber como resolver, ou como gravar a última seleção agradeço

luchesigui commented 4 years ago

@rauan941, na issue #479 tem um problema parecido. No array de opções você tá colocando um id pra cada marca como no exemplo abaixo?

$marcas_options = array(
    'audi' => 'Audi',
    'bmw' => 'BMW',
    'chevrolet' => 'Chevrolet',
    'volkswagen' => 'Volkswagen',
    'mercedes' => 'Mercedes',
);

$carro_metabox->set_fields(
    array(
        array(
            'id' => 'marca', // Obrigatório
            'label' => __( 'FABRICANTE', 'odin' ), // Obrigatório
            'type' => 'marca', // Obrigatório
            'description' => __( 'Escolha a marca do veículo', 'odin' ), // Optional
            'options' => $marcas_options,
        ),
    ),
);
rauan941 commented 4 years ago

Esse é meu arquivo marca.php, vou tentar te explicar como funciona, acessando o menu Marcas, cadastro a fabricante e escolho de qual área ela é (Carro, moto ou caminhão) e ao cadastrar as informações é listadas no código acima

marca.zip

luchesigui commented 4 years ago

Então, mas pela descrição que você deu o problema está no post type de carros que não está salvando a marca, correto?

rauan941 commented 4 years ago

isso

perrout commented 4 years ago

O problema está no 'type' => 'marca' pois o type deve ser do tipo select. Então para funcionar teria que colocar 'type' => 'select',

rauan941 commented 4 years ago

O problema está no 'type' => 'marca' pois o type deve ser do tipo select. Então para funcionar teria que colocar 'type' => 'select',

Quando eu troco para select, retorna esse erro: Warning: Invalid argument supplied for foreach() in /home/comparaq/public_html/site/wp-content/themes/basic/core/classes/class-metabox.php on line 828

class-metabox.php - 282

/**

perrout commented 4 years ago

Vc está usando qual versão do odin? Pois esse testei a v2 agora seguindo o exemplo da documentação e funcionou perfeitamente. Vc não alterou nada?

http://wpod.in/v2/Classe-Odin_Metabox.html#exemplo

perrout commented 4 years ago

Exemplo

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

function marcas_metabox_example() {

$marcas_options = array(
    'audi' => 'Audi',
    'bmw' => 'BMW',
    'chevrolet' => 'Chevrolet',
    'volkswagen' => 'Volkswagen',
    'mercedes' => 'Mercedes',
);

$marcas_metabox = new Odin_Metabox(
    'marcas', // Slug/ID of the Metabox (Required)
    'Marcas', // Metabox name (Required)
    'post', // Slug of Post Type (Optional)
    'normal', // Context (options: normal, advanced, or side) (Optional)
    'high' // Priority (options: high, core, default or low) (Optional)
);

$marcas_metabox->set_fields(
    array(
        /**
         * Default input examples.
         */

        // Select field.
        array(
            'id'          => 'test_select', // Required
            'label'       => __( 'Marcas', 'odin' ), // Required
            'type'        => 'select', // Required
            'attributes' => array(
                'multiple' => true
            ),
            'description' => __( 'Selecione uma marca', 'odin' ), // Optional
            'options' => $marcas_options
        ),
    )
);

}

add_action( 'init', 'marcas_metabox_example', 1 );