{"id":33361,"date":"2010-06-07T15:04:47","date_gmt":"2010-06-07T19:04:47","guid":{"rendered":"http:\/\/wpmu.org\/?p=33361"},"modified":"2012-10-02T23:36:25","modified_gmt":"2012-10-03T03:36:25","slug":"daily-tip-hack-the-wordpress-loop-to-exclude-subcategories","status":"publish","type":"post","link":"https:\/\/wpmudev.com\/blog\/daily-tip-hack-the-wordpress-loop-to-exclude-subcategories\/","title":{"rendered":"Hack the WordPress Loop to Exclude Subcategories"},"content":{"rendered":"<p>The WordPress loop by default includes child categories of each parent category. Most of the time this is not a problem. However, if you&#8217;re trying to customize the loop to include only parent categories, then you&#8217;ll need a little bit of help.<\/p>\n<p>I found this function over at <a href=\"http:\/\/wpengineer.com\/exclude-subcategories-in-a-loop\/\" rel=\"noopener\" target=\"_blank\">WPEngineer.com<\/a>. Simply drop it into your theme&#8217;s functions.php file and your loop will automatically exclude subcategories:<\/p>\n<pre class=\" prettyprinted\"><span class=\"kwd\">if<\/span> <span class=\"pun\">(<\/span> <span class=\"pun\">!<\/span><span class=\"pln\">function_exists<\/span><span class=\"pun\">(<\/span><span class=\"str\">'fb_filter_child_cats'<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span>\r\n\t<span class=\"kwd\">function<\/span><span class=\"pln\"> fb_filter_child_cats<\/span><span class=\"pun\">(<\/span><span class=\"pln\"> $cats <\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span>\r\n\t\t<span class=\"kwd\">global<\/span><span class=\"pln\"> $wp_query<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> $wpdb<\/span><span class=\"pun\">;<\/span>\r\n\t\t<span class=\"kwd\">if<\/span> <span class=\"pun\">(<\/span><span class=\"pln\"> is_category<\/span><span class=\"pun\">()<\/span> <span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span>\r\n\t\t\t<span class=\"com\">\/\/ get children ID's<\/span>\r\n\t\t\t<span class=\"kwd\">if<\/span> <span class=\"pun\">(<\/span><span class=\"pln\"> $excludes <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> get_categories<\/span><span class=\"pun\">(<\/span> <span class=\"str\">\"child_of=\"<\/span> <span class=\"pun\">.<\/span><span class=\"pln\"> $wp_query<\/span><span class=\"pun\">-&gt;<\/span><span class=\"kwd\">get<\/span><span class=\"pun\">(<\/span><span class=\"str\">'cat'<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">)<\/span> <span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span>\r\n\t\t\t\t<span class=\"com\">\/\/ set array with ID's<\/span>\r\n\t\t\t\t<span class=\"kwd\">foreach<\/span> <span class=\"pun\">(<\/span><span class=\"pln\"> $excludes <\/span><span class=\"kwd\">as<\/span><span class=\"pln\"> $key <\/span><span class=\"pun\">=&gt;<\/span><span class=\"pln\"> $value <\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n\t\t\t\t\t$exclude<\/span><span class=\"pun\">[]<\/span> <span class=\"pun\">=<\/span><span class=\"pln\"> $value<\/span><span class=\"pun\">-&gt;<\/span><span class=\"pln\">cat_ID<\/span><span class=\"pun\">;<\/span>\r\n\t\t\t\t<span class=\"pun\">}<\/span>\r\n\t\t\t<span class=\"pun\">}<\/span>\r\n\t\t\t<span class=\"com\">\/\/ remove child cats<\/span>\r\n\t\t\t<span class=\"kwd\">if<\/span> <span class=\"pun\">(<\/span><span class=\"pln\"> isset<\/span><span class=\"pun\">(<\/span><span class=\"pln\">$exclude<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">&amp;&amp;<\/span><span class=\"pln\"> is_array<\/span><span class=\"pun\">(<\/span><span class=\"pln\">$exclude<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n\t\t\t\t$cats <\/span><span class=\"pun\">.=<\/span> <span class=\"str\">\" AND \"<\/span> <span class=\"pun\">.<\/span><span class=\"pln\"> $wpdb<\/span><span class=\"pun\">-&gt;<\/span><span class=\"pln\">prefix <\/span><span class=\"pun\">.<\/span> <span class=\"str\">\"term_relationships.term_taxonomy_id NOT IN (\"<\/span> <span class=\"pun\">.<\/span><span class=\"pln\"> implode<\/span><span class=\"pun\">(<\/span><span class=\"str\">\",\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> $exclude<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">.<\/span> <span class=\"str\">\") \"<\/span><span class=\"pun\">;<\/span>\r\n\t\t\t<span class=\"pun\">}<\/span>\r\n\t\t<span class=\"pun\">}<\/span>\r\n\t\t<span class=\"kwd\">return<\/span><span class=\"pln\"> $cats<\/span><span class=\"pun\">;<\/span>\r\n\t<span class=\"pun\">}<\/span>\r\n\t<span class=\"kwd\">if<\/span> <span class=\"pun\">(<\/span> <span class=\"pun\">!<\/span><span class=\"pln\">is_admin<\/span><span class=\"pun\">()<\/span> <span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n\t\tadd_filter<\/span><span class=\"pun\">(<\/span> <span class=\"str\">'posts_where'<\/span><span class=\"pun\">,<\/span> <span class=\"str\">'fb_filter_child_cats'<\/span> <span class=\"pun\">);<\/span>\r\n\t<span class=\"pun\">}<\/span>\r\n<span class=\"pun\">}<\/span><\/pre>\n<p>Tested on WP 3.1.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The WordPress loop by default includes child categories of each parent category. Most of the time this is not a problem. However, if you&#8217;re trying to customize the loop to include only parent categories, then you&#8217;ll need a little bit of help. I found this function over at WPEngineer.com. Simply drop it into your theme&#8217;s [&hellip;]<\/p>\n","protected":false},"author":4099,"featured_media":205688,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"blog_reading_time":"","wds_primary_category":0,"wds_primary_tutorials_categories":0,"footnotes":""},"categories":[1,557,263],"tags":[152],"tutorials_categories":[],"class_list":["post-33361","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news-community","category-development","category-tutorials","tag-categories"],"_links":{"self":[{"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/posts\/33361","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/users\/4099"}],"replies":[{"embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/comments?post=33361"}],"version-history":[{"count":5,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/posts\/33361\/revisions"}],"predecessor-version":[{"id":182989,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/posts\/33361\/revisions\/182989"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/media\/205688"}],"wp:attachment":[{"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/media?parent=33361"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/categories?post=33361"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/tags?post=33361"},{"taxonomy":"tutorials_categories","embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/tutorials_categories?post=33361"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}