WordPress: Campos de Metabox classificáveis não salvam posição

4

Eu me deparei com um problema que me deixou perplexo: depois de atualizar para o WP 3.6, meus campos metabólicos classificáveis não estão salvando sua posição quando você os encomenda novamente. Abaixo está o meu código:

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();

O que eu tenho é um metabox que contém uma caixa repetível, dentro da caixa repetível é um botão de upload de imagem e entrada de texto de legenda. Tudo funciona bem, eu sou capaz de adicionar mais repetitivas e classificá-las, mas quando eu salvo o post, as repetitivas voltam à sua posição original.

Se alguém quiser, posso fornecer detalhes de login para ver a versão ao vivo.

Qualquer ajuda seria muito apreciada.

    
por Luke 28.08.2013 / 20:34

1 resposta

1

Normalmente, deve ser suficiente simplesmente enfileirar o script postsbox em uma página em que você deseja ter caixas meta classificáveis.

Basta fazer o seguinte:

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
    );
    */
}
    
por kaiser 11.09.2013 / 17:45