Osclassの初期エラーの修正方法

Osclassの初期エラー修正

Osclassをなんとかインストールし、ホッと一息つきながら管理画面を開いてみると…

いきなりPHPが警告を出しています。「広告」のページです。

何も設定を変えていませんし、とくにファイルを編集したわけでもありません。それなのに初期状態でこんなにも派手に警告を出されたら、精神的にかなりきます。よくもこのような状態でリリースしたな、と色々と考えてしまいます。

自分で使う分には我慢できるかもしれませんが、お客様に納品したサイトがこのような状態になったら、確実にクレームがきます。

そんなわけで、Osclassに潜んでいる初期エラーを改善する方法を紹介します。

スポンサーリンク

コアファイルの編集

oc-admin/items.php

表示されているエラーを見ると、

Warning: sprintf(): (略)oc-admin\items.php on line 823
Warning: sprintf(): (略)oc-admin\items.php on line 823
Warning: sprintf(): (略)oc-admin\items.php on line 824
Warning: sprintf(): (略)oc-admin\items.php on line 825
Warning: sprintf(): (略)oc-admin\items.php on line 826
Warning: sprintf(): (略)oc-admin\items.php on line 827
Warning: sprintf(): (略)oc-admin\items.php on line 828
Warning: sprintf(): (略)oc-admin\items.php on line 829
Warning: sprintf(): (略)oc-admin\items.php on line 830

となっています。そんなわけで、編集するファイルは、「oc-admin/items.php」です。バージョンにより、行番号が異なる可能性がありますが、

(修正前)

array('value' => 'delete_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %s the selected listings?'), strtolower(__('Delete'))), 'label' => __('Delete')),
array('value' => 'activate_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %s the selected listings?'), strtolower(__('Activate'))), 'label' => __('Activate')),
array('value' => 'deactivate_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %s the selected listings?'), strtolower(__('Deactivate'))), 'label' => __('Deactivate')),
array('value' => 'disable_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %s the selected listings?'), strtolower(__('Block'))), 'label' => __('Block')),
array('value' => 'enable_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %s the selected listings?'), strtolower(__('Unblock'))), 'label' => __('Unblock')),
array('value' => 'premium_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %s the selected listings?'), strtolower(__('Mark as premium'))), 'label' => __('Mark as premium')),
array('value' => 'depremium_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %s the selected listings?'), strtolower(__('Unmark as premium'))), 'label' => __('Unmark as premium')),
array('value' => 'spam_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %s the selected listings?'), strtolower(__('Mark as spam'))), 'label' => __('Mark as spam')),
array('value' => 'despam_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %s the selected listings?'), strtolower(__('Unmark as spam'))), 'label' => __('Unmark as spam'))

この部分を、

(修正後)

array('value' => '', 'data-dialog-content' => '', 'label' => __('Bulk actions')),
array('value' => 'delete_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %%s the selected listings?'), strtolower(__('Delete'))), 'label' => __('Delete')),
array('value' => 'activate_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %%s the selected listings?'), strtolower(__('Activate'))), 'label' => __('Activate')),
array('value' => 'deactivate_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %%s the selected listings?'), strtolower(__('Deactivate'))), 'label' => __('Deactivate')),
array('value' => 'disable_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %%s the selected listings?'), strtolower(__('Block'))), 'label' => __('Block')),
array('value' => 'enable_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %%s the selected listings?'), strtolower(__('Unblock'))), 'label' => __('Unblock')),
array('value' => 'premium_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %%s the selected listings?'), strtolower(__('Mark as premium'))), 'label' => __('Mark as premium')),
array('value' => 'depremium_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %%s the selected listings?'), strtolower(__('Unmark as premium'))), 'label' => __('Unmark as premium')),
array('value' => 'spam_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %%s the selected listings?'), strtolower(__('Mark as spam'))), 'label' => __('Mark as spam')),
array('value' => 'despam_all', 'data-dialog-content' => sprintf(__('Are you sure you want to %%s the selected listings?'), strtolower(__('Unmark as spam'))), 'label' => __('Unmark as spam'))

このようにします。どこが変わっているかというと、sprintfのカッコ内の「%s」を「%%s」に変更している部分です。「%」を一つ足してあげることで、エラーが消えます。

oc-includes/osclass/ItemActions.php

また、PHPのバージョンによっては、「oc-includes/osclass/ItemActions.php」の記述に対して警告が出る場合があります。

35行目の、
(修正前)

$_description   = $description[$k];

の部分を、

(修正後)

if (isset($description[$k])) {
  $_description   = $description[$k];
}

このように編集すればOKです。

まとめ

PHPの警告は、正常に動作することがほとんどですが、見栄えがとても悪いです。もちろん、正常に動作しなくなる可能性もあります。

Osclassの初期状態に潜んでいるエラーですので、必ず修正するようにしましょう!

コメント

  1. 渋木 より:

    osclassを導入、日本語化する過程でこちらにたどり着き、参考にさせていただいております。
    xamppの最新版にて構築しているのでmariaDB独自のものかも知れませんが、調べても同じエラーに遭遇しているという記事を見つけられません。
    デフォルトテーマの日本語化をまでを終えています。
    新規ユーザーを作成して、そのアカウントでログインすると、一番上に【ユーザー名】さん、こんにちわ。と表示されますよね。
    これが…【ユーザー名】さん!、こんにちわ。と、ユーザー名の後にエクスクラメーションがついてしまいます。
    同様な状況になったことはありますでしょうか?

    • koshio より:

      渋木さま
      コメントをいただき、ありがとうございます。

      日本語化を終えているとのことですが、テーマに付随しているPOファイルの編集はされましたか?
      おそらくは、POファイルの編集で

      【ユーザー名】さん!、こんにちわ。

      の部分の編集ができるかと思います。

      編集方法は、
      https://web-shizuoka.net/archives/1754
      この記事で紹介しております。
      (簡易的な説明ですが。。)

      よろしくお願いいたします。

      • 渋木 より:

        管理人様
        早速のご回答ありがとうございました。
        poファイルの方は編集していないんです。
        poeditで確認してみても、該当箇所にエクスクラメーションはありませんでした。
        他にも随所に半角のエクスクラメーションが散見できるので、XamppのmariaDBが怪しいと思っています。
        どうも自分の環境だけみたいなので、一度レンサバ借りて試してみたいと思います。
        osclass、なんだかいろいろ惜しいですよね…(^^;)

        • koshio より:

          渋木 さま
          失礼いたしました。poファイルではありませんね。
          テーマ側のファイルに「!」が記述されておりました。

          おそらくは、header.phpの49行目、

          <span><?php echo sprintf(__('Hi %s', 'bender'), osc_logged_user_name() . '!'); ?>  &middot;</span>

          の該当箇所を編集すれば解決します。