Intereting Posts
Установите статическую страницу в качестве главной страницы по умолчанию на вновь созданных сайтах в многопользовательском режиме Ссылка на канал Youtube на сайте WordPress Поиск url ​​wp-rewrite после перенаправления? Как изменить статус сообщения из интерфейса? Ссылка из navbar в категории Изменить путь к изображениям, возвращаемым get_the_content () Изменение «Потерянного пароля по электронной почте» на странице сброса пароля Защита паролем для защиты паролем – доля гостей Добавление запроса к URL-адресу изображения при нажатии «вставить в сообщение»? Функция Ajax возвращает -1 Тема входа в систему? Перевести идентификатор категории в название категории Расширенные пользовательские поля, удаляющие некоторый код и добавляющий код для слайдера Сайт, показывающий версию 4.1.16 как последнюю версию wp query добавить массив, если условие

Формы и WordPress Nonce

WordPress nonce меня заводит! У меня была эта проблема, когда я начал свой плагин и удалил его, но теперь я вернулся к нему и до сих пор не знаю, что делать.

Я рассмотрел решение проблемы. Мой код тот же / похожий на другие примеры. Я получаю сообщение об ошибке «undefined index» mrlpt_client_check ».

Я также получаю ту же ошибку для «mrlpt_client» при проверке разрешений на основе пользовательских возможностей, но это настраиваемый тип сообщений, который я создал, поэтому я не уверен, почему это тоже не работает?

Вот код, где есть материал nonce. Включая включает только короткую форму с двумя полями ввода, один для адреса электронной почты и один для номера телефона, внутри настраиваемого мета-поля.

Я попытался включить wp_nonce_field () в HTML-форму, но это тоже не работает, такая же ошибка.

Может ли кто-нибудь помочь? Благодаря!!

function mrlpt_client_details( $client_post ) { // Retrieve saved metadata if it exists $mrlpt_clientEmail = get_post_meta( $client_post->ID, '_mrlpt_client_email', true ); $mrlpt_clientPhoneNum = get_post_meta( $client_post->ID, '_mrlpt_client_phone_num', true ); // Create a nonce field for verification wp_nonce_field( 'mrlpt_submit_client', 'mrlpt_client_check' ); // Includes the form elements inside the meta box require_once( 'includes/mrlpt-client-form.php' ); } // Update/Save client meta data add_action( 'save_post', 'save_client_metadata' ); function save_client_metadata( $client_post_id ) { // Verify if this is an auto save routine. // If it is our form has not been submitted, so we dont want to do anything if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return; } // Verify this came from the our screen and with proper authorization, because save_post can be triggered at other times if ( !isset( $_POST['mrlpt_client_check'] ) && !wp_verify_nonce( $_POST['mrlpt_client_check'], 'mrlpt_submit_client' ) ) { return; } // Check permissions - If the post type is mrlpt_client if ( 'post' == $_POST['mrlpt_client'] ) { // If the user cannot publish posts if ( !current_user_can_for_blog( $blog_id, 'publish-post' ) ) { // Checks by capability, not role wp_die( 'Insufficient privileges: Sorry, you do not have access to this page.' ); } } // OK, we're authenticated: we need to find and save the data // Verify the meta data is set if ( isset( $_POST['mrlpt_client_email'] ) && isset( $_POST['mrlpt_client_phone_num'] ) ) { // Save meta data update_post_meta( $client_post_id, '_mrlpt_client_email', strip_tags( $_POST['mrlpt_client_email'] ) ); update_post_meta( $client_post_id, '_mrlpt_client_phone_num', strip_tags( $_POST['mrlpt_client_phone_num'] ) ); } } 

Solutions Collecting From Web of "Формы и WordPress Nonce"

Логика здесь неверна:

 // Verify this came from the our screen and with proper authorization, because save_post can be triggered at other times if ( !isset( $_POST['mrlpt_client_check'] ) && !wp_verify_nonce( $_POST['mrlpt_client_check'], 'mrlpt_submit_client' ) ) { return; } 

Это $_POST['mrlpt_client_check'] что $_POST['mrlpt_client_check'] не установлен и недействителен – return. Вы хотите, чтобы он читался, если $_POST['mrlpt_client_check'] не установлен или он недействителен – return.

Поэтому, когда $_POST['mrlpt_client_check'] не установлен, он проверяет

  wp_verify_nonce( $_POST['mrlpt_client_check'], 'mrlpt_submit_client' ) 

который выдает ошибку, потому что первый аргумент ссылается на ключ, который не существует. Ваше использование nonce верно:

 wp_nonce_field( 'mrlpt_submit_client', 'mrlpt_client_check' ); 

Поэтому, если обмен веществ не сохраняется, вы можете проверить, что находится в курсе

 function save_client_metadata( $client_post_id ) { // Verify if this is an auto save routine. if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; wp_die(var_dump($_POST)); } 

Я не уверен, что приведет к тому, что ваш mrlpt_client_check nonce не будет опубликован, но вы можете включить то, что includes/mrlpt-client-form.php в ваш вопрос.


редактировать

Чтобы проверить разрешения:

 function save_client_metadata( $post_id ) { // Verify if this is an auto save routine. if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; //Check that this post is of type 'post' if( 'post' != get_post_type( $post->ID ) ) return; //Check permissions if ( !current_user_can_for_blog( $blog_id, 'publish-post' ) ) wp_die( 'Insufficient privileges: Sorry, you do not have access to this page.' ) //Check nonce named mrlpt_client_check if ( !isset( $_POST['mrlpt_client_check'] ) || !wp_verify_nonce( $_POST['mrlpt_client_check'], 'mrlpt_submit_client' ) ) return //Validate data as necessary }