Je construis un éditeur de mise en page de publication à l'aide de jQuery UI Sortable .
Les messages sont disposés dans des boîtes de 300 x 250 pixels sur une image d'arrière-plan. Les messages sont créés et modifiés à l'aide de l'administrateur WordPress mais je veux permettre à l'administrateur des sites d'ajuster l'ordre des boîtes à l'aide d'une interface glisser-déposer sur le front-end.
J'ai la partie triable par glisser-déposer qui fonctionne, mais je dois trouver un moyen de sauvegarder l'état (l'ordre) des boîtes. Idéalement, j'aimerais pouvoir enregistrer l'état en tant qu'option et l'intégrer dans la requête.
La requête pour les publications est une simple WP_Query qui obtient également des données à partir de métadonnées personnalisées pour déterminer la disposition de la boîte individuelle .:
$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>
Le javascript n'est que les instructions de tri par défaut de base
jQuery(document).ready(function() {
jQuery("#sortable").sortable();
});
Il existe des méthodes disponibles à l'aide de cookies pour enregistrer l'état, mais je dois également désactiver le glisser-déposer triable pour les utilisateurs non administrateurs, j'ai donc vraiment besoin d'enregistrer dans la base de données.
Je recherche la méthode la plus créative et la plus utilisable et attribuerai une prime de 100 points à la meilleure réponse.
Mise à jour:
J'ai obtenu la réponse de somatic avec un changement mineur.
ajaxurl ne renvoie pas la valeur sur les pages non admin, j'ai donc utilisé wp_localize_script( 'functions', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
pour définir la valeur et changé la ligne javascript sous options en:
url: MyAjax.ajaxurl,
Pour limiter l'accès à l'organisation de la commande aux seuls administrateurs, j'ai ajouté une condition à ma fonction 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' ) ) );
}
}
Je vais faire un peu plus de tests et marquer cette question comme résolue et attribuer la prime.