古いOpera 8.5の最後のWordpressの神秘的なバグ

情報の検索に4晩費やしました。 その結果、チュートリアルとインターネットを備えたコードを自分でもう一度理解する必要がありました。



企業ブログを立ち上げる準備を進めています。 模範的な子供として、私は公式ウェブサイトから最新バージョンのWordpressをダウンロードして、必要なすべてのセキュリティパッチを含めました。 つい最近、ある種の安定バージョンをリリースしました。 きっと。 うれしいです。 私はテストを始めています。



コメントを追加します。 IEではすべてが問題ありません。 Firefoxではすべてが正常です。 Operaでテストを始めています... ゲストのコメント後、ページは更新されません。 F5キーを押して手動で更新します。 コメントがデータベースに入ったことがわかります。 私の他のブログでは、これはそうではありません(Wordpressの古いバージョンがあります)。



私は掘り始めています。 別のトピックを置きます。 すべて同じです。 別のブログからプラグインのセットを置きました。 変更なし。 Wordpressを分解して再インストールします。 バグは残っています。 他の人のブログでも同じことがわかりますが、特に企業のブログではそうは思わないでしょう。



Yandexを見ています。 なし。 Googleで検索します。 私たちはWordpressサイトを見ています。 まだ7〜8か月間回答されていない膨大な数のバグレポート。 フリーソフトウェア、クリスマスツリー。 一般に、検索では結果が得られませんでした(通常、答えが見つかるまで約20分かかります)。



1つのソフトウェア製品のサポートと開発の経験がありますが、問題は更新されたバージョンにあることを理解しています。 古いWordpressのインストールを確認しました。 すべてがうまくいきました。



始まった。 これで、問題がwp-comments-post.phpファイルの関数の1つにある可能性が高いことがわかりました(コメントを受け入れます)。 まず、古いバージョンのファイルに置き換えようとしています。 まったく動作しません。 このファイルを掘り始めます。 私はプログラマーではありません。誰かのコードを一度理解します。 彼はまずこのようなことをしてから、ユーザーを回答ページにリダイレクトすると思います。



最終的に私はこの設計を見ます:



$ location =(empty($ _ POST ['redirect_to'])?get_permalink($ comment_post_ID):$ _POST ['redirect_to'])。 「#comment-」。 $ comment_id;

$ location = apply_filters( 'comment_post_redirect'、$ location、$ comment);

wp_redirect($の場所);



どうして彼女にしがみついたのか分かりません。 古いWordpressと比較してください:



$ location =(空($ _POST ['redirect_to']))? get_permalink($ comment_post_ID):$ _POST ['redirect_to'];

wp_redirect($の場所);



最初はapply_filtersについてだと思っていました。 コメントアウト。 問題は残っています。 私はこの構成を見ます(?:)約10分間(チュートリアルでは、コロンがどのような操作を行っているのかわかりませんでした)。 私は空のものを探しています。 これは、引数が空でないかどうかをチェックする関数であることがわかります。 ここで、この構造が何らかの条件をチェックし、それに応じてリダイレクトのリンクを形成することを理解し始めます。 そして、「redirect_to」は、サブジェクト内で置き換えることができ、コメントの後にユーザーを送信する場所をエンジンに伝えることができる、ある種の隠しフォームフィールドであることがわかりました。 comments.phpのWordPressテーマでは、最初はそのようなフィールドは見つかりませんでした。



そして、以前のバージョンでは、ブラケットが別の場所にあることに気付きました。 このデザインをブラケットで置き換え、以前のWordPressのデザインに置き換えてみることにしました。 稼いだようです。



私はまだそこに何を台無しにしたのか、なぜそれが機能したのか理解できませんでした。 それは:



$ location =(empty($ _ POST ['redirect_to'])?get_permalink($ comment_post_ID):$ _POST ['redirect_to'])。 「#comment-」。 $ comment_id;



次のようになりました:



$ location =(空($ _POST ['redirect_to']))? get_permalink($ comment_post_ID):$ _POST ['redirect_to']。 「#comment-」。 $ comment_id;



これで「テール」がどこかで消え、ページだけでなく追加されたコメントにリダイレクトされます。 ブラケット構造をさらに別の括弧で囲みます:



$ location =((empty($ _POST ['redirect_to']))?get_permalink($ comment_post_ID):$ _POST ['redirect_to'])。 「#comment-」。 $ comment_id;



IEとFFでは動作し、Operaは再びページの更新を停止しました。 カーソルがハングし、ある種の読み込みが表示され、それだけです。 その結果、私はこのオプションに来ました:



$ location =(空($ _POST ['redirect_to']))? get_permalink($ comment_post_ID):$ _POST ['redirect_to'];

$ location = $ location。 「#comment-」。 $ comment_id;



しかし、それだけではありません!!!



1つ目のコメント、2つ目のコメントを追加します。 そしておっと! バグが戻ってきています。 グリルの前にスラッシュを入れてみます。 追加されています。 次のコメント-ページは再び更新されません。 スラッシュを削除します。 追加されます。 次のコメントは再びバグです。



誰かがそこに問題があったと言うことができますか? それでも、なぜこのバグがOperaとWordpress 2.2のみに現れるのか、私はまだ理解していませんでしたか?



All Articles