サポート » 使い方全般 » 投稿内のphpコードを削除する方法知りませんか?

  • 解決済 greon999

    (@greon999)


    プラグインの
    Exec-PHP
    を使って、投稿内にphpコード(<!–?php the_title(); ?–> 等)が書かれたものを、全てショートコードに置換することが目的です。
    (投稿内にphpを使うことが危険なことは承知していますが、知人から依頼されたサイトでそれを知らず使っていたようなので、修正の必要がある状況です。)

    <!–?php
    ?–>
    を見つける方法が分かりません。

    プラグインのSearch Regexを使っても
    <!–?php
    が発見できませんし、phpMyadminで
    UPDATE wp_posts SET post_content=REPLACE(post_content,'<!–?php the_title(); ?–>’,'[thetitle]’);
    などとしても「0 行変更しました。」となるので、置換対象が発見されてないのだと思います。

    苦肉の策として、function.phpに
    function sample($content) {
    $content = str_replace(‘<!–?php the_title(); ?–>’, ‘[thetitle]’, $content);
    }
    add_filter(‘the_content’,’sample’);
    と記述すると、記事全てが消えてしまいます。

    <!–?php
    ?–>
    を認識できれば置換できるのではないかと考えているのですが、その方法を探しても見つからなかったのでこの場でご質問させていただきました。

    通常、投稿内にphpコードがあること自体おかしなケースだと思いますので、難題かもしれませんが、ご存知の方がいらっしゃればお知恵をいただけると幸いです。
    よろしくお願いします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック投稿者 greon999

    (@greon999)

    すいません、補足です。
    記事数は何千とあり、投稿内のphpが大量にあり、手作業では困難なので一括置換したいのです。

    functions.phpに追加したフィルターのコールバック関数は変更した$contentをreturnすればいいんじゃないでしょうか。

    function sample($content) {
    return str_replace(‘<!–?php the_title(); ?–>’, ‘[thetitle]’, $content);
    }

    ハイフンが、違う文字になっていませんか?
    ダッシュ (-) ではなく、ENダッシュ (–) になっていたりしませんか?

    こんにちは

    書かれているフィルターフックは戻り値が必要ですね。

    function sample($content) {
      $content = str_replace('<!–?php the_title(); ?–>', '[thetitle]', $content);
      return $content;
    }
    add_filter('the_content','sample');

    サーチパターン /\<\!–\?php(.*)\?–\>/ でヒットしました

    トピック投稿者 greon999

    (@greon999)

    皆様、たくさんのご回答ありがとうございます。
    結論からですが、以下の方法で解決しました。

    プラグインExec-PHPを停止していたが、一旦有効化に戻す。

    <!–?php the_title(); ?–> → <?php the_title(); ?>
    と戻る。
    (Exec-PHPを停止することで、<?php ?>がコメントアウト扱いで<!–?php ?–>となっていたものが、元通りphpの記述に戻る)

    phpMyadminで
    UPDATE wp_posts SET post_content=REPLACE(post_content,'<?php the_title(); ?>’,'[thetitle]’);
    を実行して、成功。

    Exec-PHPを停止。

    /\<\!–\?php(.*)\?–\>/

    ダッシュ (-) ではなくENダッシュ (–)
    を考慮することでも解決したのかもしれませんが、先述の通り - そのものを無くすことで解決するに至りました。

    functions.phpに追加する方法に関しては、確かにreturnすることで正常に表示されました。
    ただ、投稿内のphp自体を削除する方が安全と考えましたので、置換するに至りました。

    「記事内にphp絡みのコメントアウトがあった場合の一括置換」
    については検証して答えを出さなかった形になりますが、
    「記事内のphpを削除」
    「Exec-PHPを使っていた場合におけるphpバージョンアップの対処 ※」
    については答えを共有できたと思いますので、これにて解決とさせていただければと思います。
    預かり物のサイトゆえ、検証しすぎて破壊してしまってはいけないので、何卒ご理解ください。


    Exec-PHP はphpバージョン7.2以降(未確認ですが7.0でも?)では、サイト自体が表示されなくなる程の影響があります。
    それを回避するには Exec-PHP を停止するしかないのですが、停止すると記事内のphpが自動的にコメントアウトに変換(<?php ?> → <!–?php ?–>)されるのです。
    もちろん、それまで<?php ?>で表示されていたものが表示されなくなるので、ショートコードに置換する必要があったのです。

    トピック投稿者 greon999

    (@greon999)

    ★★訂正★★
    すみません、訂正です。
    <!–?php the_title(); ?–> → <?php the_title(); ?>
    と戻るのは、wordpressバージョン5以上で、プラグインのClassic Editorを有効化した時でした。
    Exec-PHPの有効化の有無に関わらず、wordpressバージョン5以上の標準エディタでは
    <!–?php the_title(); ?–>
    になるようです。

    つまり、プラグインのClassic Editorを適応させれば、先述のやり方で解決できるようです。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「投稿内のphpコードを削除する方法知りませんか?」には新たに返信することはできません。