2011-07-18 11 views
6

function.phpファイルに追加した次のコードを1つのwordpressカテゴリのみに限定する方法はありますか? Wordpress functions.phpのコードを1つのカテゴリに適用する

<?php remove_filter('the_content', 'wpautop'); ?> 

は、私はこれを試してみましたが、動作していないようでした:

<?php if (in_category('work')) { remove_filter('the_content', 'wpautop'); } ?> 

私はまた、特定のカテゴリテンプレートにコードを直接配置することによって、私は、この問題を解決することを追加する必要がありますが、私は」私の関数ファイルにフィルタを保持することをお勧めします。

ありがとうございます!

+1

カテゴリテンプレートの代わりにsingle.phpに追加する必要があると思います。最良の方法は、すべてのページに適用されるようにヘッダーファイルに追加することです。私はなぜそれがfunctions.phpで動作しないのかわかりません – Tarun

+0

どこがこれを引き起こしていますか? initの前か? – Tarun

答えて

0

あなたのfunctions.phpはあなたのインデックスやカテゴリページのような現在のリクエストを認識していません。あなたがそのIDあなたを持っていたら

$url = explode('?', 'http://'.$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); 
$ID = url_to_postid($url[0]); 

:のfunctions.phpでこのコードを動作させるためには、現在のURLに関連するwp_query機能をアップロードするために、生のサーバVARSを取得し、それらを解析する必要がありますクエリループを実行して、カテゴリに基づいてフィルタをトリガできます。

1

pre_get_postsactionに接続したいと考えています。クエリ文字列が解析された直後に発生します。いくつかの条件文が設定されていますが、すべてではありません。 in_category()がそれらの1つであるかどうかをテストできますが、重要ではないと思います。どうして?あなたが喜んで尋ねました。

フックがクエリオブジェクトを渡します。このオブジェクトは、プロパティがcategory_nameです。あなたのカテゴリを持っているかどうかを確認し、そうであればフィルタを起動するだけです。このようなもの:

function ns_function_name($wpq){ 
    if($wpq->category_name == 'work'){ 
     remove_filter('the_content', 'wpautop'); 
    } 
} 
add_action('pre_get_posts', 'ns_function_name'); 

これは完全にテストされていません。しかし、あなたが何をしているかを知っているように見えるので、あなたを正しい道のりにするには十分であるはずです。

+0

コードにバグがあります "通知:未定義プロパティ:WP_Query :: $ category_name" –

+0

答えは、彼の仕事を達成するためにOPが使用すべきパターンの例です。私はそれがテストされていないことに注意し、is_set()のような他のチェックが最初に行われるはずです。あなたのコードを見ることなく、私は本当にあなたが何をしているのか間違っているのか分かりません。問題が発生した場合は、新しい質問を作成してみてください。また、WPのドキュメントによると、 "pre_get_postsはWP_Queryがセットアップされる前に実行されます"。 – Shelton

関連する問題