Sto costruendo un editor di layout di post front-end usando l' interfaccia utente jQuery ordinabile .
I post sono disposti in scatole da 300 x 250 scatole su un'immagine di sfondo. I post vengono creati e modificati utilizzando l'amministratore di WordPress ma voglio consentire all'amministratore dei siti di regolare l'ordine delle caselle utilizzando un'interfaccia di trascinamento della selezione sul front-end.
Ho la parte trascinabile ordinabile funzionante, ma ho bisogno di trovare un modo per salvare lo stato (ordine) delle scatole. Idealmente, vorrei essere in grado di salvare lo stato come opzione e incorporarlo nella query.
La query per i post è una semplice WP_Query che ottiene anche dati da meta box personalizzate per determinare il layout delle singole caselle .:
$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>
Il javascript è solo le istruzioni ordinabili predefinite di base
jQuery(document).ready(function() {
jQuery("#sortable").sortable();
});
Esistono metodi disponibili che utilizzano i cookie per salvare lo stato, ma devo anche disabilitare il trascinamento della selezione ordinabile per gli utenti non amministratori, quindi ho davvero bisogno di salvare nel database.
Sto cercando il metodo più creativo e utilizzabile e assegnerò un premio di 100 punti alla migliore risposta.
Aggiornare:
Ho avuto la risposta di Somatic lavorando con un piccolo cambiamento.
ajaxurl non restituisce il valore su pagine non amministrative quindi ho usato wp_localize_script( 'functions', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
per definire il valore e ho cambiato la riga javascript sotto le opzioni in:
url: MyAjax.ajaxurl,
Per limitare l'accesso alla disposizione dell'ordine ai soli amministratori, ho aggiunto un condizionale alla mia funzione 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' ) ) );
}
}
Proverò un po 'di più e segnerò questa domanda come risolta e assegnerò il premio.