我遵循了本教程,并正确地显示和保存了所有内容,但是我想为此创建一个新类来清理代码。不幸的是,执行此操作后,数据不再保存,我无法修复此问题。
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
提前感谢您的帮助!
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()
函数位于类中,并且您的类正在正确实例化。