メンバーメニュー

ようこそ、ゲストさん

トップ > カテゴリ一覧 > WPblog > Deprecated: Non-static method WPblogAdProp::setAd1()というエラー?表示について

質問

  • Deprecated: Non-static method WPblogAdProp::setAd1()というエラー?表示について
  • 本文:

    テーマをアップグレード(バージョンアップというのでしょうか。更新というのでしょうか)したところ、

    管理画面とサイト自体の一番上部に以下のようなエラー?メッセージが表示されてしまいました。


    --------------------------------------------------------------

    Deprecated: Non-static method WPblogAdProp::setAd1() should not be called statically in /home/izu/izu.wpblog.jp/public_html/wp-content/mu-plugins/wp-wpblog-ads.php on line 16


    --------------------------------------------------------------


    FTPツールで「mu-plugins」というフォルダを見てみましたが、
    上記の「wpblog-ads.php」というテンプレート?自体が存在しませんでした。

    mu-pluginsというフォルダはありますが…。




    一応、上記の英語を翻訳してみたところ、
    以下のように翻訳されました。



    --------------------------------------------------------------

    非推奨:非静的メソッドWPblogAdProp :: setAd1()は、/home/izu/izu.wpblog.jp/public_html/wp-content/mu-plugins/wp-wpblog-ads.php 16行目で静的に呼び出されるべきではありません。


    --------------------------------------------------------------



    非推奨とか非静的メソッドとかよくわからないのですが、
    ただ、wpblog-ads.phpというテンプレートの16行目に何か問題があるという感じはわかりました。



    この上記のメッセージはどのような対処方法があるのでしょうか。

    また、
    どのような意味なのか教えて頂けますでしょうか。


    現在は、
    上記のメッセージが表示されてしまったので、テーマをアップグレード?せずにこれまでの正常に表示されていたバージョンのテーマを使用しています。



    お忙しいところ誠に恐縮ですが、
    上記のメッセージがどのような意味合いでどのように解決したら良いのか、
    何卒ご教授お願い申しあげます。



  • 緊急度:緊急投稿者:universeさん投稿時間:2017/04/18 20:39
質問に対する回答は締め切られました

回答 No.5964

  • この回答がベストアンサーです

  • 本文:


    > FTPツールで再度確認しましたがやはりwp-wpblog-ads.php自体がmu-pluginsのフォルダ内に見当たりません。

    たぶん、FTPサーバーの ls コマンドに細工がしてあって、特定のファイルはリストに出てこないようになっているのだと思いますけど...
    ( 同じような細工は、plugins で終わる名前のディレクトリが作成できないことにも窺われます)

    ま、wp-contentの上が、普通の方法ではアクセスしにくいようになっているのと同じで、「できにくいようになっていることは、やって欲しくないことだ」と解釈するのが普通だと思うので、やり方が判っていても無暗に公言しないのが節度ある態度かな、と思います。

  • 投稿者:ジョバンニさん 投稿時間:2017/04/19 17:07
質問者からのコメント

ジョバンニ様。
ご回答ありがとうございます。


わかりました。

回答 No.5950

  • 本文:

    エラーが出るテーマの名称などの使用環境を書いた方がいいんじゃないでしょうか。

    無料サーバー「wpblog」のエラーについて
    http://the-money.net/wpblog-error/
    >有料プランにすることで該当プラグインが削除されるかどうかは申し訳ありませんが「wpblog」様のサポートに直接お問合せ下さい。

  • 投稿者:kashaさん 投稿時間:2017/04/18 21:16
質問者からのコメント

kasha様。
ご回答誠にありがとうございます。

テーマ名など未記載で申し訳ありませんでした。

該当URLを教えて頂きましてありがとうございます。


回答 No.5951

  • 本文:

    php7.x になって、文法チェックが以前より厳密になったせいで、警告が多めにでるようになったせいなので、たぶん、phpのバージョンを 5.6.xに落とせば、表示されなくなる(と思う)。

    http://php.net/manual/ja/migration70.deprecated.php

  • 投稿者:ジョバンニさん 投稿時間:2017/04/18 23:59
質問者からのコメント

ジョバンニ様。
いつもありがとうございます。


phpのバージョンを5にしても同様の表示がされてしまいました。

ただ、
設定の「PHPエラー表示設定」にて、

「PHPエラー表示設定」を有効から無効に変更してみたところ、
php5.6.xでもphp7xでも両方において、
メッセージは表示されなくなりました。


エラーメッセージは表示されなくはなったのですが、
これは根本的な解決になっているのでしょうか?





回答 No.5953

  • 本文:

    > これは根本的な解決になっているのでしょうか?

    少し厳密性を無視して書くと、
    たとえば、dog というクラスを、次のように
    class dog {
    public $kind = '犬';
    public $name = '';
    function setName($a){ $this->name=4a; }
    function getName() { return $this->name; }
    function getKind() { return $this->kind; }
    }
    $dog1=new dog(); $dog1->setName('ポチ');
    $dog1=new dog(); $dog1->setName('ジョン');

    としたとき、

    $dog1->getKind() も、$dog2->getKind() も、同じ '犬'を返すので、これは、dog::getKind() という呼び出し方ができるのだけれど、
    $dog1->getName() と、$dog2->getName() はそれぞれ、'ポチ' と 'ジョン' という異なる値を返すので、これを、dog;;getName() という形で呼び出すことはできない。

    getKind()は静的で、getNama()は静的でないわけだけれど、dog::getKind()のような呼び出し方をしたいなら、最初の定義を
    class dog {
    static public $kind = '犬';
    public $name = '';
    function setName($a){ $this->name=4a; }
    function getName() { return $this->name; }
    static public function getKind() { return self::$kind; }
    }
    のように、'static' というキーワード付で定義して、static というキーワード無しで定義された関数を、dog::getKind()のような形で呼び出すのは間違いである、というのが、最初のエラーの内容。

    まあ、間違った使い方に対する警告なんだけれど、状況によっては動いてしまうという種類のものなので、それで問題なく動いているなら気にしなくてもいいのだけれど、バグには違いないので、もとのプログラムを修正しない限り、根本的な解決にはなりません。

    これが、WPblogAdProp::setAd1() が、クラスWPblogAdPropの静的でない関数setad1()を呼び出しているということです。

  • 投稿者:ジョバンニさん 投稿時間:2017/04/19 04:35
質問者からのコメント

ジョバンニ様。ありがとうございます。

具体的に教えて頂きまして感謝いたします。




回答 No.5954

  • 本文:

    要は、mu-plugins/wp-wpblog-ads.php の
    >>>
    function wpblogad_init(){
    // 広告をセットする
    $ad1 = file_get_contents(WP_CONTENT_DIR . '/plugins/wp-wpblog-ads/.wordpress_ad.txt');
    WPblogAdProp::setAd1($ad1); <== ここで警告
    }


    function wpblogad_displayAdwords(){
    $obj = ob_get_contents();
    $obj .= WPblogAdProp::getAd1();
    ob_clean();
    echo $obj;
    }

    class WPblogAdProp{

    ///ad1
    public static $ad1;

    function setAd1($value){ <== ここを修正
    self::$ad1 = $value;
    }

    function getAd1(){ <== ついでにここも。
    return self::$ad1;
    }
    ///ad1
    }
    <<<

    function setAd1($value) を
    static function setAd1($value) に書きなおせ
    ということです。

    ついでに、
    function getAd1() も
    static function getAd1() に書きなおした方がいい。

    ( GPLライセンスだから、書きなおしてもいいのかな??? )

  • 投稿者:ジョバンニさん 投稿時間:2017/04/19 08:46
質問者からのコメント

ジョバンニ様。
いつもお世話になります。

本当にありがとうございます。

具体的な解決方法のコードまでも記載していただいてありがたいの一言です。


ただ、…。


wp-wpblog-ads.phpというテンプレートファイルのディレクトリ?(場所)はFTPツールでアクセス可能なmu-pluginsというフォルダというのはわかるのですが…。

FTPツールで該当フォルダ内を見ても「wp-wpblog-ads.php」というテンプレートが見当たりません。

(FTPツールはFFFTPです)


該当のwp-wpblog-ads.phpは隠しファイル?みたいな感じになっているのでしょうか?

それとも、
私の見当違いで他の場所にあるのでしょうか?


wp-wpblog-ads.phpが見当たらないので、
せっかくジョバンニ様が修正コードを書いてくれたのに確認のしようがありません…。o(´^`)o ウー、



wp-wpblog-ads.phpがわかり次第、ジョバンニ様が教えてくれた以下の部分を変えてみて試してみようかと思っているのですが、

------------------------------------------------------------------------

function setAd1($value) を→static function setAd1($value) に変更修正。


function getAd1() も→static function getAd1() に変更修正。

------------------------------------------------------------------------


FTPツールで再度確認しましたがやはりwp-wpblog-ads.php自体がmu-pluginsのフォルダ内に見当たりません。


wp-wpblog-ads.phpはどこにあるのでしょうか?


回答 No.6020

  • 本文:

    平素はネットオウルをご利用いただき誠にありがとうございます。
    ネットオウル運営チームです。

    本ご質問は一定期間新たな回答がなかったため
    運営チームで締め切らせていただきました。


    ■質問の締め切りについて

    Q&A掲示板はユーザー様同士の交流掲示板です。
    回答がもらえた場合、回答者へお礼コメントをしましょう。

    問題が解決した際にはベストアンサーを選び、
    質問を締め切ってください。


    ■再度のご質問について

    ご質問が未解決の場合、「ワンポイント!」を参考に、
    再度質問してみてください。

    【ワンポイント!】

     メールやFTPの設定がうまくいかない場合、
     ネットオウルIDやサーバーIDなどのお客様情報を公開しない範囲で、
     現在の設定内容を出来るだけ詳しく書いてみましょう。
     設定内容のミスを指摘してもらえるかもしれません。

     エラーが出てうまくいかない場合、
     エラーメッセージの内容を書いてみましょう。
     エラーメッセージにはエラー原因が詳しく書かれていることが多く、
     問題の解決につながる回答が得られるかもしれません。


    ■ベストアンサーについて

    ご質問の締め切りに際して、運営チームにて
    ベストアンサーを選んでおります。

     ※ベストアンサーの回答者様には通常と同様のポイントが
      付与されています。


    --ネットオウル運営チーム--

  • 投稿者:ネットオウル運営 投稿時間:2017/05/03 13:20