ホームページ  >  記事  >  CMS チュートリアル  >  WordPress がテーマ開発にフックを使用するときに無限ループを回避する方法

WordPress がテーマ開発にフックを使用するときに無限ループを回避する方法

藏色散人
藏色散人転載
2021-04-30 10:07:151922ブラウズ

WordPress の次のチュートリアル コラムでは、WordPress がテーマ開発にフックを使用するときに無限ループを回避する方法を紹介します。

WordPress がテーマ開発にフックを使用するときに無限ループを回避する方法

#WordPress はテーマ開発にフックを使用するときに無限ループを回避します


たとえば、記事を保存するときに、save_post フックに関数をハングする必要があります。この関数の目的は、記事のタイトルを変更し、その前に著者の名前を追加することです。記事のタイトル。wp_update_post 関数を呼び出してこの変更を表示します。サンプルコードは以下のとおりです。
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 の開発中に無限ループの問題が発生した場合は、無限ループの問題を引き起こすことなく必要な機能を実現できるように、上記のコードを参照して修正するとよいでしょう。

以上がWordPress がテーマ開発にフックを使用するときに無限ループを回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。