javascript — хранение и возврат пользовательских user_meta_data в WordPress

Я создаю простой WordPress «Курс» веб-сайт. Каждый пользователь должен полностью просмотреть видео, и когда оно будет завершено, оно открывает следующее.

В настоящее время у меня есть update_user_meta привязан к моему видео end() функция, но после того, как я получу эту информацию в базу данных, я не уверен, как вытащить ее обратно с get_user_meta относиться к нему почти как к постоянному сеансу пользователя. Есть мысли от кого-нибудь? Или мой подход неверен?

Это то, что я до сих пор основывал на этом: https://patrickshampine.com/2014/updating-user-meta-admin-ajax-frontend/

HTML:

<dl class="accordion">
<dt><a class="checkbox" id="video-1" href="">Instructions</a></dt>
<dd class="video" id="dd-1">
<p id="video-message"></p>
<p id="wistia_id" class="wistia_embed" style="width:640px;height:360px;"></p>
</dd>
<div class="inactive" id="video-2fake"><a>History</a></div>
<dt><a id="video-2" class="hidden" href="">History</a></dt>
<dd class="video" id="dd-2">
<p id="video-message"></p>
<p id="wistia_id" class="wistia_embed" style="width:640px;height:360px;"></p>
</dd>
</dl>

В теме functions.php:

add_action( 'wp_ajax_video_end', 'updateVideo' );

function video_scripts() {
$parameters = array(
'ajaxurl' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('video')
);

wp_enqueue_script('video-ajax', get_template_directory_uri().'/js/ajax.js', array('jquery'), null, true);
wp_localize_script('video-ajax', 'video', $parameters );

}
add_action('wp_enqueue_scripts', 'video_scripts');

function ajaxStatus($status, $message, $data = NULL) {

$response = array (
'status' => $status,
'message' => $message,
'data' => $data
);
$output = json_encode($response);

exit($output);

}

function updateVideo() {

if(empty($_POST) || !isset($_POST)) {

ajaxStatus('error', 'Nothing to update.');

} else {

$data = $_POST;

$dataString = $data['post'];
parse_str($dataString, $dataArray);

$nonce = $data['nonce'];

if(wp_verify_nonce($nonce, 'video') !== false) {

$user_ID = get_current_user_id();

$dataArray['watched'] = isset($dataArray['watched']) ? true : false;

if($user_ID != NULL) {
foreach($dataArray as $key=>$value) {

$status = update_user_meta($user_ID, $key, $value);

}

ajaxStatus('success', 'updated', $dataArray);

} else {
ajaxStatus('error', 'You are unauthorized to perform this action.', $dataArray);
}

} else {

ajaxStatus('error', 'Nonce check cannot fail.');

}
}
}

Тогда javascript:

  video1 = Wistia.embed("");
video2 = Wistia.embed("");

jQuery(document).ready(function($) {

var response;

var allPanels = $('.accordion > dd').hide();

$('.accordion > dt > a').click(function() {
allPanels.slideUp();
$(this).parent().next().slideDown();
if(this)
return false;
});

var watched = '<span>&#9745;</span>',
visible1 = false,
visible2 = false,

$("#dd-1").show();
video1.bind("end", function () {
$( "#video-2").removeClass("hidden");
$( "#video-2fake").hide();
allPanels.slideUp();
$("#dd-2").slideDown();

if(!visible1) {
$( "#video-1" ).append( watched );
visible1 = true;
}
else {
if(visible1) {
$( "#video-1" ).remove( watched );
visible1 = false;
}
}

$.post( video.ajaxurl, {
action : 'video_end',
nonce : video.nonce,
post : $(this).serialize()
},
function(response) {
console.log(response);
responseSuccess(response);
});

return false;

function responseSuccess(data) {
response = JSON.parse(data);
if(response.status === 'success') {
$('#video-message').text(response.message);
} else {
$('#video-message').text(response.message);
}
}
});

video2.bind("end", function () {
$( "#video-3").removeClass("hidden");
$( "#video-3fake").hide();
allPanels.slideUp();
$("#dd-3").slideDown();
position = "2";
alert(position);
if(!visible2) {
$( "#video-2" ).append( watched );
visible2 = true;
}
else {
if(visible2) {
$( "#video-2" ).remove( watched );
visible2 = false;
}
}
$.post( video.ajaxurl, {
action : 'video_end',
nonce : video.nonce,
post : $(this).serialize()
},
function(response) {
console.log(response);
responseSuccess(response);
});

return false;

function responseSuccess(data) {
response = JSON.parse(data);
if(response.status === 'success') {
$('#video-message').text(response.message);
} else {
$('#video-message').text(response.message);
}
}
});
});

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]