Плагины — Невозможно Выполнить Функцию Сохранения Мета-Поля И Очистку/Проверку.

  • Автор темы Stary1
  • Обновлено
  • 22, Oct 2024
  • #1

Прежде чем прийти к этому моменту, я консультировался несколько раз →

  1. Функция проверки
  2. На StackOverFlow

Просмотрел другие существующие статьи Здесь:

1 WS1

2 WS2

Окончательно,

Я придумал свою версию →

 
 if ( url_allowed( $_POST['video-url'] ) ) {

}

}
 

Но что-то здесь в функции сохранения не доработано:

function cpmb_add_admin_styles() { wp_enqueue_style( 'cpmb-admin', plugins_url( 'b-cpt/css/admin.css' ) ); } add_action( 'admin_enqueue_scripts', 'cpmb_add_admin_styles' ); function cpmb_add_admin_scripts() { /*Get the current screen*/ $screen = get_current_screen(); // Compare the current screen's ID with 'post'. If they are equal, enqueue the JavaScript if( 'post' == $screen->id ) { wp_enqueue_script( 'cpmb-admin', plugins_url( 'b-cpt/js/admin.js' ) ); } } add_action( 'admin_enqueue_scripts', 'cpmb_add_admin_scripts' ); function cpmb_add_meta_box() { add_meta_box( 'cpmb_video', // The ID for the meta box 'Add Video URL', // The title of the meta box 'cpmb_display_meta_box', // The function for rendering the markup 'post', // We'll only be displaying this on post pages 'advanced', // Where the meta box should appear 'high' // The priority of where the meta box should be displayed ); } add_action( 'add_meta_boxes', 'cpmb_add_meta_box' ); function cpmb_display_meta_box( $post ) { // Define the nonce for security purposes wp_nonce_field( plugin_basename( __FILE__ ), 'cpmb-nonce-field' ); // Start the HTML string so that all other strings can be concatenated $html = ''; // Display the 'MP3 File' label and its file input element $html .= '<label id="video-url" for="video-url">'; $html .= 'Video URL'; $html .= '</label>'; $html .= '<input type="URL" id="video-url" name="video-url" value="" />'; $video_type = get_post_meta($post->ID,'my_video_type',true); $video_id = get_post_meta($post->ID,'my_meta_box_text',true); $html . = '<p>' $html . = '<label for="my_meta_box_text">Select video type:</label>' <!-- added select for selecting Vedio type --> $html . = '<select name="my_video_type" id="my_video_type"> ' $html . = '<option <?php echo ($video_type == 'youtube') ? "selected='selected'" : "" ;?> value="youtube">Youtube</option>' $html . = '<option <?php echo ($video_type == 'vimeo') ? "selected='selected'" : "" ;?> value="vimeo">Vimeo</option>' $html . = '</select>' <!-- added select for selecting Vedio type --> $html . = </p> $html . = '<p>' $html . = '<label for="my_meta_box_text">Youtube/Vimeo ID:</label>' $html . = '<input type="text" name="video-url" id="video-url" value="<?php echo $video_id; ?>" />' $html . = '</p>' echo $html; } function cpmb_save_meta_box_data( $post_id ) { // If the user has permission to save data... if ( cpmb_user_can_save( $post_id, 'cpmb-nonce-field' ) ) { // ...and if the MP3 file is setup, then check to make sure its valid and save it, as well if ( isset( $_POST['video-url'] ) && ! empty( $_POST['video-url'] ) ) { if ( url_allowed( $_POST['video-url'] ) ) { } } } } add_action( 'save_post', 'cpmb_save_meta_box_data' ); function url_allowed( $url ) { $allowed_hosts = array( 'youtube.com', 'vimeo.com' ); if ( in_array( parse_url( $url, PHP_URL_HOST ), $allowed_hosts ) ) { return true; } return false; } function cpmb_user_can_save( $post_id, $nonce ) { $is_autosave = wp_is_post_autosave( $post_id ); $is_revision = wp_is_post_revision( $post_id ); $is_valid_nonce = ( isset( $_POST[ $nonce ] ) && wp_verify_nonce( $_POST[ $nonce ], plugin_basename( __FILE__ ) ) ); return ! ( $is_autosave || $is_revision ) && $is_valid_nonce; }

Пожалуйста, помогите мне завершить это.

Пожалуйста, помогите мне также использовать wp_kses# и т. д., если их можно применить здесь.

Пожалуйста, также помогите мне устранить любые ошибки в этом фрагменте кода.

#плагины #метабокс

Stary1


Рег
31 Dec, 2016

Тем
68

Постов
176

Баллов
546
  • 25, Oct 2024
  • #2

После проверки вам просто нужно обновить мета-сообщение с помощью ввода формы:

 wp_parse_url() 

Если вы посмотрите на источник url_allowed() , вы можете видеть, что он использует parse_url() и wp_parse_url() .


Боковое примечание:

Он также анализирует URL-адрес с помощью wp_kses_normalize_entities() , a wrapper for php's wp_allowed_protocols , чтобы проверить различные части. Мало чем отличается от того, что мы делали в esc_url() function (in fact I'll update этот ответ использовать if ( url_allowed( $_POST['video-url'] ) ) { update_post_meta( $post_id, 'video-url', esc_url( $_POST['video-url'] ) ); } else { //if user edits entry to remove a url from input, it will be deleted delete_post_meta( $post_id, 'video-url' ); } if you want).

 

Boganovikova


Рег
09 Aug, 2010

Тем
76

Постов
187

Баллов
597
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно