web-dev-qa-db-ja.com

The_content()をフィルタリングしてテンプレートからコンテンツを含める方法

1つのページでthe_content()をフィルタリングしようとしていますが、無限ループになっているようです。これを修正する方法を知りたいです。 the_content()をオーバーライドしたいです。

プラグインから単一ページのコンテンツを上書きする他の方法はありますか?

add_filter( 'the_content', 'change_single_content' );
function change_single_content($content){
    global $post;

    if ( 'my-CPT' == get_post_type() && is_single() ){
        ob_start();
        include my_plugin_theme('single-template.php'); //include single template content
        return ob_get_clean();
    }

    return $content;
}
1
user1983017

single-template.phpthe_contentを使っていると思います。今何が起こるか考えてみましょう:

  1. あなたのフィルタはsingle-template.phpをロードさせます
  2. single-template.phpthe_contentを使用します
  3. single-template.phpは再びロードされます
  4. これはthe_contentを使用しています
  5. これはsingle-template.phpをロードします
  6. これはthe_contentを使用しています
  7. ...

あなたの質問は細部については軽いので、私はそれをどのように修正するかについて完全に確信がありません。コードの大部分が何をしているのか、またはあなたの最終的な目標が何であるのかを判断するのは難しいですが、条件付きでフィルタを削除するのと同じくらい簡単かもしれません。

add_filter( 'the_content', 'change_single_content' );
function change_single_content($content){
    global $post;

    if ( 'my-CPT' == get_post_type() && is_single() ){
        remove_filter( 'the_content', 'change_single_content' ); // this !!
        ob_start();
        include my_plugin_theme('single-template.php'); //include single template content
        return ob_get_clean();
    }

    return $content;
}

私はまた、あなたがしていることがあなたがやろうとしていることをするのに間違った方法であるか、少なくとも不適切な方法であることを確信しています。それを証明することはできませんが、私のクモの感覚はひどいものを痛感しています。

2
s_ha_dum
add_filter( 'the_content', 'filter_content' );
function filter_content( $content ){
    if ( is_single() ){
        $new_content = str_replace( 'for', 'FOR', $content );
        return $new_content;
    }
    else
    {
        return $content;
    }
}

これを試して。私は単一の投稿でthe_contentを置き換えてみました。 is_single()条件のため、置き換えられていますが、インデックスページにはありません。

あなたはあなたの必要に合ったそれを微調整することができます。

あなたのコードの問題はあなたが$contentをパラメータとして受け入れてob_get_clean()を返すことです。このシナリオでは、調整後に$contentを返す必要があります。

上記のコードのように、私は$contentを受け入れ、それを微調整し、そして$new_contentを返しました。

0
Sudeep K Rana