widget出力でtextwidgetを削除する
2018年10月16日
WordPressのテキストwidget出力はデフォルトで
<div class="textwidget"></div>
が挿入される。
それを踏まえて最初からtextwidgetにcssを当てておいても良いのだが、アート・コア川口サイトのように、縦に長いメインページにいくつかの独自widgetを埋め込んだりする場合は、そのwidgetによって装飾も違ってくるので一律にclassをあてたtextwidgetではまずい場合がある。
そこで見つけたのがtextwidgetを排除する方法なのだが、wp-includeのwidgetの元のファイルを変更してしまうとwpアップデートの際に元に戻ってしまうので新たにtextwidgetのないwidgetをfunctions.phpに作る。
wp_include/widget/class-wp-widget-text.phpを別名保存し、
<div class="textwidget"><?php echo !empty( $instance['filter'] ) ? wpautop( $text ) : $text; ?></div>
の部分を探して
<div class="textwidget">
部分を削除し
<?php echo !empty( $instance['filter'] ) ? wpautop( $text ) : $text; ?>
のみにする。
このままではwidgetの名前などがダブってしまうので以下の部分も変更する。
class WP_Widget_Text 'classname' => 'widget_text', 'description' => __( 'Arbitrary text or HTML.' ), parent::__construct( 'text', __( 'Text' ), $widget_ops, $control_ops );
を以下のように変更
class WP_Widget_Text_noclass 'classname' => 'widget_text_noclass', 'description' => __( 'textwidgetクラスのないテキストウィジェット' ), parent::__construct( 'text_noclass', __( 'textWidgetなしテキスト' ), $widget_ops, $control_ops );
最後に
add_action('widgets_init',function(){ register_widget("WP_Widget_Text_noclass"); });
を追加して完了(ここで結構時間取られた)。
以上の部分をfunctions.phpに追加すると「textwidgetなしテキスト」という新たなwidgetが出来上がっているはず。