@ChudoUdo

Wordpress | Не работает update_user_meta. Где ошибка?

index.php
<?php
$current_user = wp_get_current_user();
$qiwi_wallet = 'qiwi_wallet';
$webmoney_wallet = 'webmoney_wallet';
$single = true;
$qiwi = get_user_meta($current_user->ID, $qiwi_wallet, $single);
$webmoney = get_user_meta($current_user->ID, $webmoney_wallet, $single);
?>
<div id="dashboard-profile" class="tab-content">
    <form id="dashboard-profile-form" class="form" method="post" action="usermeta-update.php">
        <div class="wrap">
            <label for="qiwi_wallet"><?php _e( 'Qiwi Wallet', 'plugin-wp' ); ?></label>
            <input type="text" name="qiwi_wallet" value="<?php echo $qiwi; ?>" />
        </div>
        <div class="wrap">
            <label for="webmoney_wallet"><?php _e( 'Webmoney Wallet', 'plugin-wp' ); ?></label>
            <input type="text" name="webmoney_wallet" value="<?php echo $webmoney; ?>" />
        </div>
        <input type="submit" class="button" value="<?php _e( 'Update Wallets', 'plugin-wp' ); ?>" />
    </form>
</div>

usermeta-update.php
<?php
$current_user = wp_get_current_user();
if (isset($_POST['qiwi_wallet'])) {
    update_user_meta($current_user->ID, 'qiwi_wallet', $_POST['qiwi_wallet']);
}
if (isset($_POST['webmoney_wallet'])) {
    update_user_meta($current_user->ID, 'webmoney_wallet', $_POST['webmoney_wallet']);
}
?>

Почему не работает update_user_meta?
  • Вопрос задан
  • 608 просмотров
Пригласить эксперта
Ответы на вопрос 3
@niceandriyanov
Привет. Чтобы заработало, нужно подключить в файле usermeta-update.php опции движка, т.е. в начало файла usermeta-update.php нужно поместить
require($_SERVER[‘DOCUMENT_ROOT’].’/wp-load.php’);

Но можно круче сделать) Ajax отправку формы... Делов на 10 минут...
1. Убираем action из формы
2. В function.php внизу пишем:
add_action('wp_ajax_custom_update_usermeta', 'custom_update_usermeta');
add_action('wp_ajax_nopriv_custom_update_usermeta', 'custom_update_usermeta');
function custom_update_usermeta(){
	$data[0] = 'success';
	$current_user = wp_get_current_user();
	if (isset($_POST['qiwi_wallet'])) {
		update_user_meta($current_user->ID, 'qiwi_wallet', $_POST['qiwi_wallet']);
	}else{
		$data[0] = 'Пусто в qiwi_wallet';
	}
	if (isset($_POST['webmoney_wallet'])) {
		update_user_meta($current_user->ID, 'webmoney_wallet', $_POST['webmoney_wallet']);
	}else{
		$data[1] = 'Пусто в webmoney_wallet';
	}
	die(json_encode($data[0]));
}


3. В любом файле js:
jQuery(document).ready(function($){
	$('#dashboard-profile-form').on('submit',function(event){
		event.preventDefault();
		$.ajax({
			url: "/wp-admin/admin-ajax.php",
			type: "POST",
			data: "action=custom_update_usermeta&"+$('#formReviews').serialize(),
			success: function(res){
				var data = JSON.parse(res.toString());
				if(data[0] == 'success'){
					alert('Успешно');
				}else{
					alert(data);
				}
			},
			error: function(){
				alert('Упс, не нашли функцию обработки');
			}
		});
	});
});

P.S. Если работают какие либо плагины кэширования, то не забудь скинуть кэш, иначе не будет скрипта
Ответ написан
Комментировать
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Из приведенных фрагментов кода и описания - потому что код в usermeta-update.php выполняется вне контекста WordPress, и функции wp_get_current_user(), update_user_meta() недоступны. Странно что ошибки не сыпятся.
Ответ написан
Комментировать
trampick
@trampick
Веб-разработчик
У тебя в форме стоит обработчик скрипта usermeta-update.php(action="usermeta-update.php")
Данные формы отправляются на этот скрипт, а именно по url mydomain.ru/usermeta-update.php. если ты перейдешь по этому урлу, то тебе скорее всего выдаст 404 и точно до запуска скрипта usermeta-update.php не дойдет.

Тебе нужно код из usermeta-update.php разместить к примеру в functions.php или в index.php, а action="usermeta-update.php" вообще убрать, что бы форма отправлялась по тому же урлу, на котором ты находишься.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы