5
respostas

Funçao update_post_meta() pedindo terceiro argumento

Na aula é passado somente dois parametros,mas quando vou atualizar o post é pedido o terceiro parametro,gerando o seguinte WARNING:

Warning: Missing argument 3 for update_post_meta(), called in C:\xampp\htdocs\WORDPRESS-ALURA\wordpress\wp-content\themes\malura\functions.php on line 488 and defined in C:\xampp\htdocs\WORDPRESS-ALURA\wordpress\wp-includes\post.php on line 1776

No codigo é passado um name e um $_POST com o valor.

 update_post_meta('preco_id',$_POST['preco_id']);

Qual seria o terceiro argumento? Agradeço ajuda.

5 respostas

Olá, José. Tudo bom?

Você pode me mandar a mensagem de warning?

Olá Marco! a mensagem está acima, junto com a minha duvida.

Mal, José. Viajei!

Acabei de olhar na documentação e está faltando o parâmetro $meta_value.

Ah! Está função recebe 4 parâmetros dos quais 3 são requeridos e 1 não. Os parâmetros são: - $post_id (requerido) - $meta_key (requerido) - $meta_value (requerido) - $prev_value (opcional)

Se você quiser saber no detalhe cada uma deles vale a pena dar uma olhada na documentação: https://codex.wordpress.org/Function_Reference/update_post_meta

Se ficar qualquer dúvida é só chamar :-)

Entao Marcos eu entendi,mas essa funçao está sendo aplicada em campos de um formulario,eu até ja tinha visto a documentaçao,mas a explicaçao é meio vaga,

<div class="col-lg-12">
        <div class="input-group">
            <input name="preco_id" type="text" class="form-control" placeholder="Preço">
        </div>
        <div class="input-group">
            <input name="quartos_id" type="text" class="form-control" placeholder="Quartos" aria-describedby="basic-addon2">
        </div>
        <div class="input-group">
            <input name="banheiros_id" type="text" class="form-control" placeholder="Bnaheiros" aria-describedby="basic-addon2">
        </div>
        <div class="input-group">
            <input name="vagas_id" type="text" class="form-control" placeholder="Vagas" aria-describedby="basic-addon2">
        </div>
    </div>

O id é o name dos inputs,o valor seria o valor que é pego pelo post $_POST['preco_id'] ect...e esse parametro meta_value é que eu nao entendi,nos campos desse formulario qual seria esse valor?

 update_post_meta('preco_id',$_POST['preco_id'], ???)

E o estranho é que na aula é usado somente dois parametros.

Oi José,

Já tem um tempo que postou, mas como estou fazendo esta aula agora, e passei pelo mesmo problema, resolvi deixar aqui meu comentário.

Acontece que mais pra frente no vídeo, no código mostrado já aparecem os 3 parâmetros, inclusive o parâmetro $post_id na própria função.

Mas por algum motivo, esses trechos não foram mencionados no vídeo.

O código que funcionou aqui pra fazer a inserção no banco foi esse:

function salvar_meta_info_imoveis( $post_id ){

    if(isset($_POST['preco_id'])){    
        update_post_meta($post_id, 'preco_id', $_POST['preco_id']);
    }

    if(isset($_POST['vagas_id'])){
        update_post_meta($post_id, 'vagas_id', $_POST['vagas_id']);
    }

    if(isset($_POST['banheiros_id'])){
        update_post_meta($post_id, 'banheiros_id', $_POST['banheiros_id']);
    }

    if(isset($_POST['quartos_id'])){
        update_post_meta($post_id, 'quartos_id', $_POST['quartos_id']);
    }
}

add_action('save_post', 'atualiza_meta_info'); //roda quando o POST for salvo/enviado

Então a maneira como é passada no vídeo, dizendo que o ID é o name dos inputs, me parece errada. O ID que deve ser passado é o ID do próprio post.

Na explicação escrita também está um pouco confuso, porque alguns update_post_meta() recebem 3 parâmetros, e outros recebem 2, gerando confusão. Está assim por lá:

function salvar_meta_info_imoveis( $post_id ) {
    if( isset($_POST['preco_id']) ) {
        update_post_meta('preco_id', $_POST['preco_id']);
    }
    if( isset($_POST['vagas_id']) ) {
        update_post_meta('vagas_id', $_POST['vagas_id']);
    }
    if( isset($_POST['banheiros_id']) ) {
        update_post_meta('banheiros_id', $_POST['banheiros_id']);
    }
    if( isset($_POST['quartos_id']) ) {
        update_post_meta( $post_id, 'quartos_id', $_POST['quartos_id']);
    }
}

add_action('save_post', 'salvar_meta_info_imoveis');

Repare que somente o último update tem o $post_id sendo passado.

Vamos ver se eles ajustam isso mais pra frente!

Abraço. Thiago