"_Encloseme" Meta-Key Conundrum

8

Saat bekerja dengan metabox / bidang khusus saya sepertinya secara tidak langsung membuat banyak dari ini di _encloseme meta_keysseluruh saya wp_postmeta.

Terlihat di sini:

Sejauh ini tidak ada masalah yang muncul dari ini dan bidang khusus berfungsi dengan baik, tetapi saya hanya gelisah dengan 2 atau lebih posting di situs pengujian lokal saya dan saya tidak ingin menerapkannya ke situs langsung saya jika itu akan menyebabkan masalah nanti di ujung jalan. Ada yang tahu apa yang harus dilakukan tentang ini, apakah itu normal?

Inilah kode untuk metabox saya.

<?php

    //Add meta boxes to post types
    function plib_add_box() {
        global $meta_box;

        foreach($meta_box as $post_type => $value) {
            add_meta_box($value['id'], $value['title'], 'plib_format_box', $post_type, $value['context'], $value['priority']);
        }
    }
    //Formatting
    function plib_format_box() {
      global $meta_box, $post;

      // verification
      echo '<input type="hidden" name="plib_meta_box_nonce" value="', wp_create_nonce(basename(__FILE__)), '" />';

      echo '<table class="form-table">';

      foreach ($meta_box[$post->post_type]['fields'] as $field) {
          // get current post meta data
          $meta = get_post_meta($post->ID, $field['id'], true);

          echo '<tr>'.
                  '<th style="width:20%"><label for="'. $field['id'] .'">'. $field['name']. '</label></th>'.
                  '<td>';
          switch ($field['type']) {
              case 'text':
                  echo '<input type="text" name="'. $field['id']. '" id="'. $field['id'] .'" value="'. ($meta ? $meta : $field['default']) . '" size="30" style="width:97%" />'. '<br />'. $field['desc'];
                  break;
              case 'textarea':
                  echo '<textarea name="'. $field['id']. '" id="'. $field['id']. '" cols="60" rows="4" style="width:97%">'. ($meta ? $meta : $field['default']) . '</textarea>'. '<br />'. $field['desc'];
                  break;
              case 'select':
                  echo '<select name="'. $field['id'] . '" id="'. $field['id'] . '">';
                  foreach ($field['options'] as $option) {
                      echo '<option '. ( $meta == $option ? ' selected="selected"' : '' ) . '>'. $option . '</option>';
                  }
                  echo '</select>';
                  break;
              case 'radio':
                  foreach ($field['options'] as $option) {
                      echo '<input type="radio" name="' . $field['id'] . '" value="' . $option['value'] . '"' . ( $meta == $option['value'] ? ' checked="checked"' : '' ) . ' />' . $option['name'];
                  }
                  break;
              case 'checkbox':
                  echo '<input type="checkbox" name="' . $field['id'] . '" id="' . $field['id'] . '"' . ( $meta ? ' checked="checked"' : '' ) . ' />';
                  break;
          }
          echo     '<td>'.'</tr>';
      }

      echo '</table>';

    }
    // Save data from meta box
    function plib_save_data($post_id) {
        global $meta_box,  $post;

        //Verify
        if (!wp_verify_nonce($_POST['plib_meta_box_nonce'], basename(__FILE__))) {
            return $post_id;
        }

        //Check > autosave
        if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
            return $post_id;
        }

        //Check > permissions
        if ('page' == $_POST['post_type']) {
            if (!current_user_can('edit_page', $post_id)) {
                return $post_id;
            }
        } elseif (!current_user_can('edit_post', $post_id)) {
            return $post_id;
        }

        foreach ($meta_box[$post->post_type]['fields'] as $field) {
            $old = get_post_meta($post_id, $field['id'], true);
            $new = $_POST[$field['id']];

            if ($new && $new != $old) {
                update_post_meta($post_id, $field['id'], $new);
            } elseif ('' == $new && $old) {
                delete_post_meta($post_id, $field['id'], $old);
            }
        }
    }

    add_action('save_post', 'plib_save_data');

    //We create an array called $meta_box and set the array key to the relevant post type
// If custom post type, change the 'post' variable
    $meta_box['post'] = array(

        //This is the id applied to the meta box
        'id' => 'venue_location',  

        //This is the title that appears on the meta box container
        'title' => 'Venue/Location',    

        //This defines the part of the page where the edit screen section should be shown
        'context' => 'normal',    

        //This sets the priority within the context where the boxes should show
        'priority' => 'high',

        //Here we define all the fields we want in the meta box
        'fields' => array(
            array(
                'name' => 'Venue',
                'desc' => 'Venue Name',
                'id' => 'venue_info',
                'type' => 'text',
                'default' => ''
            ),
            array(
                'name' => 'Location',
                'desc' => 'Location of the Venue',
                'id' => 'location_info',
                'type' => 'text',
                'default' => ''
            )
        )
    );
    add_action('admin_menu', 'plib_add_box');
?>

(Hanya memetikannya, inilah tautan pastbin ke kode di atas: http://pastebin.com/0QsqxtZW )

mmaksimalis
sumber
apa versi wordpress yang Anda gunakan? pencarian _enclosemeterus muncul dengan informasi wordpress 2.0 yang sudah sangat tua.
Scott
Anda juga dapat menambahkan kode ke pertanyaan yang Anda gunakan untuk menambahkan kotak meta Anda?
Scott
Ya. Saya telah menemukan itu juga - Saya menggunakan 3.1.3. Tidak tahu apa batasan panjang kode di sini. Jadi di sini adalah tautan pastebin ke kode untuk metabox saya. pastebin.com/0QsqxtZW
mmaximalist

Jawaban:

13

Versi pendek:

_encloseme ditambahkan ke pos saat dipublikasikan. Proses wp-cron harus dijadwalkan sesaat kemudian untuk memproses posting untuk mencari lampiran.

Dengan kata lain, itu membersihkan mereka secara normal nanti. Tidak ada yang perlu dikhawatirkan.

Penjelasan lengkap:

"Enclosures" adalah tautan dalam pos ke sesuatu seperti file audio atau video. WordPress menemukan ini berdasarkan pada tipe MIME dari file yang ditautkan, kemudian menyimpan metadata tambahan tentang mereka. Metadata ini digunakan dalam umpan RSS, untuk membuat tag khusus untuk menghubungkan file-file ini ke posting.

Inilah cara kerja podcast, misalnya. Jika Anda meletakkan tautan ke MP3 di pos, maka enklosur akan dibuat untuk tautan itu, dan umpan akan memiliki enklosur, dan pembaca podcast seperti iTunes kemudian dapat menggunakannya untuk dapat mengunduh MP3 langsung dari RSS makan.

_encloseme hanyalah metadata khusus yang mengatakan bahwa pos belum diproses oleh proses lampiran. Ketika Anda membuat atau memperbarui posting yang diterbitkan, yang ditambahkan secara otomatis sehingga posting akan diproses oleh pembuat enklosur.

Otto
sumber
Terima kasih, Otto, atas tanggapan Anda yang menyeluruh, tentu saja saya puas. Saya akan memberi +1 jika saya bisa.
mmaximalist
Baru saja melihat bahwa posting saya menambahkan satu 1ke _enclosemearray meta posting pada setiap save_pst / update_post. Tidakkah ini memeriksa apakah sudah disetel dan karenanya menambahkan hal yang sama pada setiap pembaruan / penyimpanan? Terima kasih!
kaiser
1
Tidak, itu tidak memeriksa. Itu hanya menambahkannya. Ini umumnya tidak masalah, proses yang melakukan lampiran nanti akan menghapusnya.
Otto