JQuery UI Sortable kullanarak bir ön uç düzen düzenleyicisi inşa ediyorum .
Direkler 300px ile 250px kutularda bir arka plan görüntüsü üzerine yerleştirilir. Mesajlar WordPress yöneticisi kullanılarak oluşturulur ve düzenlenir, ancak site yöneticisinin ön uçta bir sürükle ve bırak arayüzü kullanarak kutuların sırasını ayarlamasına izin vermek istiyorum.
Sürükle ve bırak sıralanabilir kısmı çalıştım ama kutuların durumunu (sırasını) kaydetmek için bir yol bulmalıyım. İdeal olarak bir seçenek olarak devlet kaydetmek ve sorgu içine inşa etmek istiyorum.
Mesajlar için sorgu da bireysel meta düzenini belirlemek için özel meta kutularından veri alır basit bir WP_Query olduğunu .:
$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 sadece temel varsayılan sıralanabilir talimatlardır
jQuery(document).ready(function() {
jQuery("#sortable").sortable();
});
Çerezleri kullanarak kullanılabilecek yöntemler vardır kaydetmek için ama ben yönetici olmayan kullanıcılar için sıralanabilir sürükle bırak devre dışı bırakmak gerekir, bu yüzden gerçekten veritabanına kaydetmek gerekir.
En yaratıcı ve kullanışlı yöntemi arıyorum ve en iyi cevaba 100 puan ödül vereceğim.
Güncelleme:
Somatik bir cevabı küçük bir değişiklikle çalışırken aldım .
ajaxurl değeri yönetici olmayan sayfalarda döndürmez, bu yüzden wp_localize_script( 'functions', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
değeri tanımlamak için kullanılır ve seçenekler altındaki javascript satırını şu şekilde değiştiririm:
url: MyAjax.ajaxurl,
Sadece yöneticiler için sipariş düzenleme erişimini sınırlamak için wp_enqueue_script fonksiyonuma bir koşul ekledim:
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' ) ) );
}
}
Biraz daha test yapacağım ve bu soruyu çözülmüş olarak işaretleyeceğim ve ödülünü vereceğim.