add_action('save_post',?'wprs_update_post'); function?wprs_update_post($post_id) { ????$title?=?get_the_title($post_id); ????$title?=?"一刀:"?.?$title; ????$args?=?[ ????????'ID'?????????=>?$post_id, ????????'post_title'?=>?$title, ????]; ???? ????wp_update_post($args); }
上記のコードでは、wp_update_post 関數(shù)の呼び出しプロセス中に「save_post」フックが発生します。「save_post」フックを通じて、wp_update_post 関數(shù)が呼び出されます。この関數(shù)では、「save_post」が再度実行されます。 。 針。その結果、プログラムは休むことなく実行され続けました。
経験豊富なプログラマはこの問題を簡単に発見できるかもしれませんが、コンピュータはこれが無限ループであることを認識していません。結局のところ、コンピュータはただの無知な機械であるため、コンピュータを責めることはできません。私たちにできることは、開発プロセス中に無限ループの発生を避けるためにできる限り注意を払うことです。
それでは、WordPress のこの無限ループを解決するにはどうすればよいでしょうか?実際、その方法は非常に簡単です。
WordPress の無限ループを回避する方法
まだ上記のコードですが、少し変更するだけで、この無限ループを完全に回避できます。以下は修正コードですが、上記の無限ループコードと比べると追加したのは2行だけです。
add_action('save_post',?'wprs_update_post'); function?wprs_update_post($post_id) { ???//?獲取文章標題并在文章標題前面加上作者 ????$title?=?get_the_title($post_id); ????$title?=?"一刀:"?.?$title; ????$args?=?[ ????????'ID'?????????=>?$post_id, ????????'post_title'?=>?$title, ????]; ???? ????//?更新文章 ????remove_action('save_post',?'wprs_update_post'); ????wp_update_post($args); ????add_action('save_post',?'wprs_update_post'); }
原理は非常に単純で、「wp_update_post」関數(shù)を?qū)g行する前に、まず「save_post」フックでハングして無限ループを引き起こす関數(shù)をアンインストールします。 「wprs_update_post」関數(shù)。記事を更新した後、以降の使用のためにこのフックをマウントします。
WordPress の開発中に無限ループの問題が発生した場合は、無限ループの問題を引き起こすことなく必要な機能を?qū)g現(xiàn)できるように、上記のコードを參照して修正するとよいでしょう。