سؤال

حسنا، دعني أرى ما إذا كان بإمكاني شرح هذا الحق. في WordPress، لدينا صندوق لإدخال مقتطف. نحتاج إلى إضافة مربع مقتطف ثان. بدلا من إضافة حقل مخصص يدويا إلى كل منشور قد وضعت دالة لإضافة حقل مخصص تلقائيا في شكل مربع التعريف على صفحة نشر المسؤول.

حسنا، هذه هي المشكلة التي أواجهها هذه الوظيفة تعمل باستثناء حقيقة أن مهما دخلت في هذا المجال فهي تفقد فواصل الأسطر. لذلك عندما يتناقص كتابنا لهذا الحقل من أجل الاستمرار في تنسيق كتلة النص، يجب أن أضيف يدويا
إلى نهاية الفقرة.

هنا هو رمزي:

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

حسنا لقد وجدت حلا آخر لمشكلتي. شكرا لك TATU للحصول على Workin عقلي. بالنسبة لأولئك الذين يبحثون عن حل هذا ما فعلته:

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

نصائح أخرى

استخدم وظيفة 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 } ?>

فقط أضف هذا الخط بعد $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 );
}

لاحظ أنه من المستحسن دائما استخدام الأقواس المجعد حتى إذا كان بيانك هو صف واحد فقط. إنه يحسن قابلية القراءة ولا يفسد الأشياء إذا / عندما تضطر إلى إضافة صف آخر إلى جملة إذا كان.

لا تقم بتعديل البيانات المحفوظة في قاعدة البيانات. حفظ بالضبط ما يدخله المستخدم. بدلا من ذلك تعديل المحتوى عند الحاجة لعرضه. بهذه الطريقة عندما يعود المستخدم إلى تحرير الحقل تحرير ما وضعوه في، وليس ما قمت به من محتواه.

يستخدم wpautop للقيام بنفس الترجمة على النص الذي ينطبق عليه WordPress على المحتوى الخام الذي تم إدخاله في حقل ما بعد المحتوى والقيام بذلك عند طلب المحتوى للعرض.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top