Saya sedang membangun editor tata letak pos ujung depan menggunakan jQuery UI Sortable .
Posting diletakkan dalam kotak 300px x 250px di atas gambar latar belakang. Posting dibuat dan diedit menggunakan admin WordPress tetapi saya ingin mengizinkan administrator situs untuk menyesuaikan urutan kotak menggunakan antarmuka drag and drop di ujung depan.
Saya memiliki fungsi drag and drop sortable yang berfungsi tetapi perlu menemukan cara untuk menyimpan status (urutan) kotak. Idealnya saya ingin dapat menyimpan negara sebagai opsi dan membangunnya ke dalam kueri.
Permintaan untuk posting adalah WP_Query sederhana yang juga mendapatkan data dari kotak meta khusus untuk menentukan tata letak kotak individu .:
$args= array(
'meta_key' => 'c3m_shown_on',
'meta_value'=> 'home' );
$box_query = new WP_Query($args); ?>
<ul id="sortable">
<?php
while ($box_query->have_posts()) : $box_query->the_post(); global $post; global $prefix;
$box_size = c3m_get_field($prefix.'box_size', FALSE);
$box_image = c3m_get_field($prefix.'post_box_image', FALSE);
$overlay_class = c3m_get_field($prefix.'overlay_class', FALSE);
if ( c3m_get_field($prefix.'external_link', FALSE) ) {
$post_link = c3m_get_field($prefix.'external_link', FALSE);
} else
{ $post_link = 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 hanyalah petunjuk dasar yang bisa diurutkan
jQuery(document).ready(function() {
jQuery("#sortable").sortable();
});
Ada metode yang tersedia menggunakan cookie untuk menyimpan keadaan tetapi saya juga perlu menonaktifkan drag and drop sortable untuk pengguna non admin jadi saya benar-benar perlu menyimpan ke database.
Saya mencari metode yang paling kreatif dan dapat digunakan dan akan memberikan hadiah 100 poin untuk jawaban terbaik.
Memperbarui:
Saya mendapat jawaban somatic bekerja dengan satu perubahan kecil.
ajaxurl tidak mengembalikan nilai pada halaman non admin jadi saya biasa wp_localize_script( 'functions', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
mendefinisikan nilainya dan mengubah baris javascript di bawah opsi menjadi:
url: MyAjax.ajaxurl,
Untuk membatasi akses ke mengatur agar hanya admin, saya menambahkan sebuah kondisional ke fungsi wp_enqueue_script saya:
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' ) ) );
}
}
Saya akan melakukan sedikit lebih banyak pengujian dan menandai pertanyaan ini sebagai diselesaikan dan memberi hadiah.
Jawaban:
Brady benar bahwa cara terbaik untuk menangani penyimpanan dan penayangan pesanan jenis pos khusus adalah dengan menggunakan
menu_order
propertiInilah jquery untuk membuat daftar dapat diurutkan dan untuk meneruskan data melalui ajax ke wordpress:
Inilah fungsi wordpress yang mendengarkan panggilan balik ajax dan melakukan perubahan pada DB:
Kunci untuk menampilkan posting dalam urutan yang telah Anda simpan adalah menambahkan
menu_order
properti ke argumen permintaan:Kemudian jalankan loop dan output setiap item ... (baris pertama adalah animasi inti pemuatan wp - Anda akan ingin menyembunyikannya pada awalnya melalui css, dan kemudian fungsi jquery akan ditampilkan saat memproses)
Kode terinspirasi oleh tutorial luar biasa soulsizzle .
sumber
http://jsfiddle.net/TbR69/1/
Jauh dari selesai, tetapi idenya adalah mengirim permintaan ajax pada drag dan drop. Anda juga mungkin ingin memicu permintaan ajax hanya setelah mengklik tombol "simpan" atau sesuatu. Array yang berisi ID pos dan pesanan baru akan dikirim.
Maka Anda harus memperbarui posting di database di ujung server. Akhirnya, tambahkan
order
parameter keWP_Query
loop Anda .Saya harap ini memulainya. Siapa pun merasa bebas untuk terus mengutak-atik.
sumber
File Javascript order.js
sumber