wpbrasil / odin

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

Populando Select com dados do bd #479

Open cunhapablo opened 6 years ago

cunhapablo commented 6 years ago

Olá pessoal, boa tarde. Já pesquisei diversas formas e estou recorrendo a ajuda de vocês no seguinte problema:

Criei um custom post type para Países e estou criando um outro custom post type de cidades em que o usuário deverá selecionar o país que aquela cidade pertence, porém coloco o array no 'options' e a o select não é preenchido com os dados.

Segue o código para análise :

$paises_terms = get_posts( array( 'post_type' => 'pais') ); 
$paises_terms_keys = array(); 
$paises_terms_values = array(); 
foreach( $paises_terms as $paises_term ) { 
    array_push( $paises_terms_keys, $paises_term->ID ); 
    array_push( $paises_terms_values, $paises_term->post_title ); 
}
function cidade_metabox() {

    $cidades_metabox = new Odin_Metabox(
        'cidade', // Slug/ID of the Metabox (Required)
        'Detalhes da Cidade', // Metabox name (Required)
        'cidade', // Slug of Post Type (Optional)
        'normal', // Context (options: normal, advanced, or side) (Optional)
        'high' // Priority (options: high, core, default or low) (Optional)
    );

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

            array(
                'id'            => 'pais', // Obrigatório
                'label'         => __( 'Text Example', 'odin' ), // Obrigatório
                'type'          => 'select', // Obrigatório
                // 'attributes' => array(), // Opcional (atributos para input HTML/HTML5)
                //'default'       => 'three', // Opcional
                'description'   => __( 'Descrition Example', 'odin' ), // Opcional
                'options'       => $opcoes_paises
            )
)
}

agradeço a atenção desde já.

luchesigui commented 4 years ago

@cunhapablo, vi alguns problemas no código que acredito que podem ser o motivo.

  1. Você ta usando $opcoes_paises mas nunca declaro;
  2. O set_fields está faltando um "(" pra fechar;
$paises = get_posts( array(
    'post_type' => 'pais',
    'orderby' => 'title',
    'order' => 'ASC',
) );
$opcoes_paises = array();

foreach( $paises as $pais ) {
    $opcoes_paises[$pais->ID] = $pais->post_title;
}

$cidades_metabox->set_fields(
    array(
        /**
         * Default input examples.
         */
        array(
            'id'            => 'pais', // Obrigatório
            'label'         => __( 'Text Example', 'odin' ), // Obrigatório
            'type'          => 'select', // Obrigatório
            'description'   => __( 'Description Example', 'odin' ), // Opcional
            'options'       => $opcoes_paises
        )
    )
);

Atribui o resultado do get_post organizado em ordem alfabética na variável $paises e joguei o id e título e id num array de $opcoes_paises e acho que isso já resolve.