古いテーマの修正例#1

古いといっても2017年にオープンしたサイトのテーマ。コピペしてるだけなので古いコードがずっと残ってる。

例えばfunctions.phpにこういうコード。WordPressに書くと見にくいけど。

class TextArea2 extends WP_Widget { 
function TextArea2() { parent::WP_Widget(false, $name = 'テキストR'); }
function widget($args, $instance) { extract( $args );
$title = apply_filters( 'widget_example', $instance['title'] );
$text = apply_filters( 'widget_example', $instance['text'] );
$html .= $text;
echo do_shortcode($html);
}
function update($new_instance, $old_instance) { $instance = $old_instance;
$instance['title'] = trim($new_instance['title']); $instance['text'] = trim($new_instance['text']);
return $instance;
}
function form($instance) {
$title = esc_attr($instance['title']); $text = esc_attr($instance['text']);
$html = "<p>\n";
$html .= "<label for='{$this->get_field_id('title')}'>タイトル:</label>\n";
$html .= "<input class='widefat' id='{$this->get_field_id('title')}' name='{$this->get_field_name('title')}' type='text' value='{$title}'>\n";
$html .= "</p>\n<p>\n";
$html .= "<label for='{$this->get_field_id('text')}'>テキスト:</label>\n";
$html .= "<textarea rows='3' colls='20' class='widefat' id='{$this->get_field_id('text')}' name='{$this->get_field_name('text')}' type='text' value='{$text}'>{$text}</textarea>\n";
$html .= "</p>\n";
echo $html;
}
}
add_action('widgets_init', create_function('', 'return register_widget("TextArea2");'));
  • PHP4時代のclassコンストラクタの書き方。PHP7.0で非推奨。
  • {}を1行で書きたがる変な癖。;後の改行もしない。CSSもこうだった。
  • extract。逆のcompactはよく使うけどextractは危険…。WPのコーディング規約でも禁止。
  • create_function。PHP7.2で非推奨。
  • そもそもこれ何のためのウィジェットなんだ…。

最近の大きな非推奨を見事に踏み抜いててすごい…。将来、絶対に動かなくなることが確定している。まともなスキルがあれば見ただけでやばいと分かる。

とりあえず自動整形してエラーが出る箇所のみ直す。

public function __construct()
{
parent::__construct(false, $name = 'テキストR');
}

$name = 'テキストR'もおかしい…。

add_action('widgets_init', function () {
register_widget("TextArea2");
});

しかし、そもそもテキストウィジェットでショートコード使うためにこんなコードを書く必要がなかったので全部削除。

代わりにこの1行だけでいい。

add_filter('widget_text', 'do_shortcode');

さらに言えばウィジェットでショートコード使おうとしてるのも間違ってる気がするけどそこまで修正すると大変なのでそのまま。