2

わかりました、これを正しく説明できるかどうか見てみましょう。wordpress には、抜粋を挿入するためのボックスがあります。2 つ目の抜粋ボックスを追加する必要があります。カスタム フィールドをすべての投稿に手動で追加する代わりに、管理者の投稿ページにメタ ボックスの形式でカスタム フィールドを自動的に追加する機能を配置しました。

さて、これは、このフィールドに何を入力しても改行が失われるという事実を除いて、この機能が機能しているという問題です。そのため、ライターがテキスト ブロックの書式設定を維持するためにこのフィールドに貢献している場合
、段落の最後に手動で追加する必要があります。

これが私のコードです:

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 );
}

ありがとうございました。

4

4 に答える 4

4

フロントエンド テンプレートで wpautop 関数を使用します。お気に入り:

<?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 } ?>
于 2010-11-01T10:09:17.100 に答える
3

の後に次の行を追加するだけ$new_meta_value = ...です:

$new_meta_value = nl2br($new_meta_value);

値を と比較する代わりに、''を使用することをお勧めしますempty()。また、一部の比較は不要です。したがって、保存関数の追加/更新/削除部分は次のように記述できます。

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 );
}

ステートメントが 1 行しかない場合でも、常に中かっこを使用することをお勧めします。読みやすさが向上し、if 句に別の行を追加する必要がある場合でも混乱しません。

于 2010-01-05T17:01:43.857 に答える
1

データベースに保存されているデータは変更しないでください。ユーザーが入力した内容を正確に保存します。代わりに、表示する必要があるときにコンテンツを変更してください。このようにして、ユーザーがフィールドを編集するために戻ってきたときに、コンテンツで作成したものではなく、ユーザーが入力したものを編集します。

wpautopポストコンテンツフィールドに入力された生のコンテンツにWordPressが適用するのと同じ翻訳をテキストで実行し、コンテンツの表示が要求されたときに実行するために使用します。

于 2010-01-09T06:23:20.460 に答える
0

さて、私の問題に対する別の解決策を見つけました。私の脳を働かせてくれてありがとうTatu。解決策を探している人のために、これは私がやったことです:

$new_meta_value = "<p>" . implode( "</p>\n\n<p>", preg_split( '/\n(?:\s*\n)+/', $new_meta_value ) ) . "</p>";
于 2010-01-05T19:56:39.240 に答える