• 解決済 reconte_tout

    (@reconte_tout)


    リビジョンを無効にするには、remove_action('pre_post_update', 'wp_save_post_revision');をfunction.phpに追加すればよいとどこかのページで見つけて、入れてみました。リビジョンは無効になっていると思います。

    それからしばらくfunction.phpにいろんなものを加えていったのですが、先ほど、RevisionControlというリビジョンを無効にするのではなく回数を制限することのできるプラグインを見つけ、それをインストールした際にremove_action('pre_post_update', 'wp_save_post_revision');を消して、記事を保存してみたところ、次のようなエラーが表示されました。

    Fatal error: Cannot redeclare error() (previously declared in C:\xampp\htdocs\wp-content\themes\test\function.php:51)
    in C:\xampp\htdocs\wp-content\themes\test\function.php on line 51

    RevisionControlを停止してもエラーは消えず、remove_action('pre_post_update', 'wp_save_post_revision');をもう一度書き加えたらエラーは消えました。

    ちなみに、function.phpの51行目は、記事の中から”[URL]”という文字列を見つけてきて、そのURLのページのタイトルをアンカーテキストにしたリンク(<a href="URL">ページのタイトル</a>)に置換するという関数の定義の最初の行(function testblog_url_replace($content){)で(自分で作ったのですが…)、90行目でadd_filter('content_save_pre', 'testblog_url_replace');と書いてフィルターに加えています。またremove_action('pre_post_update', 'wp_save_post_revision');は17行目に書いてあります。

    その関数をそのままここに載せたほうがよいとは思いますが、まだPHPを勉強しはじめたばっかりで自分の書いたコードを公開するのがはずかしいので…
    remove_action('pre_post_update', 'wp_save_post_revision');を消すと表示され、remove_action('pre_post_update', 'wp_save_post_revision');を加えると消えるこのエラーはどんなこと意味で、どんな理由で表示されているのか、予想でも良いので回答をいただけると嬉しいです。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • shokun0803

    (@shokun0803)

    気づいたことをひとつ。
    function.phpではなくてfunctions.phpではないですか?本当に動いてます?

    モデレーター IKEDA Yuriko

    (@lilyfan)

    単純に「error()という名前の関数が二重定義である」と怒られているのですから、51 行目の error 関数を別の名前にしてみたらどうでしょう。

    それでもダメならば、error 関数の周囲で

    if (function_exists('error')) :
    /*関数の定義*/
    endif;

    とやってみてください。

    revision を復活させると二重定義エラーになるのは、function.php がリビジョンごとに呼ばれて2回実行されているとか、そういう理由な気がします。

    トピック投稿者 reconte_tout

    (@reconte_tout)

    shokun0803さん、回答ありがとうございました。

    いろいろと間違いがあったようで、すみません。

    Fatal error: Cannot redeclare test_() (previously declared in C:\xampp\htdocs\wp-content\themes\test\functions.php:51) in C:\xampp\htdocs\wp-content\themes\test\functions.php on line 51

    もう一度エラーの画面を開いてコピーしてきました。文はこうなっています。
    似たエラーがないかと検索していたときに見つけた文をコピーして載せてしまっていたようです。

    lilyfanさん、回答ありがとうございました。

    revision を復活させると二重定義エラーになるのは、function.php がリビジョンごとに呼ばれて2回実行されているとか、そういう理由な気がします。

    とのことですが、functions.phpがリビジョンごとに呼び出されず、今まさに編集していた記事に対してのみ実行されるには、どのようなふうにする必要があるのでしょうか?([URL]をリンクに置換するのは、記事がデータベースに登録される際に実行されるようにしたいです。)

    ※補足
    functions.phpのなかでtest_()という関数は定義していませんでした。何度も付け足ししてすみません。

    よろしくお願いします。

    shokun0803

    (@shokun0803)

    content_save_preがリビジョンを保存するたびに呼び出されるのが問題なんじゃないですかね。
    本文をフィルターするだけならthe_contentとかではだめ?

    トピック投稿者 reconte_tout

    (@reconte_tout)

    回答ありがとうございました。

    非常に疑問に思っていたのですが、実際、「URLからそのページのHTMLを読み込み、その中からタイトルやmetaタグの情報を持ってくる」のに、どの程度の時間や負荷がかかるのでしょうか?

    the_contentは記事を表示するときのフィルタで、記事を表示する度にタイトルを持ってくると、その度にURLからHTMLを読み込み…というのが実行されてしまうのですよね?PHPについてまだ詳しくないので、できるかぎり負荷がかかりそうなことは避けようとおもって、content_save_preを使っているのですが…。

    kurosquare

    (@kurosquare)

    リビジョンを無効にするには、remove_action(‘pre_post_update’, ‘wp_save_post_revision’);をfunction.phpに追加すればよいとどこかのページで見つけて、入れてみました。リビジョンは無効になっていると思います。

    横槍になって申し訳ありませんが、この方法は一般的ではないような気がします。
    リビジョン回数の変更はwp-config.phpにてWP_POST_REVISIONSを定義する方がスマートだと思うのですが。

    回数を3回に制限するなら
    define('WP_POST_REVISIONS', 3);
    のようにも指定できますし。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「リビジョンを無効にするために・・」には新たに返信することはできません。