Open rauan941 opened 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,
),
),
);
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
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?
isso
O problema está no 'type' => 'marca' pois o type deve ser do tipo select. Então para funcionar teria que colocar 'type' => 'select',
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
/**
@return string HTML of the field. */ protected function field_select( $id, $current, $options, $attrs ) { // If multiple add a array in the option. $multiple = ( in_array( 'multiple', $attrs ) ) ? '[]' : '';
$html = sprintf( '<select id="%1$s" name="%1$s%2$s"%3$s>', $id, $multiple, $this->build_field_attributes( $attrs ) );
foreach ( $options as $key => $label ) {
$selected = $this->is_selected( $current, $key );
$html .= sprintf( '<option value="%s"%s>%s</option>', $key, $selected, $label );
}
$html .= '</select>';
echo $html;
}
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?
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 );
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