Tôi đang xây dựng một trình soạn thảo bố cục bài trước bằng cách sử dụng jQuery UI Sortable .
Các bài viết được đặt trong các hộp 300px x 250px trên một hình ảnh nền. Các bài đăng được tạo và chỉnh sửa bằng quản trị viên WordPress nhưng tôi muốn cho phép quản trị viên trang web điều chỉnh thứ tự của các hộp bằng giao diện kéo và thả ở mặt trước.
Tôi đã có một phần kéo và thả có thể sắp xếp làm việc nhưng cần phải tìm ra cách để lưu trạng thái (thứ tự) của các hộp. Lý tưởng nhất là tôi muốn có thể lưu trạng thái dưới dạng tùy chọn và xây dựng nó thành truy vấn.
Truy vấn cho các bài đăng là một WP_Query đơn giản cũng lấy dữ liệu từ các hộp meta tùy chỉnh để xác định bố cục hộp riêng lẻ.:
$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>
Các javascript chỉ là các hướng dẫn sắp xếp mặc định cơ bản
jQuery(document).ready(function() {
jQuery("#sortable").sortable();
});
Có các phương thức có sẵn bằng cookie để lưu trạng thái nhưng tôi cũng cần phải vô hiệu hóa tính năng kéo và thả có thể sắp xếp cho người dùng không phải quản trị viên vì vậy tôi thực sự cần lưu vào cơ sở dữ liệu.
Tôi đang tìm kiếm phương pháp sáng tạo và có thể sử dụng nhất và sẽ trao phần thưởng 100 điểm cho câu trả lời hay nhất.
Cập nhật:
Tôi nhận được câu trả lời của somatic làm việc với một thay đổi nhỏ.
ajaxurl không trả về giá trị trên các trang không phải quản trị viên nên tôi đã sử dụng wp_localize_script( 'functions', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
để xác định giá trị và thay đổi dòng javascript theo các tùy chọn thành:
url: MyAjax.ajaxurl,
Để giới hạn quyền truy cập vào việc sắp xếp thứ tự chỉ quản trị viên, tôi đã thêm một điều kiện vào hàm wp_enqueue_script của mình:
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' ) ) );
}
}
Tôi sẽ làm thêm một chút kiểm tra và đánh dấu câu hỏi này là giải quyết và trao giải thưởng.