Intereting Posts
WP e-commerce: как выбрать метод расчета стоимости доставки в соответствии с местом доставки Миниатюра страницы не отображается в навигации почему мое меню не появляется на панели администратора Настройка файлов cookie для автозаполнения формы Сообщения, показывающие \ r \ n вместо фактических тегов разрыва строки Может ли новый REST API теперь превратить WP в свой собственный сервер уведомлений? Как отображать дочерние категории родительской категории текущей категории? Переписать СРТ в постоянные ссылки на субдомены Только резервные записи в блогах Пользовательский тип сообщения – заголовок страницы архива Отображать пользовательские поля в профиле пользователя frontside Тематический плагин, как? Добавить эффект скольжения в результаты сортировки ajax post Как сделать фильтр excerpt_more применимым к фактической выдержке после выписки? Удалить все запросы Arg

Как добавить дополнительное поле во всех доступных 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>"; }