自定义元框数据在类中包装后未保存

时间:2014-08-14 作者:Ray J

我遵循了本教程,并正确地显示和保存了所有内容,但是我想为此创建一个新类来清理代码。不幸的是,执行此操作后,数据不再保存,我无法修复此问题。

http://code.tutsplus.com/tutorials/reusable-custom-meta-boxes-part-1-intro-and-basic-fields--wp-23259

元框字段是根据$custom\\u meta\\u fields数组的内容从switch语句输出的。

class VPC_Customization_Meta_Boxes {

protected $custom_meta_fields = array();

function __construct() {
    add_action( \'add_meta_boxes\', array( $this, \'create_fields_array\') );
    add_action( \'load-post.php\', array( $this,\'setup_boxes\') );
    add_action( \'load-post-new.php\', array( $this, \'setup_boxes\') );
    add_action( \'admin_enqueue_scripts\', array($this, \'load_scripts\') ); 
    /* Create fields array on the \'add_meta_boxes\' hook */

}

/* Meta box setup function. */
function setup_boxes() {

  /* Add meta boxes on the \'add_meta_boxes\' hook. */
  add_action( \'add_meta_boxes\', array( $this, \'add_boxes\') );
  /* Save post meta on the \'save_post\' hook. */
  add_action(\'save_post\', array( $this, \'save_meta\'));
}
。。。

// Save the Data
function save_meta($post_id) {

    // verify nonce
    if (!wp_verify_nonce($_POST[\'vpc_customization_meta_box_nonce\'], basename(__FILE__))) 
        return;
    // check autosave
    if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE)
        return;
    // check permissions
    $post_type_slug = get_post_type( $post_id );
    $post_type = get_post_type_object( $post_type_slug );

    if( $post_type_slug === $_POST[\'post_type\'] ){
        if( !current_user_can( $post_type->cap->edit_post, $post_id ) ) 
            return;
    }

    // loop through fields and save the data
    foreach ($this->custom_meta_fields as $field) {
        $new = false;
        $old = get_post_meta($post_id, $field[\'id\'], true);
        if ( isset( $_POST[$field[\'id\']] ) )
            $new = $_POST[$field[\'id\']];

        if ( isset( $new ) && $new != $old ) {
            update_post_meta( $post_id, $field[\'id\'], $new );
        } 
        elseif ( isset( $new ) && \'\' == $new && $old ) {
            delete_post_meta( $post_id, $field[\'id\'], $old );
        }
    } // end foreach
}
我不确定的一件事是,我是否从类中正确访问了$post和$post\\u ID。

完整代码:http://pastebin.com/rxnyeRar

提前感谢您的帮助!

1 个回复
SO网友:helgatheviking

乍一看,似乎需要将保存例程添加到挂钩中,在这种情况下save_post.

function __construct() {
    add_action( \'add_meta_boxes\', array( $this, \'create_fields_array\') );
    add_action( \'load-post.php\', array( $this,\'setup_boxes\') );
    add_action( \'load-post-new.php\', array( $this, \'setup_boxes\') );
    add_action( \'admin_enqueue_scripts\', array($this, \'load_scripts\') ); 

    //don\'t forget the save routine
    add_action( \'save_post\', array($this, \'save_meta\') ); 

}
这是在假设save_meta() 函数位于类中,并且您的类正在正确实例化。

结束

相关推荐