@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?
  • Вопрос задан
  • 621 просмотр
Пригласить эксперта
Ответы на вопрос 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" вообще убрать, что бы форма отправлялась по тому же урлу, на котором ты находишься.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы