Intereting Posts
простые шаги для создания формы переднего плана без плагина Тема Twenty Eleven – имеет пользовательскую целевую страницу, изменить навигационную ссылку «home» Исключить страницы из страницы результатов поиска WordPress Как проверить список или фид всех сообщений под категорией и тегом? Перечислите 5 самых последних дочерних страниц Типы пользовательских сообщений WordPress со страницей в качестве родителя? Переписывание иерархии дат в пул «yyyy-mm-dd» Как создать альтернативную домашнюю страницу? Добавить возможности в пользовательский тип сообщения после его создания Кто-нибудь знает фрагмент php для показа первых 200 символов последнего сообщения? Media Manager: обновить библиотеку после нового выбора Создать класс, который будет доступен для всех функций плагина How-to: конвертировать забронированное время с назначаемого продукта в формат UTC Поместите медиа-загрузчик в метабокс Многопользовательская установка на IIS дает 404 попытке доступа к панели управления admin

Отсутствует параметр боковой панели "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; }