Các câu hỏi hóc búa Meta-Key


8

Trong khi làm việc với metaboxes / trường tùy chỉnh, tôi dường như gián tiếp tạo ra nhiều thứ trong số đó _encloseme meta_keystrên tất cả wp_postmeta.

Nhìn thấy ở đây:

Cho đến nay không có vấn đề nào phát sinh từ điều này và các trường tùy chỉnh hoạt động tốt nhưng tôi chỉ lo lắng với 2 bài đăng trên trang web thử nghiệm địa phương của mình và tôi không muốn triển khai nó trên trang web trực tiếp của mình nếu nó sẽ gây ra sự cố sau này trên đường Bất cứ ai biết phải làm gì về những điều này, họ có bình thường không?

Đây là mã cho metaboxes của tôi.

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

(Chỉ cần kích hoạt, đây là một liên kết pastbin đến đoạn mã trên: http://pastebin.com/0QsqxtZW )


bạn đang sử dụng phiên bản nào của wordpress? một tìm kiếm liên _enclosemetục đưa ra thông tin về wordpress 2.0 đã rất cũ.
Scott

Ngoài ra, bạn có thể thêm mã vào câu hỏi bạn đang sử dụng để thêm các hộp meta của bạn không?
Scott

Vâng. Tôi cũng đã gặp điều đó - Tôi đang sử dụng 3.1.3. Không biết giới hạn độ dài mã ở đây là gì. Vì vậy, đây là liên kết pastebin đến mã cho metabox của tôi. pastebin.com/0QsqxtZW
mmaximalist

Câu trả lời:


13

Phiên bản ngắn:

_encloseme được thêm vào bài đăng khi nó được xuất bản. Quá trình wp-cron sẽ được lên lịch ngay sau đó để xử lý bài đăng để tìm kiếm các bao vây.

Nói cách khác, nó làm sạch chúng bình thường sau đó. Không có gì phải lo lắng về.

Giải thích đầy đủ:

"Bao vây" là các liên kết trong một bài đăng đến một cái gì đó như tệp âm thanh hoặc video. WordPress tìm thấy những thứ này dựa trên loại MIME của các tệp được liên kết đến, sau đó lưu siêu dữ liệu bổ sung về chúng. Siêu dữ liệu này được sử dụng trong các nguồn cấp RSS, để tạo các thẻ đặc biệt để kết nối các tệp này với bài đăng.

Đây là cách podcast hoạt động, ví dụ. Nếu bạn đặt một liên kết đến MP3 trong một bài đăng, thì một bao vây sẽ được tạo cho liên kết đó và nguồn cấp dữ liệu sẽ có bao vây và các trình đọc podcast như iTunes có thể sử dụng để có thể tải xuống MP3 trực tiếp từ RSS cho ăn.

_encloseme chỉ là siêu dữ liệu đặc biệt nói rằng bài đăng chưa được xử lý bởi quy trình bao vây. Khi bạn tạo hoặc cập nhật một bài đăng được xuất bản, nó sẽ được thêm tự động để bài đăng sẽ được xử lý bởi người tạo bao vây.


Cảm ơn Otto vì phản ứng thấu đáo của bạn, không cần phải nói tôi hài lòng. Tôi sẽ +1 nếu tôi có thể.
mmaximalist

Chỉ cần thấy rằng các bài đăng của tôi thêm một 1vào _enclosememảng meta bài đăng trên mỗi save_pst / update_post. Không phải kiểm tra này nếu nó đã được đặt và do đó thêm tương tự trên mỗi bản cập nhật / lưu? Cảm ơn!
kaiser

1
Không, nó không kiểm tra. Nó chỉ thêm nó. Điều này thường không thành vấn đề, quá trình bao vây sau này sẽ loại bỏ nó.
Otto
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.