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が出来上がっているはず。

関連記事

PAGE TOP