Intereting Posts
Как изменить URL главного сайта на многоузловой установке (сети)? Специфический заказ на короткий номер продукта Woocommerce Как я могу легко добавить код в тег <body> без использования перехватчиков? Может ли WordPress читать собственный RSS-канал? Установка CMB2 – не может заставить ее работать Заголовки уже отправлены на пользовательский плагин (функция экспорта) Результаты поиска по категориям Отображение конкретной таксономии Как заменить слова в моих сообщениях и сохранить новые слова Преобразование паролей пользователей в MD5? Регистрация только в виде виджета – это особый тип пользовательских сообщений Проверить действительную электронную почту после бездействия пользователя? Проверьте, является ли текущее сообщение последним (не последним) неожиданный T_FUNCTION в шаблоне плагина Как я могу реплицировать и регистрировать виджет из детской темы

page meta box – выпадающее меню get_categories

Я создал мета-окно с выпадающим списком, который состоит из всех существующих категорий.

Администратор страницы должен иметь возможность выбрать одну из категорий из раскрывающегося списка, которая будет сохранена функцией сохранения / обновления страницы wordpress.

<select name="event-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'> <option value=""><?php echo esc_attr(__('Select Event')); ?></option> <?php $categories= get_categories('child_of=10'); foreach ($categories as $category) { $option = '<option value="/category/archives/'.$category->category_nicename.'">'; $option .= $category->cat_name; $option .= ' ('.$category->category_count.')'; $option .= '</option>'; echo $option; } ?> </select> 

Я не знаю, как работать с выбранным элементом списка без перенаправления на другую страницу, например «action = bla.php» ?!

Раньше я работал с простыми полями imput, которые могут быть сохранены функцией обновления / сохранения страницы, но как это можно сделать с выпадающим списком?

Вот полный код:

 <?php /* Plugin Name: myname &raquo; Membership Plugin URI: http://www.myname.com Description: Das membership Plugin. Author: myname Version: 2 Author URI: http://www.myname.com */ add_action( 'add_meta_boxes', 'membership_meta_box_add' ); function membership_meta_box_add() { /* * add_meta_box( $id, $title, $callback, $page, $context, $priority, $callback_args ); * id = unique identifier for css or javascript * title = displayed at the top of the meta box * callback = function which renders the meta box * page = will be displayed on "post", "page" or "some_custom_post_type" * context = where to place the box: "normal" (below the editor), "side" and "advanced" (column of post editor but further down) * priority = from top to bottom: "high", "default", "low" * callback_args = will the disregard by us */ add_meta_box( 'myname_membership_box_id', 'myname Membership Einstellungen', 'membership_meta_box_cb', 'page', 'normal', 'high' ); } function membership_meta_box_cb($post) { // $post is already set, and contains an object: the WordPress post $values = get_post_custom( $post->ID ); /*************************************************** * Einlesen der bereits gespeicherten Variablen ***************************************************/ $membership_premium_category = isset( $values['membership_premium_category'] ) ? esc_attr($values['membership_premium_category'][0]) : ''; // We'll use this nonce field later on when saving. wp_nonce_field( 'membership_meta_box_ms_nonce', 'meta_box_ms_nonce' ); /*************************************************** * Konfiguration der Stylesheets ***************************************************/ ?> <style type="text/css"> .membership-box-content {padding: 10px 0px 0px 0px; margin: 10px 0px 0px 0px; clear: both;} .membership-box-content-switcher {clear: both;} .membership-box-title {margin: 0px 0px 5px 0px; font-weight: bold; float: left;} .membership-box-dev-note {font-style: italic; float: right; margin-right: 10px;} .membership-box-field {margin: 0px 0px 5px 0px; width: 99%;} .membership-box-field:hover {background: #F9F9F9;} .membership-box-field:focus {background: #F9F9F9;} .membership-box-field-small:hover {background: #F9F9F9;} .membership-box-field-small:focus {background: #F9F9F9;} .membership-box-details {margin: 0px 0px 10px 0px;} .extend-button { margin: 5px 0px 0px 0px; -moz-box-shadow:inset 0px 1px 0px 0px #ffffff; -webkit-box-shadow:inset 0px 1px 0px 0px #ffffff; box-shadow:inset 0px 1px 0px 0px #ffffff; background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #ededed), color-stop(1, #dfdfdf) ); background:-moz-linear-gradient( center top, #ededed 5%, #dfdfdf 100% ); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#dfdfdf'); background-color:#ededed; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; border:1px solid #dcdcdc; display:inline-block; color:#777777; font-family:Verdana; font-size:10px; font-weight:normal; padding:3px 8px; text-decoration:none; text-shadow:1px 1px 0px #ffffff; } .extend-button:hover { background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #dfdfdf), color-stop(1, #ededed) ); background:-moz-linear-gradient( center top, #dfdfdf 5%, #ededed 100% ); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#dfdfdf', endColorstr='#ededed'); background-color:#dfdfdf; } .extend-button:active { position:relative; top:1px; } </style> <? /*************************************************** * Aufbau der Eingabefelder ***************************************************/ ?> <p>Hier finden Sie alle verf&uuml;gbaren Einstellungsm&ouml;glichkeiten f&uuml;r die Membership Site.</p> <div id="inhaltselemente"> <div class="membership-box-content"> <div class="membership-box-title">Kategorie f&uuml;r Membership Artikel</div><div class="membership-box-dev-note">dev: "membership_premium_category"</div> <input type="text" class="membership-box-field" name="membership_premium_category" id="membership_premium_category" value="<?php echo $membership_premium_category; ?>" /> <div class="membership-box-details">Bitte tragen Sie hier den Namen (nicht Slug/Titelform) der obersten Kategorie aller Premium Artikel ein. <i>Diese Eingabe ist notwendig.</i></div> </div> </div> <!-- WORKING DRAFT --> <select name="event-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'> <option value=""><?php echo esc_attr(__('Select Event')); ?></option> <?php $categories= get_categories('child_of=10'); foreach ($categories as $category) { $option = '<option value="/category/archives/'.$category->category_nicename.'">'; $option .= $category->cat_name; $option .= ' ('.$category->category_count.')'; $option .= '</option>'; echo $option; } ?> </select> <!-- WORKING DRAFT --> <?php } /*************************************************** * Speicherfunktion des Plugins ***************************************************/ add_action( 'save_post', 'membership_meta_box_save' ); function membership_meta_box_save( $post_id ) { // Bail if we're doing an auto save if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; // if our nonce isn't there, or we can't verify it, bail if( !isset( $_POST['meta_box_ms_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_ms_nonce'], 'membership_meta_box_ms_nonce' ) ) return; // if our current user can't edit this post, bail if( !current_user_can( 'edit_post' ) ) return; // now we can actually save the data $allowed = array('a' => array( 'href' => array()), 'object' => '', 'iframe' => array( 'width' => array(), 'height' => array(), 'src' => array(), 'frameborder' => array(), 'allowfullscreen' => array()) ); /*************************************************** * Speicherung der einzelnen oben definierten Felder ***************************************************/ // Make sure your data is set before trying to save it if( isset( $_POST['membership_premium_category'] ) ) update_post_meta( $post_id, 'membership_premium_category', wp_kses( $_POST['membership_premium_category'] ) ); } ?> 

Solutions Collecting From Web of "page meta box – выпадающее меню get_categories"

если вы используете его в метамоксике, вам действительно не нужна эта часть:

 onchange='document.location.href=this.options[this.selectedIndex].value;' 

Поэтому измените поля выбора на:

 <select name="event-dropdown"> <option value=""><?php echo esc_attr(__('Select Event')); ?></option> <?php //get saved data $saved_cat = get_post_meta($post_id,'event-dropdown',true); $categories= get_categories('child_of=10'); $select_options = ''; foreach ($categories as $category) { $option = '<option value="'.$category->cat_ID.'">'; $option .= $category->cat_name; $option .= '</option>'; $select_options .= $option; } //set saved data as selected $select_options = str_replace('value="'.$saved_cat.'"','value="'.$saved_cat.'" selected="selected"',$select_options); echo $select_options; ?> </select> 

затем убедитесь, что вы сохранили его в своей функции membership_meta_box_save поэтому добавьте это до конца:

 if( isset( $_POST['event-dropdown'] ) ) update_post_meta( $post_id, 'event-dropdown', $_POST['event-dropdown'] ); 

теперь идентификатор категории будет сохранен как мета для каждой страницы