0

私はこれを行う方法をWordPressで見つけました:

「news-sub」というサブカテゴリの下に何かを投稿するとします。このサブカテゴリの親カテゴリは「news」です。間違いなく、ワードプレスの投稿は、ニュースサブのカテゴリで投稿するように選択した場合でも、ニュースとニュースサブの両方で投稿されます。サブカテゴリのみに投稿するように選択した場合にのみ、サブカテゴリに投稿を投稿する方法を見つけました。これがfunctions.phpに挿入するコードです:

add_action( 'pre_get_posts', 'my_post_queries' );
function my_post_queries( $query ) {
  // not an admin page and is the main query
  if (!is_admin() && $query->is_main_query()){
    if(is_category()){
      add_action('posts_where', 'current_category_only');
    }
  }
}

function current_category_only($where) {
  $current_cat = get_query_var('cat');
  if($current_cat){
    global $wpdb;
    return " AND ( $wpdb->term_relationships.term_taxonomy_id IN ($current_cat) ) 
    AND $wpdb->posts.post_type = 'post' AND ($wpdb->posts.post_status = 'publish'
    OR  $wpdb->posts.post_status = 'private')";
  }
  return $where;
}

このコードは素晴らしい働きをします。ただし、プラグインでは機能しません。たとえば...選択したカテゴリのサムネイルとタイトルを投稿するプラグインがあります。「news」カテゴリのみを表示するように選択したとします。「news-sub」カテゴリのすぐ下に何かを投稿した場合、前述の機能コードに関係なく、プラグインを介して表示されます。関数コードをコピーしてプラグインに貼り付けてみましたが、うまくいきませんでした。:(

では、この関数をカテゴリを表示するプラグインでどのように機能させるのでしょうか?変更してfunctions.phpファイルに残しますか、変更してプラグインファイルにコピーして貼り付けますか、それともどのように変更しますか?どんな助けでも大歓迎です!:)

4

1 に答える 1

1

あなたが説明している動作は絶対に期待されています。カテゴリは階層的であるため、親カテゴリにはサブカテゴリとその投稿が含まれている必要があります。

posts_whereフィルターは、動作をタグのように変更しようとしています。ただし、次のような一部の関数get_posts() はこれらのフィルターを実行しません

投稿を取得する特定の関数はフィルターを実行しないため、添付した posts_where フィルター関数はクエリを変更しません。これを克服するには、関数に渡される引数配列で、suppress_filters を false に設定します。次のコード サンプルは、これを示しています。

$posts = get_posts( array( 'suppress_filters' => FALSE ) );

フィルターが監視されるかどうかはプラグイン コードに依存するため、カテゴリ ロジックをきれいに書き直す方法はありません。必要と思われる非階層的なセマンティクスにはタグを使用する方がよい場合があります。または、カスタム分類法を見てください。

さまざまなアイテムをあらゆる種類の方法でグループ化するための非常に強力な方法です。

于 2012-12-01T01:31:42.623 に答える