Intereting Posts
get_results на больших наборах данных Как удалить элементы меню панели мониторинга для пользователей с несколькими пользователями? Отправка почтовых данных через REST API, как разобрать короткие коды в post_content? Не удалось получить доступ к странице администратора сайта – 500 ошибка – как изменить целевую страницу Как сделать виджет пользовательской панели мониторинга для отображения пользовательского уведомления от администратора? Включить php для определенного шаблона страницы Когда загружается таблица метаданных пользователя? Новый клон сайта WordPress 301 перенаправляет обратно на оригинальный сайт включить любой плагин в другой плагин или использовать другой плагин в другом Импорт WordPress не импортирует пользовательскую таксономию Печать строки в нижний колонтитул с использованием параметра wp_footer Нажатие кнопки боковой панели при переадресации пользователя вместо этого отображает ее Поиск помощи при написании правильного синтаксиса функции для печати результатов пользовательских полей полей для открытия в wp_footer Отказоустойчивые изображения Пользовательские типы сообщений, отфильтрованные по таксономии с использованием REST API v2

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