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 関数の呼び出しプロセス中に「save_post」フックが発生します。「save_post」フックを通じて、wp_update_post 関数が呼び出されます。この関数では、「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」関数を実行する前に、まず「save_post」フックでハングして無限ループを引き起こす関数をアンインストールします。 「wprs_update_post」関数。記事を更新した後、以降の使用のためにこのフックをマウントします。
WordPress の開発中に無限ループの問題が発生した場合は、無限ループの問題を引き起こすことなく必要な機能を実現できるように、上記のコードを参照して修正するとよいでしょう。