Как создать пользовательскую панель и поля на странице

Я хотел бы написать настраиваемый плагин, который добавит пользовательскую панель под панелью компоновки сообщений, которая будет содержать несколько полей и кнопку отправки. JS начнет подавать контент в базу данных, не сохраняя или не вмешиваясь в механизм сохранения сообщения / отправки.

Целью является сохранение данных, которые будут использоваться, и быстрый доступ при написании сообщения. Я мог бы сделать страницу настроек плагина, но мне не нравится идея использовать два экрана, когда это можно сделать в одном и том же месте 🙂

Я видел плагины Custom Fields, но они добавляют ценность сообщению, а я хочу что-то более гибкое, которое создается при написании сообщения, но не обязательно связано с этим сообщением.

Кажется, я не могу найти, как это сделать …

Благодаря!

Solutions Collecting From Web of "Как создать пользовательскую панель и поля на странице"

В WordPress World это называется «Мета-ящик», и в вашем случае это будет то же самое, что и для сообщений, единственное, что вам нужно сделать, – это функция сохранения, которая должна сохранять данные в таблице опций, здесь приведено изменение пример из кода, который должен работать для вас в качестве отправной точки:

<?php /* Define the custom box */ add_action( 'add_meta_boxes', 'myplugin_add_custom_box_WPA83147' ); /* Adds a box to the main column on the Post and Page edit screens */ function myplugin_add_custom_box_WPA83147() { add_meta_box( 'myplugin_sectionid', __( 'My Post Section Title', 'myplugin_textdomain' ), 'myplugin_inner_custom_box_WPA83147', 'post' ); } /* Prints the box content */ function myplugin_inner_custom_box_WPA83147( $post ) { // Use nonce for verification wp_nonce_field( plugin_basename( __FILE__ ), 'myplugin_noncename_WPA83147' ); // The actual fields for data entry // Use get_option to retrieve an existing value from the database and use the value for the form $options = get_option('_WPA83147_options', array()); echo '<label for="myplugin_new_field">'; _e("Description for this field", 'myplugin_textdomain' ); echo '</label> '; echo '<input type="text" id="myplugin_new_field" name="myplugin_new_field" value="'.(isset($options['myplugin_new_field']) ? $options['myplugin_new_field'] : "").'" size="25" />'; } /* Do something with the data entered */ add_action( 'save_post', 'myplugin_save_postdata_WPA83147' ); /* When the post is saved, saves our custom data */ function myplugin_save_postdata_WPA83147( $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 ( !wp_verify_nonce( $_POST['myplugin_noncename_WPA83147'], plugin_basename( __FILE__ ) ) ) return; // Check permissions if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return; } // OK, we're authenticated: we need to find and save the data if (isset($_POST['myplugin_new_field'])){ //sanitize user input $mydata = sanitize_text_field( $_POST['myplugin_new_field'] ); //get all saved options $data = get_option('_WPA83147_options', array()); //updated the field you need $data['myplugin_new_field'] = $mydata; //store in the database update_option('_WPA83147_options', $$data); } }