Pergunta

Ok, deixe-me ver se eu posso explicar isso direito. Em wordpress temos uma caixa para inserir um trecho. Precisamos adicionar uma caixa segundo trecho. Em vez de adicionar manualmente um campo personalizado para cada post eu coloquei uma função para adicionar automaticamente um campo personalizado na forma de uma caixa de Meta na página de administração post.

Ok, então este é o problema que eu estou tendo esta função está trabalhando exceto pelo fato de que tudo o que você entrar neste campo que perde a sua quebras de linha. Então, quando nossos escritores são contrubuting a este campo, a fim de manter a formatação do bloco de texto que eu tenho que adicionar manualmente
ao final do parágrafo.

Aqui está o meu código:

function my_create_post_meta_box() {
    add_meta_box( 'my-meta-box', 'Second Excerpt', 'my_post_meta_box', 'post', 'normal', 'high' );
}

function my_post_meta_box( $object, $box ) { ?>
<p>
    <label for="second-excerpt">
        <strong>Second Excerpt With Images for Post List Page</strong>
    </label>
    <textarea name="second-excerpt" id="second-excerpt" cols="60" rows="4" tabindex="30" style="width: 97%;" wrap="hard"><?php echo wp_specialchars( get_post_meta( $object->ID, 'Second Excerpt', true ), 1 ); ?></textarea>
    <input type="hidden" name="my_meta_box_nonce" value="<?php echo wp_create_nonce( plugin_basename( __FILE__ ) ); ?>" />
</p>
<?php
}

function my_save_post_meta_box( $post_id, $post ) {

    if ( !wp_verify_nonce( $_POST['my_meta_box_nonce'], plugin_basename( __FILE__ ) ) )
        return $post_id;

    if ( !current_user_can( 'edit_post', $post_id ) )
        return $post_id;

    $meta_value = get_post_meta( $post_id, 'Second Excerpt', true );
    $new_meta_value = stripslashes( $_POST['second-excerpt'] );

    if ( $new_meta_value && '' == $meta_value )
        add_post_meta( $post_id, 'Second Excerpt', $new_meta_value, true );

    elseif ( $new_meta_value != $meta_value )
        update_post_meta( $post_id, 'Second Excerpt', $new_meta_value );

    elseif ( '' == $new_meta_value && $meta_value )
        delete_post_meta( $post_id, 'Second Excerpt', $meta_value );
}

Graças e qualquer ajuda faria.

Foi útil?

Solução 4

Ok, eu ter encontrado uma outra solução para o meu problema. Obrigado Tatu para obter o meu workin cérebro. Para aqueles que estão procurando uma solução isto é o que eu fiz:

$new_meta_value = "<p>" . implode( "</p>\n\n<p>", preg_split( '/\n(?:\s*\n)+/', $new_meta_value ) ) . "</p>";

Outras dicas

Use a função wpautop no modelo de frontend. Como:

<?php $yourvalue =  get_post_meta($post->ID, "yourvalue", true);   
  if ($yourvalue != ""){ ?>
   <dt>Consult&oacute;rio:</dt>
   <dd><?php echo wpautop( $consultorio, $br = 1 ); ?></dd>
<?php } ?>

Apenas adicione esta linha após $new_meta_value = ...:

$new_meta_value = nl2br($new_meta_value);

E, em vez de comparar seus valores para '', é melhor usar empty(). Também algumas das comparações são desnecessários. Assim, o add / update / parte de exclusão de sua função de economia pode ser escrito assim:

if(empty($meta_value)) {
    add_post_meta( $post_id, 'Second Excerpt', $new_meta_value, true );
} elseif(empty($new_meta_value)) {
    delete_post_meta( $post_id, 'Second Excerpt', $meta_value );
} else {
    update_post_meta( $post_id, 'Second Excerpt', $new_meta_value );
}

Note que é sempre aconselhável a utilização de chaves, mesmo se a sua declaração é apenas uma linha longa. Além disso, melhora a legibilidade e não baralhar as coisas se / quando você tem que adicionar outra linha à cláusula if.

Não modifique os dados guardados no banco de dados. Salve exatamente o que o usuário digita. Em vez disso modificar o conteúdo quando você precisa para exibi-lo. Dessa forma, quando o usuário volta a editar o campo de edição o que colocar, não o que você fez de seu conteúdo.

Use wpautop fazer a mesma tradução em seu texto que WordPress se aplica ao conteúdo bruto inserido no campo pós-conteúdo e fazê-lo quando o conteúdo é solicitado para exibição.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top