处理由前一个Web开发人员组装的一些代码,我遇到了一个问题,即更新拖放AJAX驱动的图库顺序不能保存。我正在运行最新版本的WordPress(3.3.2),但客户说自定义排序从未奏效。
以下是更详细的清单:
以下方法对我有用但只是部分:
以下是处理照片订单本身的functions.php文件中的代码:
// Ajax callback for reordering images
function reorder_images() {
if (!isset($_POST['data'])) die();
list($order, $post_id, $key, $nonce) = explode('!',$_POST['data']);
if (!wp_verify_nonce($nonce, 'rw_ajax_sort_file')) {
die('1');
}
parse_str($order, $items);
$items = $items['item'];
$order = 0;
$meta = array();
foreach ($items as $item) {
wp_update_post(array(
'ID' => $item,
'post_parent' => $post_id,
'menu_order' => $order
));
$order++;
$meta[] = $item;
}
delete_post_meta($post_id, $key);
foreach ($meta as $value) {
add_post_meta($post_id, $key, $value);
}
die('0');
}
我认为DOING_AUTOSAVE
存在问题,但发现它已经在代码中实现了(见下文):
// Save data from meta box
function save($post_id) {
global $post_type;
$post_type_object = get_post_type_object($post_type);
if ((defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) // check autosave
|| (!isset($_POST['post_ID']) || $post_id != $_POST['post_ID']) // check revision
|| (!in_array($post_type, $this->_meta_box['pages'])) // check if current post type is supported
|| (!check_admin_referer(basename(__FILE__), 'rw_meta_box_nonce')) // verify nonce
|| (!current_user_can($post_type_object->cap->edit_post, $post_id))) { // check permission
return $post_id;
}
foreach ($this->_fields as $field) {
$name = $field['id'];
$type = $field['type'];
$old = get_post_meta($post_id, $name, !$field['multiple']);
$new = isset($_POST[$name]) ? $_POST[$name] : ($field['multiple'] ? array() : '');
// validate meta value
if (class_exists('RW_Meta_Box_Validate') && method_exists('RW_Meta_Box_Validate', $field['validate_func'])) {
$new = call_user_func(array('RW_Meta_Box_Validate', $field['validate_func']), $new);
}
// call defined method to save meta value, if there's no methods, call common one
$save_func = 'save_field_' . $type;
if (method_exists($this, $save_func)) {
call_user_func(array(&$this, 'save_field_' . $type), $post_id, $field, $old, $new);
} else {
$this->save_field($post_id, $field, $old, $new);
}
}
}
如果您想查看完整内容,可以see it here。
提前致谢。如果您需要更多信息,我会尝试提供我能做的一切。也许这只是某种插件冲突。上面概述的方法目前正通过主题本身的functions.php
文件实现。