WP 3.6にアップグレードした後、並べ替えたときにソート可能なメタボックスフィールドの位置が保存されていません。以下が私のコードです:
PHP:
function save_box( $post_id ) {
$post_type = get_post_type();
// verify nonce
if ( ! isset( $_POST['custom_meta_box_nonce_field'] ) )
return $post_id;
if ( ! ( in_array( $post_type, $this->page ) || wp_verify_nonce( $_POST['custom_meta_box_nonce_field'], 'custom_meta_box_nonce_action' ) ) )
return $post_id;
// check autosave
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return $post_id;
// check permissions
if ( ! current_user_can( 'edit_page', $post_id ) )
return $post_id;
// loop through fields and save the data
foreach ( $this->fields as $field ) {
if( $field['type'] == 'section' ) {
$sanitizer = null;
continue;
}
if( in_array( $field['type'], array( 'tax_select', 'tax_checkboxes' ) ) ) {
// save taxonomies
if ( isset( $_POST[$field['id']] ) ) {
$term = $_POST[$field['id']];
wp_set_object_terms( $post_id, $term, $field['id'] );
}
}
else {
// save the rest
$old = get_post_meta( $post_id, $field['id'], $field['type'], true );
if ( isset( $_POST[$field['id']] ) )
$new = $_POST[$field['id']];
if ( isset( $new ) && $new != $old ) {
$sanitizer = isset( $field['sanitizer'] ) ? $field['sanitizer'] : 'sanitize_text_field';
if ( is_array( $new ) )
$new = meta_box_array_map_r( 'meta_box_sanitize', $new, $sanitizer );
else
$new = meta_box_sanitize( $new, $sanitizer );
update_post_meta( $post_id, $field['id'], $new );
} elseif ( isset( $new ) && '' == $new && $old ) {
delete_post_meta( $post_id, $field['id'], $old );
}
}
} // end foreach
}
jQuery:
$('.meta_box_repeatable tbody').sortable({
opacity: 0.6,
revert: true,
cursor: 'move',
handle: '.hndle'
});
// post_drop_sort
$('.sort_list').sortable({
connectWith: '.sort_list',
opacity: 0.6,
revert: true,
cursor: 'move',
cancel: '.post_drop_sort_area_name',
items: 'li:not(.post_drop_sort_area_name)',
update: function(event, ui) {
var result = $(this).sortable('toArray');
var thisID = $(this).attr('id');
$('.store-' + thisID).val(result)
}
});
$('.sort_list').disableSelection();
私が持っているのは、画像のアップロードボタンとキャプションのテキスト入力です。すべて問題なく動作します。繰り返し可能要素を追加して並べ替えることはできますが、投稿を保存すると、繰り返し可能要素は元の位置に戻ります。
誰かが私にあなたがライブ版を見るためにあなたにログイン詳細を与えることができることを望むならば。
任意の助けは大歓迎です。
通常、ソート可能なメタボックスが必要なページにpostsbox
スクリプトを単純にエンキューするだけで十分です。
次のようにしてください。
add_action( 'admin_enqueue_scripts', 'wpse112022_postbox_enqueue' );
function wpse112022_postbox_enqueue( $hook_suffix )
{
// uncomment the next line to see what the $hook_suffix of your desired page is
# var_dump( $hook_suffix );
if ( 'hook_suffix of desired page' !== $hook_suffix )
return;
wp_enqueue_script( 'postbox' );
// If the last line didn't enqueue the script, then uncomment the following instead:
/*
$suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
wp_enqueue_script(
'postbox',
"/wp-admin/js/postbox{$suffix}.js",
array( 'jquery-ui-sortable' ),
false
true
);
*/
}