(@helgathevikingのおかげで)次の関数を使って カテゴリを除外 /ワードプレスのループから除外します。それは非常にうまく機能します - 選択されたカテゴリの投稿はメインのブログリストページのループから、カテゴリリストページから、そしてアーカイブから除外されます、しかしない最近の投稿からそしてサイドバーの最近のコメントから。このコードのアクションをそれらに対してもどのように拡張できますか?
add_action('pre_get_posts', 'wpa_31553' );
function wpa_31553( $wp_query ) {
//$wp_query is passed by reference. we don't need to return anything. whatever changes made inside this function will automatically effect the global variable
$excluded = array(272); //made it an array in case you need to exclude more than one
// only exclude on the front end
if( !is_admin() ) {
set_query_var('category__not_in', $excluded);
//which is merely the more elegant way to write:
//$wp_query->set('category__not_in', $excluded);
}
}
UPDATE:ちょっとした説明、除外されたカテゴリはカテゴリウィジェットからも消えていません。マウスをクリックしてそれらを開くと、これらのカテゴリからすべての投稿が消えただけです。 Categoriesウィジェットからも消えてほしいのですが。
選択したカテゴリを除外しました Advanced Category Excluder (ACE)プラグインを使って至るところから(Categoriesウィジェット以外から) - ここでは@Brad Daltonコードを助けました。 ACEには除外されたカテゴリを非表示にする独自の最近のコメントウィジェットがありますが、これは404ページのマイナーな問題です。 私は 404 to Start pluginを使ってそれ(404ページ)を私のサイトのホームページにリダイレクトしました。
ご協力ありがとうございました。
UPDATE
Advanced Category Excluderプラグインには特定のカテゴリを除外するユーザロールを選択するオプションがないので、無効にして最近のコメントウィジェットも無効にしました。今のところ必要なカテゴリは除外できません。結論として、唯一の解決策は@helgathevikingと@Brad Dalton関数でした。
原作者は「これは単によりエレガントな書き方である」と言っていることにまったく正しくありません。
set_query_var()
は常に main クエリを上書きしますが、実際には
$wp_query->set( 'category__not_in', $excluded );
...最近の投稿ウィジェットなど、query_posts()
のすべてのインスタンスで機能します。
@TheDeadMedicごとに、コードを調整しました。うまくいけば、今ではすべての管理者以外のクエリで動作します。
add_action('pre_get_posts', 'wpa_136017' );
function wpa_136017( $wp_query ) {
//$wp_query is passed by reference. we don't need to return anything. whatever changes made inside this function will automatically effect the global variable
$excluded = array(272); //made it an array in case you need to exclude more than one
// only exclude on the front end
if( !is_admin() ) {
$wp_query->set('category__not_in', $excluded);
}
}
これは私がカテゴリウィジェットからカテゴリを除外するために使用するものです
function widget_categories_args_filter( $cat_args ) {
$cat_args['exclude'] = array(1,2,3);
return $cat_args;
}
add_filter( 'widget_categories_args', 'widget_categories_args_filter', 10, 1 );
最近の投稿または最近のコメントウィジェットからカテゴリを除外するフィルタはありません。ガイドとしてこの解決策を使用してウィジェットを再構築することができます http://wordpress.org/support/topic/recent-posts-widget-with-category-exclude