質問: post_permalink(); } ?> <li class="<?php echo $box_size;?> ui-state-default"> <article <?php post_class() ?> id="post-<?php the_id(); ?>"> <?php echo '<a href="'.$post_link.'" ><img src="'.esc_url($box_image).'" alt="image via xxxxx.com" /></a>'; ?> <div class="post-box <?php echo $overlay_class;?>"> <?php if ( c3m_get_field( $prefix.'text_display', false) ) { ?> <h2><a href="<?php echo $post_link?>"><?php the_title();?></a></h2> <p><?php echo substr($post->post_excerpt, 0, 90) . '...'; ?></p> <?php } ?> </div> </article> </li> <?php endwhile; ?> </ul> </section> javascriptは基本的なデフォルトのソート可能な命令ですjquery(document).ready(function() { jquery("#sortable").sortable(); }); 状態を保存するために cookies を使用する方法がありますが、管理者以外のユーザーはソート可能なドラッグアンドドロップを無効にする必要があるので、データベースに保存する必要があります。私は最も創造的で使用可能な方法を探していて、ベストアンサーに100ポイントの賞金を授与します。更新: somatic's answerと1つのマイナーチェンジで動作しました。ajaxurlは管理者以外のページでは値を返さないので、値を定義するためにwp_localize_script( 'functions', 'myajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );を使用し、optionsの下のjavascript行を次のように変更しました。 url: myajax.ajaxurl,管理者だけに順序を調整することへのアクセスを制限するために、私は私のwp_enqueue_script関数に条件を追加しました: function c3m_load_scripts() { if ( current_user_can( 'edit_posts' ) ) { wp_enqueue_script( 'jquery-ui' ); wp_enqueue_script( 'functions', get_bloginfo( 'stylesheet_directory' ) . '/_/js/functions.js', array( 'jquery', 'jquery-ui' ), false); wp_localize_script( 'functions', 'myajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); } } もう少しテストをして、この問題を解決済みとマークして賞金を授与します。
回答: カスタム投稿タイプの注文の保存と表示を処理する最良の方法はmenu_orderプロパティを使用することです。これは、リストをソート可能にし、データをajax経由でwordpressに渡すためのjqueryです。jquery(document).ready(function($) { var itemlist = $('#sortable'); itemlist.sortable({ update: function(event, ui) { $('#loading-animation').show(); // show the animate loading gif while waiting opts = { url: ajaxurl, // ajaxurl is defined by wordpress and points to /wp-admin/admin-ajax.php type: 'post', async: true, cache: false, datatype: 'json', data:{ action: 'item_sort', // tell wordpress how to handle this ajax request order: itemlist.sortable('toarray').tostring() // passes id's of list items in 1,3,2 format }, success: function(response) { $('#loading-animation').hide(); // hide the loading animation return; }, error: function(xhr,textstatus,e) { // this can be expanded to provide more information alert(e); // alert('there was an error saving the updates'); $('#loading-animation').hide(); // hide the loading animation return; } }; $.ajax(opts); } }); }); これは、ajaxコールバックを監視し、db上で変更を実行するwordpress関数です。function my_save_item_order() { global $wpdb; $order = explode(',', $_post['order']); $counter = 0; foreach ($order as $item_id) { $wpdb->update($wpdb->posts, array( 'menu_order' => $counter ), array( 'id' => $item_id) ); $counter++; } die(1); } add_action('wp_ajax_item_sort', 'my_save_item_order'); add_action('wp_ajax_nopriv_item_sort', 'my_save_item_order'); 保存した順序で投稿を表示するための鍵は、クエリ引数にmenu_orderプロパティを追加することです。$args= array( 'meta_key' => 'c3m_shown_on', 'meta_value'=> 'home' 'orderby' => 'menu_order', 'order' => 'asc' ); $box_query = new wp_query($args); それからループを実行して各項目を出力します...(最初の行はコアwp読み込みアニメーションです。最初はcssで非表示にしておくと、処理時にjquery関数が表示されます)<img src="<?php bloginfo('url'); ?>/wp-admin/images/loading.gif" id="loading-animation" /> <ul id="sortable"> <li id="{echo post id here}">{echo title or other name here}</li> </ul> soulsizzleの 素晴らしいチュートリアルにヒントを得たコード 。