Suporte » Plugins » Metabox no WordPress

  • Resolvido DavidWashin

    (@davidwashin)


    Olá Pessoal, estou precisando da ajuda de vocês.
    Adicionei um novo metabox ao functions.php do meu tema com o seguinte codigo:

    <?php
    add_action( 'admin_init', 'add_creditosbox' );
    function add_creditosbox() {
      add_meta_box(
        'creditosbox',
        'Créditos do Filme',
        'add_content_creditosbox',
        'filme'
      );
    }
    
    function add_content_creditosbox() {
      global $post;
      $value = get_post_meta( $post->ID, 'creditos', true );
      if ( !$value ) {
        $value = '';
        add_post_meta( $post->ID, 'creditos', $value, true );
      }
      ?>
      <table class="custom-post-box">
        <tr>
          <td><textarea name="creditos" cols="174" rows="10"><?php echo $value ?></textarea></td>
        </tr>
      </table>
      <?php
    } 
    
    add_action( 'save_post', 'save_creditosbox' );
    
    function save_creditosbox( $post_id ) {
      if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
    	return $post_id;
    
      if ( !current_user_can( 'edit_post', $post_id ) )
    	return $post_id;
    
      if ( get_post_type( $post_id ) == 'filme' ) {
    	$value_old = get_post_meta( $post_id, 'creditos', true );
        $value_new = esc_attr( $_POST[ 'creditos' ] );
    
    	if ( !$value_new ) {
    	  if ( $value_old )
    	    delete_post_meta( $post_id, 'creditos', $value_old );
    	} else {
    	  update_post_meta( $post_id, 'creditos', $value_new );
    	}
      }
    
      return $post_id;
    }
    
    ?>

    Utilizo o codigo
    <?php echo get_post_meta($post->ID, 'creditos', true) ?>
    para lê-lo na pagina single.php

    Ele está funcionando corretamente, desde que não seja utilizado codigos html, ou seja se eu digitar <br />, por exemplo, ná pagina isso aparece exatamente dessa forma, acessei o banco de dados e vi que o mesmo está escrevendo da seguinte forma: & lt;br /& gt;

    Logo isso me faz imagninar que isso seja algum problema relacionado a charset ou algo do tipo, espero que alguem possa me ajudar…

    Desde já, Obrigado!

Visualizando 6 respostas - 1 até 6 (de um total de 6)
  • Use esc_html ao inves de esc_attr:

    $value_new = esc_html( $_POST[ 'creditos' ] );

    Criador do tópico DavidWashin

    (@davidwashin)

    Ricardo meu amigo, obrigado pela tentativa de ajuda, mas a mesma não funcionou, o codigo html continua sendo lido como texto…

    Ainda preciso da ajuda de vocês…

    outro dia tive um pepino com isso.

    Resolveu usando esc_html para salvar e html_entity_decode($html) na exibição. Aí rolou legal.

    Criador do tópico DavidWashin

    (@davidwashin)

    Desculpe minha ignorancia, mas onde devo colocar esse html_entity_decode($html)? não achei nada semelhante em lugar algum…

    Desde já, Obrigado!

    Essa parte vai no seu template mesmo, não no backend.

    Algo tipo:

    $value = get_post_meta( $post->ID, 'creditos', true );
    
    echo '<div id="creditos">';
    echo html_entity_decode($value);
    echo '</div>';
    Criador do tópico DavidWashin

    (@davidwashin)

    Parabéns meu velho, agora sim consegui fazer funcionar! muito Obrigado!

Visualizando 6 respostas - 1 até 6 (de um total de 6)
  • O tópico ‘Metabox no WordPress’ está fechado para novas respostas.