WordPressテーマTCD「UNIQUE」(tcd044)はデバッグモードをONにするとウィジェットの登録部分から警告が出ます。

WordPressにはデバッグモードがあります。

WordPressサイトの開発中はデバッグモードをONにすることが推奨されています。

試しに当社のサイトをデバッグモードにして見たところ警告が出てしまいました。

WordPressのデバッグモードをONにする

WordPressのデバッグモードは「wp-config.php」を修正することでONになります。

以下の行を見つけて下さい。

私の場合は84行目にありました。

define('WP_DEBUG', false);

これを

define('WP_DEBUG', true);

に変更しアップロードします。

WordPressテーマTCD「UNIQUE」の警告

WordPressをデバッグモードにすると、当社のホームページは以下のようにたくさんの警告が表示されてしまいました。

ホームページのレイアウトも崩れて真っ白になっています。

Deprecated: Function create_function() is deprecated in/home/slashd.com/public_html/○○○○○/themes/unique_tcd044/widget/ad.php on line 116

という警告の羅列です。
WordPressテーマ「UNIQUE」の全てのウィジェットから警告が出ています

以下の部分です。

// init the widget
add_action('widgets_init', create_function('', 'return register_widget("ml_ad_widget");'));

私はこのようなウィジェット登録を初めて見ました。

WordPress CodexでウイジェットAPIを見てみると、この登録はPHP 5.2+の形式となっています。

参照 WordPress ウィジェット API(wpdocs.osdn.jp)

PHP 5.3+以上は

add_action( 'widgets_init', function(){
     register_widget( 'My_Widget' );
});

と記述しなければなりません。

当方の環境はPHP7.2.6なので警告が出ているのです。

このままでは少々気持ちが悪いので、登録部分を以下のように修正しました。

// ウィジェットを登録
function register_ml_ad_widget_widget() {
    register_widget( 'ml_ad_widget' );
}

// init the widget
add_action( 'widgets_init', 'register_ml_ad_widget_widget' );

子テーマ用のウィジェットも追加しました。
ウイジェットIDと関数名がダブらないように修正しています。

<?php

class ml_ad_widget2 extends WP_Widget {

  function __construct() {
    parent::__construct(
      'ml_ad_widget2',// ID
      __( '01_AdSense (slashd ver)', 'tcd-w' ),
      array(
        'classname' => 'ml_ad_widget',
        'description' => __('Show AdSense at random in front page.', 'tcd-w')
      )
    );
  }

  function widget($args, $instance) {

    extract($args);

    // Before widget //
    echo $before_widget;

      $banner_code1 = $instance['banner_code1'];
      $banner_image1 = wp_get_attachment_image_src( $instance['banner_image1'], 'full' );
      $banner_url1 = $instance['banner_url1'];
      $banner_code2 = $instance['banner_code2'];
      $banner_image2 = wp_get_attachment_image_src( $instance['banner_image2'], 'full' );
      $banner_url2 = $instance['banner_url2'];
      $banner_code3 = $instance['banner_code3'];
      $banner_image3 = wp_get_attachment_image_src( $instance['banner_image3'], 'full' );
      $banner_url3 = $instance['banner_url3'];

      if ($banner_code3 || $banner_image3) { 
        $random = rand(0,2);
      } elseif ($banner_code2 || $banner_image2) {
        $random = rand(0,1);
      } elseif ($banner_code1 || $banner_image1) {
        $random = rand(0,0);
      } else {
        $random = '';
      };

      if($random==0){
        if ($banner_code1) { echo $banner_code1; } else { echo '<a href="' . esc_url($banner_url1) . '" target="_blank"><img src="' . esc_attr($banner_image1[0]) . '" alt="" /></a>' . "\n"; };
      } elseif($random==1){
        if ($banner_code2) { echo $banner_code2; } else { echo '<a href="' . esc_url($banner_url2) . '" target="_blank"><img src="' . esc_attr($banner_image2[0]) . '" alt="" /></a>' . "\n"; };
      } elseif($random==2){
        if ($banner_code3) { echo $banner_code3; } else { echo '<a href="' . esc_url($banner_url3) . '" target="_blank"><img src="' . esc_attr($banner_image3[0]) . '" alt="" /></a>' . "\n"; };
      };

    // After widget //
    echo $after_widget;

  }

  // Update Settings //
  function update($new_instance, $old_instance) {
    $instance['banner_code1'] = $new_instance['banner_code1'];
    $instance['banner_image1'] = strip_tags($new_instance['banner_image1']);
    $instance['banner_url1'] = $new_instance['banner_url1'];
    $instance['banner_code2'] = $new_instance['banner_code2'];
    $instance['banner_image2'] = strip_tags($new_instance['banner_image2']);
    $instance['banner_url2'] = $new_instance['banner_url2'];
    $instance['banner_code3'] = $new_instance['banner_code3'];
    $instance['banner_image3'] = strip_tags($new_instance['banner_image3']);
    $instance['banner_url3'] = $new_instance['banner_url3'];
    return $instance;
  }

  // Widget Control Panel //
  function form($instance) {
    $defaults = array( 'banner_code1' => '', 'banner_image1' => '', 'banner_url1' => '', 'banner_code2' => '', 'banner_image2' => '', 'banner_url2' => '', 'banner_code3' => '', 'banner_image3' => '', 'banner_url3' => '' );
    $instance = wp_parse_args( (array) $instance, $defaults );
?>

<p><?php _e('One out of three AdSense will be displayed at random in front page.','tcd-w'); ?></p>

<div class="ml_ad_widget_box_wrap">

<?php for($i = 1; $i <= 3; $i++): ?>
<h3 class="ml_ad_widget_headline"><?php _e('AdSense','tcd-w'); ?><?php echo $i; ?></h3>
<div class="ml_ad_widget_box">
  <div class="ml_ad_widget_box_inner">
    <h5><?php _e('Register AdSense code','tcd-w'); ?></h5>
    <p><?php _e('If you are using Google AdSense or similar kind of AdSense, enter all code below.', 'tcd-w');  ?></p>
    <p><textarea style="width:100%; height:150px;" id="<?php echo $this->get_field_id('banner_code'.$i); ?>" name="<?php echo $this->get_field_name('banner_code'.$i); ?>"><?php echo $instance['banner_code'.$i]; ?></textarea></p>
  </div>
  <p class="widget_notice"><?php _e('If you want to register banner image and affiliate code individually, leave the field above blank and use the field below.', 'tcd-w');  ?></p>
  <div class="ml_ad_widget_box_inner">
    <h5><?php _e('Register AdSense image','tcd-w'); ?></h5>
      <div class="widget_media_upload cf cf_media_field hide-if-no-js <?php echo $this->get_field_id('banner_image'.$i); ?>">
       <input type="hidden" value="<?php echo $instance['banner_image'.$i]; ?>" id="<?php echo $this->get_field_id('banner_image'.$i); ?>" name="<?php echo $this->get_field_name('banner_image'.$i); ?>" class="cf_media_id">
       <div class="preview_field"><?php if($instance['banner_image'.$i]){ echo wp_get_attachment_image($instance['banner_image'.$i], 'medium'); }; ?></div>
       <div class="buttton_area">
        <input type="button" value="<?php _e('Select Image', 'tcd-w'); ?>" class="cfmf-select-img button">
        <input type="button" value="<?php _e('Remove Image', 'tcd-w'); ?>" class="cfmf-delete-img button <?php if(!$instance['banner_image'.$i]){ echo 'hidden'; }; ?>">
       </div>
      </div>
  </div>
  <div class="ml_ad_widget_box_inner">
    <h5><?php _e('Register affiliate code or link url for registered image','tcd-w'); ?></h5>
    <input style="width:100%;" type="text" class="img" name="<?php echo $this->get_field_name('banner_url'.$i); ?>" id="<?php echo $this->get_field_id('banner_url'.$i); ?>" value="<?php echo $instance['banner_url'.$i]; ?>" />
  </div>
</div>
<?php endfor; ?>

</div>

<?php

  } // end Widget Control Panel
} // end class

// Foo_Widget ウィジェットを登録
function register_ml_ad_widget2_widget() {
    register_widget( 'ml_ad_widget2' );
}

// init the widget
add_action( 'widgets_init', 'register_ml_ad_widget2_widget' );


?>

WordPressテーマTCD「UNIQUE」のアップデートは遅い

WordPressテーマ「UNIQUE」のウイジェットには他にも問題があります。
Googleカスタム検索が「https://」に対応していません。

これを機にそれも修正して、子テーマに読み込ませます。

子テーマのfunctions.phpに以下を追加しました。

function remove_widgets(){
// UNIQUEのウイジットを削除する。
 unregister_widget('ml_ad_widget');
 unregister_widget('tcd_archive_dropdow');
 unregister_widget('tcdw_category_list_widget');
 unregister_widget('styled_post_list1_widget');
 unregister_widget('tab_post_list_widget');
 unregister_widget('work_list_widget');
 unregister_widget('google_search');
}
add_action('widgets_init', 'remove_widgets',20);
// widget
require_once ( dirname(__FILE__) . '/widget/work_list2.php' );
require_once ( dirname(__FILE__) . '/widget/tab_post_list2.php' );
require_once ( dirname(__FILE__) . '/widget/styled_post_list2.php' );
require_once ( dirname(__FILE__) . '/widget/google_search2.php' );
require_once ( dirname(__FILE__) . '/widget/category_list2.php' );
require_once ( dirname(__FILE__) . '/widget/archive_dropdown2.php' );
require_once ( dirname(__FILE__) . '/widget/ad2.php' );

そもそも親テーマの「widget」も入れ替えなければならなかったのであまり意味がないですが…

……

このような警告が出てしまうのはWordPressテーマ「UNIQUE」の設計が古いということだと思います。

他にもページ名称に英語を入れると日本語に変換されてしまうという些細な不良があったので、制作元に修正依頼を提出しましたが、次回バージョンアップで対応と返事があって、もう1年になろうとしています。

WordPressテーマTCDは対応が遅いと言わざるを得ません。

昨年アップデートをしておきながら、PHP 5.2+対応のコードが残っているのも不思議です。
このような事ではWordPressのデバッグモードも使っているかどうか疑われます。

本当はテーマを変えてしまいたいのですが、ポートフォリオはまずまずなので、なかなか変えられないでいます。

by T.Y.