Intereting Posts
Есть ли какой-нибудь плагин для управления курсом? загружать загрузочную страницу загрузки слишком медленно query_posts и показывать результаты только в том случае, если пользовательское поле не пустое Расширение пользовательского типа сообщения Параметры темы – WordPress URL переписать в wordpress URL-адрес перенаправленного URL-адреса 404 не знает, почему Помощь со связанными функциями сообщений Получение функции post_id в wp_ajax Multisite: как определить и ограничить пользовательский тип отправки для определенных сайтов? Как мне перестроить библиотеку WordPress Media после перехода на новый хост? Добавить пользовательские поля для поиска WordPress работает только в директории с именем «wordpress» Все мои вставленные изображения получают ссылку на полное изображение, даже если оно уже полноразмерное изображение Не удается удалить два родных плагина WordPress

Отсутствует параметр боковой панели "fix" – before_content

как вы знаете, параметры боковой панели из register_sidebar (), которые управляют компоновкой виджетов,

- before_widget - after_widget - before_title - after_title 

проблема заключается в том, что вы не можете реализовать определенные типы конструкций, потому что отсутствует параметр « before_content ».

например:

 <div class="container"> <div class="title"> title </div> <div class="content"> content </div> </div> 

структура HTML, подобная этой, возможна только в том случае, если вы добавляете <div class="content"> в параметр after_title . Проблема в том, что если вы сделаете это, виджеты без заголовков нарушат макет страницы 🙁

так как есть решение как-то добавить, что <div class="content"> после div.title , или после div.container если заголовок отсутствует?

Solutions Collecting From Web of "Отсутствует параметр боковой панели "fix" – before_content"

Этот код определяет, был ли задан заголовок, а если нет, он изменяет аргумент before_widget .

 add_filter( 'widget_display_callback', 'wpse4213_widget_display_callback', 10, 3 ); function wpse4213_widget_display_callback( $instance, $widget, $args ) { if ( empty( $instance['title'] ) ) { $args['before_widget'] = '<div class="container"><div class="content">'; $widget->widget( $args, $instance ); return false; } return $instance; } 

Этот код работает, потому что widget_display_callback позволяет вернуть false если вы не хотите отображать виджет. В этом случае мы сами видим виджет, поэтому мы не хотим, чтобы WordPress делал это снова. Взлом, но он работает.

Эта функция не удастся, если виджет поставляет заголовок по умолчанию (например, большинство виджетов, включенных в основной дистрибутив). Чтобы обнаружить это, я также создал функцию, которая сначала пытается отобразить виджет в выходном буфере. Если мы обнаружим элемент заголовка в этом выходном буфере, виджет имел заголовок по умолчанию, поэтому мы игнорируем буфер и отображаем его как обычный виджет. Но это также может нарушиться, когда виджет использует сверхактивное кэширование, поэтому мы должны попытаться его также сбросить. Я упоминал, что это взломать?

 add_filter( 'widget_display_callback', 'wpse4213_widget_display_callback', 10, 3 ); function wpse4213_widget_display_callback( $instance, $widget, $args ) { if ( empty( $instance['title'] ) ) { $args['before_widget'] = '<div class="container"><div class="content">'; ob_start(); $widget->widget( $args, $instance ); $widget_content = ob_get_contents(); ob_end_clean(); if ( false !== strpos( $widget_content, 'widget-title' ) ) { // It did return a title! if ( method_exists( $widget, 'flush_widget_cache' ) ) { $widget->flush_widget_cache(); } return $instance; } echo $widget_content; return false; } return $instance; }