WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Получай пассивный доход от сайта с помощью браузерных PUSH уведомлений

Изменение пользователем своих настроек с Frontend — wp_create_nonce()

Создал код - вставил его сразу в index.php - но не пойму как подключить wp_create_nonce();

<?php
$user_id = get_current_user_id();  
function update_basic_user_meta() {     
		$user_id = get_current_user_id();    
		if( $_POST['grid_on'] != '' ){ 
			update_user_meta( $user_id, 'grid_or_list', 0 );  
		}
		if( $_POST['list_on'] != '' ){ 
			update_user_meta( $user_id, 'grid_or_list', 1 );  
		}
}
update_basic_user_meta();   
add_action('init', 'update_basic_user_meta');
?>
<form action="" method="POST">            
	<button name="grid_on" value="1" type="submit" >Grid</button>
	<button name="list_on" value="2" type="submit" >List</button>
</form>               
0
kolshix
3 месяца назад 677
  • 1

    Суть nonce в том, что бы убедиться что запрос был послан именно с вашей формы.

    Читайте доку, там все легко и с примерами...
    https://developer.wordpress.org/themes/theme-security/using-nonces/#example

    В этих примерах основной процесс одноразового номера:

    1. Генерируем одноразовый номер с помощью функции wp_nonce_field ().
    2. Одноразовый номер отправляется вместе с отправкой формы.
    3. Одноразовый номер проверяется на достоверность с помощью функции wp_verify_nonce () или check_admin_referer (). Если не подтверждено, запрос завершается с сообщением об ошибке по умолчанию (не уточняйте сообщение об ошибке).

    Вот непосредственно пример использования wp_create_nonce

    https://developer.wordpress.org/reference/functions/wp_create_nonce/#comment-689

    kolshix 2 мес назад

    Спасибо, разобрался из вашего примера
    Полное решение

    часть №1

        // Код обновления данных с проверкой nonce
    	$user_id = get_current_user_id(); 
    	if( !empty( $_POST['grid_on'] ) ) {
    		if (
    		   ! isset( $_POST['name_of_nonce_field'] )
    			|| ! wp_verify_nonce( $_POST['name_of_nonce_field'], 'name_of_my_action' )
    		) {
    		   echo "Wrong check form"; //   wp_nonce_ays( '' ); // STOP query
    		}                   
    		$user_id = get_current_user_id();
    		if( $_POST['grid_on'] == 1 ){
    			update_user_meta( $user_id, 'grid_or_list', 0 );  
    		}
    		else if( $_POST['grid_on'] == 2 ){
    			update_user_meta( $user_id, 'grid_or_list', 1 );  
    		}
    	}

    часть №2

        // Код Формы (вставлял после php кода)
    	<form action="" method="POST">            
    		<button name="grid_on" value="1" type="submit">Grid</button>
    		<button name="grid_on" value="2" type="submit">List</button>
    		<?php wp_nonce_field( 'name_of_my_action', 'name_of_nonce_field' ); ?>
    	</form>

    заметка: не использую значение value="0" - так как идут заморочки с проверками и обновлением форм - так же начитался всякого о новом PHP 8 - там немного поменялись сравнения, да и для себя чтоб проще было ставлю 1 или 2 а потом по этим цифрам через IF - выставляю нужные мне значения как update_user_meta( $user_id, 'grid_or_list', 0 );

    anseme 2 мес назад

    Отлично, рад слышать! )

    Комментировать
  • -2
    el-lable410 el-lable.ru
    <?php
    	if( !empty( $_POST['grid_on'] ) ) {
    		$user_id = get_current_user_id();
    		if( $_POST['grid_on'] == 1 ){
    			update_user_meta( $user_id, 'grid_or_list', 0 );  
    		}
    		else if( $_POST['list_on'] == 2 ){
    			update_user_meta( $user_id, 'grid_or_list', 1 );  
    		}
    	}
    ?>
    <form action="" method="POST">
    	<input name="grid_on" value="1" type="hidden">
    	<button type="submit">Grid</button>
    </form>
    
    <form action="" method="POST">
    	<input name="grid_on" value="2" type="hidden" >Grid</button>
    	<button type="submit">List</button>
    </form>
    anseme 2 мес назад

    И где тут wp_create_nonce ?

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация