L'enigma della meta-chiave “_encloseme”


8

Lavorando con metabox / campi personalizzati mi è sembrato di creare indirettamente molti di questi in _encloseme meta_keystutto il mio wp_postmeta.

Visto qui:

Finora non sono sorti problemi da questo e i campi personalizzati funzionano bene, ma ho solo agitato con circa 2 post sul mio sito di test locale e non voglio implementarlo sul mio sito live se causerà problemi in seguito lungo la strada. Qualcuno sa cosa fare al riguardo, sono normali?

Ecco il codice per i miei metabox.

<?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');
?>

(Solo in caso, ecco un link pastbin al codice sopra: http://pastebin.com/0QsqxtZW )


quale versione di wordpress stai usando? una ricerca di _enclosemecontinua a fornire informazioni su wordpress 2.0 che è molto vecchia.
Scott,

Inoltre, puoi aggiungere il codice alla tua domanda che stai utilizzando per aggiungere le tue meta box?
Scott,

Si. Mi sono imbattuto anche in quello - sto usando 3.1.3. Non so quali sono i limiti di lunghezza del codice qui. Quindi ecco il link pastebin al codice per il mio metabox. pastebin.com/0QsqxtZW
mmaximalist il

Risposte:


13

Versione breve:

_encloseme viene aggiunto a un post quando viene pubblicato. Il processo di wp-cron dovrebbe essere programmato poco dopo per elaborare il post in cerca di allegati.

In altre parole, li pulisce normalmente più tardi. Nulla di cui preoccuparsi.

Spiegazione completa:

"Recinzioni" sono collegamenti in un post a qualcosa come un file audio o video. WordPress li trova in base al tipo MIME dei file a cui è collegato, quindi salva metadati extra su di essi. Questi metadati vengono utilizzati nei feed RSS per creare tag speciali per collegare questi file al post.

Ecco come funzionano i podcast, ad esempio. Se inserisci un collegamento a un MP3 in un post, verrà creato un allegato per quel collegamento e il feed avrà l'allegato e i lettori di podcast come iTunes potranno quindi utilizzarlo per poter scaricare l'MP3 direttamente dall'RSS alimentazione.

_encloseme è solo metadati speciali che dicono che il post non è stato ancora elaborato dal processo di allegato. Quando crei o aggiorni un post pubblicato, questo viene aggiunto automaticamente in modo che il post venga elaborato dal creatore del recinto.


Grazie Otto per la tua risposta approfondita, inutile dire che sono soddisfatto. Farei +1 se potessi.
mmaximalist,

Ho appena visto che i miei post ne aggiungono uno 1al meta _enclosemearray di post su ogni save_pst / update_post. Questo non controlla se è già impostato e quindi aggiunge lo stesso ad ogni aggiornamento / salvataggio? Grazie!
Kaiser,

1
No, non controlla. Lo aggiunge semplicemente. Questo in genere non ha importanza, il processo che esegue in seguito gli allegati lo rimuoverà.
Otto
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.