jQuery UI Sortable을 사용하여 프런트 엔드 포스트 레이아웃 편집기를 작성 중 입니다.
게시물은 배경 이미지 위에 300 x 250 픽셀의 상자에 배치됩니다. 게시물은 WordPress 관리자를 사용하여 만들고 편집하지만 사이트 관리자가 프런트 엔드의 끌어서 놓기 인터페이스를 사용하여 상자의 순서를 조정할 수 있도록하고 싶습니다.
드래그 앤 드롭 정렬 가능한 부분이 작동하지만 상자의 상태 (순서)를 저장하는 방법이 필요합니다. 이상적으로 상태를 옵션으로 저장하고 쿼리에 빌드하고 싶습니다.
게시물에 대한 쿼리는 사용자 정의 메타 상자에서 데이터를 가져 와서 개별 상자 레이아웃을 결정하는 간단한 WP_Query입니다.
$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>
자바 스크립트는 기본 기본 정렬 가능 명령어입니다.
jQuery(document).ready(function() {
jQuery("#sortable").sortable();
});
쿠키 를 사용하여 상태를 저장하는 데 사용할 수있는 방법이 있지만 관리자가 아닌 사용자에 대해 정렬 가능한 드래그 앤 드롭을 비활성화해야하므로 실제로 데이터베이스에 저장해야합니다.
나는 가장 창의적이고 유용한 방법을 찾고 있으며 최고의 답변에 100 포인트 현상금을 수여합니다.
최신 정보:
사소한 변화 하나를 다루는 체감의 대답을 얻었습니다 .
ajaxurl은 관리자가 아닌 페이지에서 값을 반환하지 않으므로 값 wp_localize_script( 'functions', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
을 정의하고 옵션 아래의 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' ) ) );
}
}
좀 더 테스트하고이 질문을 해결 된 것으로 표시하고 현상금을 수여합니다.