Класс $wpdb: обновление meta_value с использованием Ajax
19 сент. 2011 г., 04:43:56
Просмотры: 1.96K
Голосов: 1
Я пытаюсь создать способ изменения порядка записей с использованием meta_key / meta_value, который обновляется с помощью jQuery ui-sortable.
Я уже использую menu_order аналогичным образом, но мне нужно создать возможность предварительного просмотра нового порядка перед сохранением новых значений menu_order.
Моя Ajax-функция, которая не работает:
function wnd_preview_item_order() {
global $wpdb;
$order = explode(',', $_POST['order']);
$counter = 0;
foreach ($order as $item_id) {
$wpdb->update($wpdb->postmeta, array( 'meta_key' => '_wnd_pre_order', 'meta_value' => $counter ), array( 'ID' => $item_id) );
$counter++;
}
die(1);
}
add_action('wp_ajax_item_sort', 'wnd_preview_item_order');
add_action('wp_ajax_nopriv_item_sort', 'wnd_preview_item_order');
Я могу без проблем обновлять menu_order с помощью аналогичной Ajax-функции, но застрял на изменении значения meta_key.
Sortable js:
Обновление: Я внес некоторые изменения в js для сохранения порядка по клику.
jQuery(document).ready(function($) {
$( "#<?php echo $catID; ?>-sortable" ).sortable({
cursor:'move',
items:'.lineitem',
placeholder:'sortable-placeholder',
tolerance: 'pointer',
forcePlaceholderSize: true,
helper: 'clone',
opacity: 0.65
});
$("#<?php echo $catID; ?>-save-order").bind( "click", function() {
$.post( ajaxurl, { action:'item_sort', order: $( "#<?php echo $catID; ?>-sortable" ).sortable('toArray').toString() },
function() {
$("#<?php echo $catID; ?>-ajax-response").html('<div class="message updated fade"><p>Порядок записей обновлен</p></div>');
$("#<?php echo $catID; ?>-ajax-response div").delay(3000).hide("slow");
});
});
});
Мой запрос для отображения записей с использованием orderby по meta_value:
$exclude = $GLOBALS['current_id'];
if ($count >= 4 ) : $ppp = 4; else : $ppp = 7; endif;
$args = array(
'cat' => $category->term_id,
'meta_key' => '_wnd_pre_order',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'post__not_in' => array($exclude),
'posts_per_page' => $ppp
);
$cat_query = new WP_Query( $args );
Обновление:
Вот Ajax-функция для изменения menu_order, которая работает:
function wnd_save_item_order() {
global $wpdb;
$order = explode(',', $_POST['order']);
$counter = 0;
foreach ($order as $item_id) {
$wpdb->update($wpdb->posts, array( 'menu_order' => $counter ), array( 'ID' => $item_id) );
$counter++;
}
die(1);
}

Chris_O
20.6K
Комментарии
Показать остальные 3 комментариев
Похожие вопросы
1
ответов