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.