Intereting Posts
download_url () отображается серым значком Запрос, выводящий URL-адрес YouTube, а не встроенное видео где я могу найти недостающие комментарии на панели инструментов WordPress? Как изменить параметр ширины по умолчанию встроенного видео в wordpress? Повторное использование ссылок в сообщении на разных языках Получить условия от сообщений, отправленных в течение определенного времени Media Permalink Проблема в подкаталоге Multiste form $ _post значение действия усекается после того, как оно проходит через две формы Список сообщений категории – проблема thumbnail_size Можно ли отображать вновь сгенерированный пароль после wp_generate_password ()? Размер файла изображения увеличивается при загрузке Multisite: у меня есть пробел в моих блогах. Как добавить отсутствующий? Можно ли отображать список категорий в сообщении? Как добавить настраиваемое поле в сообщение, созданное программно? Пользовательский URL таксономии

Обновление метаданных сообщений для пользовательских типов сообщений

Я пишу плагин для работы (еще) и имею еще одну проблему.

Я добавил свои мета-боксы по мере необходимости. Однако проблема, с которой я столкнулась, возникает при сохранении сообщения. Мои отрывки для экономии в значительной степени приходят с этой должности . Я также получил аналогичный ответ здесь , но он почему-то не работает. : /

protected function __update_post_meta( $post_id, $field_name, $value = '' ) { if ( empty( $value ) OR ! $value ) { delete_post_meta( $post_id, $field_name ); } elseif ( ! get_post_meta( $post_id, $field_name ) ) { add_post_meta( $post_id, $field_name, $value ); } else { update_post_meta( $post_id, $field_name, $value ); } } 

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

  public function _wp_save_post( $post_id, $post ) { if ( empty($_POST) OR !isset($_POST['argus_edit_visitor']) OR !wp_verify_nonce( $_POST['argus_edit_visitor'], 'argus_edit_visitor' ) ) { return $post->ID; } if ( ! current_user_can( 'edit_post', $post->ID ) ) return $post->ID; // v_f_name | v_l_name | v_workstation | v_id // Argh! $this->__update_post_meta( $post->ID, 'v_f_name', $_POST['v_f_name'] ); $this->__update_post_meta( $post->ID, 'v_l_name', $_POST['v_l_name'] ); $this->__update_post_meta( $post->ID, 'v_workstation', $_POST['v_workstation'] ); $this->__update_post_meta( $post->ID, 'v_id', $_POST['v_id'] ); } 

Функция nonce используется как: <input type="hidden" name="argus_edit_visitor" id="argus_edit_visitor" value="{$nonce}" /> и создается с использованием $nonce = wp_create_nonce( plugin_basename( __FILE__ ) ); , Поле ввода внутри блока html хранится в переменной $ html. Stackexchange анализировал мой html, иначе я бы вставлял его здесь.

-Zack

EDIT: Просто протестируйте его, и это ошибка nonce.
EDIT2: Typo с моей стороны, но все равно не работает.

Мне очень нравится ваша чистая структура классов 🙂 Но у меня есть предложение, которое может исправить ситуацию (основанный на моем опыте с nonce и мета-ящиками из подключаемого модуля, который я построил в прошлые выходные):

Не пытайтесь создать поле nonce вручную. В настоящее время у вас есть:

 $nonce = wp_create_nonce( plugin_basename( __FILE__ ) ); ... <input type="hidden" name="argus_edit_visitor" id="argus_edit_visitor" value="{$nonce}" /> 

Стандартный способ создания этого поля – использовать wp_nonce_field() WordPress. Он добавит вам скрытое поле:

 wp_nonce_field( __FILE__, 'argus_edit_visitor' ); 

Проверка nonce

Вы проверяете неправильную строку. В вашем коде вы создали nonce с __FILE__ но вы проверяете строку argus_edit_vistor . У тебя есть:

 if ( empty($_POST) OR !isset($_POST['argus_edit_visitor']) OR !wp_verify_nonce( $_POST['argus_edit_visitor'], 'argus_edit_visitor' ) ) { echo "Erm. Why?"; return $post->ID; } 

Вы должны иметь:

 if ( empty($_POST) OR !isset($_POST['argus_edit_visitor']) OR !wp_verify_nonce( $_POST['argus_edit_visitor'], __FILE__ ) ) { echo "Erm. Why?"; return $post->ID; } 

Обычно я использую plugin_basename(__FILE__) при создании nonces. Но вы не должны сталкиваться с проблемами, делающими это по-своему, пока проверка несовместимости и немедленного контроля происходит в одном файле.