Я пытаюсь сохранить и получить метаданные — работаю над проектом WordPress.
У меня странная проблема при вызове get_user_meta. Кто-нибудь может объяснить почему? Это как если бы update_user_meta и get_user_meta не были последовательными функциями.
Сначала я вызываю update_user_meta, чтобы обновить значение.
Затем я вызываю get_user_meta, чтобы получить значение. (делая это для целей тестирования, я понимаю, что это может выглядеть немного странно 🙂 Суть в том, что эти вызовы обновления / получения выполняются в одном и том же запросе ajax.
Фильтр выполняется — вызывать его не проблема.
Проблема в том, что есть 50% вероятности, что get_user_meta получит старое мета-значение, а не то, которое я только что обновил.
public function addcampaign_getlist($sponsorlist, $downloadid) {
update_user_meta( get_current_user_id(), 'testvar', $downloadid);
$sponsorlist['download_id'] = get_user_meta( get_current_user_id(), 'testvar', true );
return $sponsorlist;
}
add_filter('sfc_add_campaign_get_list', array($this, 'addcampaign_getlist'), 10, 2);
Фильтр вызывается через ajax, как показано ниже. Я знаю, что вызов работает, потому что после обновления последующие вызовы get_user_meta получают правильные данные.
Но, похоже, существует проблема последовательности между update_user_meta и get_user_meta, если она выполняется в одной и той же функции ajax.
function sfc_ajax_add_to_support() {
$sponsorlist= array( 'download_id' => 0 );
if ( isset( $_POST['download_id'] ) )
$sponsorlist = apply_filters('sfc_add_campaign_get_list', $sponsorlist,$_POST['download_id'] );
echo json_encode( $sponsorlist );
edd_die();
}
add_action( 'wp_ajax_sfc_add_to_support', 'sfc_ajax_add_to_support' );
Я пытаюсь добиться отображения списка значений по идентификатору пользователя, к которым я могу добавить или удалить.
Единственное решение, которое я могу придумать, — определить и обновить список как класс, а не пытаться обновить базу данных напрямую. Любые другие предложения?
Спасибо,
Задача ещё не решена.
Других решений пока нет …