El enigma de la metaclave "_encloseme"

8

Mientras trabajaba con metaboxes / campos personalizados, parecía que indirectamente creaba muchos de estos en _encloseme meta_keystodo mi wp_postmeta.

Visto aquí:

Hasta ahora no ha surgido ningún problema de esto y los campos personalizados funcionan bien, pero solo me he movido con 2 o más publicaciones en mi sitio de prueba local y no quiero implementarlo en mi sitio en vivo si va a causar problemas más adelante en el camino abajo. Alguien sabe qué hacer al respecto, ¿son normales?

Aquí está el código para mis metaboxes.

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

(Por si acaso, aquí hay un enlace pastbin al código anterior: http://pastebin.com/0QsqxtZW )

mmaximalista
fuente
¿Qué versión de WordPress estás usando? una búsqueda de _enclosemesigue apareciendo con información de wordpress 2.0 que es muy antigua.
Scott
¿También puede agregar el código a su pregunta que está usando para agregar sus meta cuadros?
Scott
Si. También me he encontrado con eso: estoy usando 3.1.3. No sé cuáles son los límites de longitud del código aquí. Así que aquí está el enlace de pastebin al código de mi metabox. pastebin.com/0QsqxtZW
mmaximalist

Respuestas:

13

Version corta:

_encloseme se agrega a una publicación cuando se publica. El proceso wp-cron debe programarse poco después para procesar la publicación y buscar recintos.

En otras palabras, los limpia normalmente más tarde. Nada de que preocuparse.

Explicación completa:

Los "gabinetes" son enlaces en una publicación a algo así como un archivo de audio o video. WordPress los encuentra en función del tipo MIME de los archivos a los que se vincula, luego guarda metadatos adicionales sobre ellos. Estos metadatos se utilizan en los canales RSS para crear etiquetas especiales para conectar estos archivos a la publicación.

Así es como funcionan los podcasts, por ejemplo. Si coloca un enlace a un MP3 en una publicación, se creará un gabinete para ese enlace, y la fuente tendrá el gabinete, y los lectores de podcasts como iTunes pueden usarlo para poder descargar el MP3 directamente desde el RSS alimentar.

_encloseme es solo metadatos especiales que dicen que la publicación aún no ha sido procesada por el proceso de cierre. Cuando crea o actualiza una publicación publicada, se agrega automáticamente para que la publicación sea procesada por el creador del gabinete.

Otón
fuente
Gracias Otto por su respuesta exhaustiva, no hace falta decir que estoy satisfecho. Haría +1 si pudiera.
mmaximalist
Acabo de ver que mis publicaciones agregan una 1a la _enclosemematriz de publicaciones en cada save_pst / update_post. ¿No comprueba esto si ya está configurado y, por lo tanto, agrega lo mismo en cada actualización / guardado? ¡Gracias!
kaiser
1
No, no verifica. Solo lo agrega. Esto generalmente no importa, el proceso que hace los recintos más tarde lo eliminará.
Otto