Intereting Posts
Пользовательские поля сообщений Как перечислить страницы для братьев и сестер и включить их? Yoast: мне все еще нужно вручную вставлять метатеги в мою тему, или Yoast сделает это для меня? Как $ wpdb обрабатывает COUNT (*) Ошибки в Google 404 Пользовательский запрос типа запроса для боковой панели не работает на главной странице wp_head () не включает стили и javascripts после перенаправления шаблона Лучшее изображение сохраняет обрезку Переписывать сообщения url, поскольку они все дети страницы Установить отображаемое имя из псевдонима с процессом регистрации Как добавить пользовательский JS в tinymce в wordpress Я хочу использовать редактор изображений GD только для одной функции, а затем вернуться к ImageMagick Просмотреть приватную опубликованную страницу с кодом URL (без регистрации) Показать последнюю измененную дату базы данных Храните wp_insert_post в добавлении дубликатов

Как добавить дополнительное поле во всех доступных WordPress виджетах?

Я продолжаю поиск того, как добавить дополнительное поле для каждого доступного виджета WordPress, что-то вроде Subtitle после Title виджета.

Есть ли способ подключить каждый доступный виджет?

Solutions Collecting From Web of "Как добавить дополнительное поле во всех доступных WordPress виджетах?"

Я знаю, что плагин Widget Logic делает именно это.

Рассекая его код, выдержка ниже выведет текстовое поле во всех виджетах.

добавление textarea во все доступные виджеты

Но учтите, что:

  • это просто доказательство концепции, а управления «save field» нет
  • наилучшим решением, вероятно, является создание вилки плагина и удаление ненужных функций и добавление собственных
  • код плагина не совсем прост в чтении
 if ( is_admin() ) { add_action( 'sidebar_admin_setup', 'widget_logic_expand_control' ); } // CALLED VIA 'sidebar_admin_setup' ACTION // adds in the admin control per widget, but also processes import/export function widget_logic_expand_control() { global $wp_registered_widgets, $wp_registered_widget_controls, $wl_options; // ADD EXTRA WIDGET LOGIC FIELD TO EACH WIDGET CONTROL // pop the widget id on the params array (as it's not in the main params so not provided to the callback) foreach ( $wp_registered_widgets as $id => $widget ) { // controll-less widgets need an empty function so the callback function is called. if (!$wp_registered_widget_controls[$id]) wp_register_widget_control($id,$widget['name'], 'widget_logic_empty_control'); $wp_registered_widget_controls[$id]['callback_wl_redirect'] = $wp_registered_widget_controls[$id]['callback']; $wp_registered_widget_controls[$id]['callback'] = 'widget_logic_extra_control'; array_push( $wp_registered_widget_controls[$id]['params'], $id ); } } // added to widget functionality in 'widget_logic_expand_control' (above) function widget_logic_empty_control() {} // added to widget functionality in 'widget_logic_expand_control' (above) function widget_logic_extra_control() { global $wp_registered_widget_controls, $wl_options; $params = func_get_args(); $id = array_pop($params); // go to the original control function $callback = $wp_registered_widget_controls[$id]['callback_wl_redirect']; if ( is_callable($callback) ) call_user_func_array($callback, $params); $value = !empty( $wl_options[$id] ) ? htmlspecialchars( stripslashes( $wl_options[$id ] ),ENT_QUOTES ) : ''; // dealing with multiple widgets - get the number. if -1 this is the 'template' for the admin interface $number=$params[0]['number']; if ($number==-1) { $number="%i%"; $value=""; } $id_disp=$id; if ( isset($number) ) $id_disp = $wp_registered_widget_controls[$id]['id_base'].'-'.$number; // output our extra widget logic field echo "<p><label for='".$id_disp."-widget_logic'>My logic <textarea class='widefat' type='text' name='".$id_disp."-widget_logic' id='".$id_disp."-widget_logic' >".$value."</textarea></label></p>"; }