Exclude a category from a custom Post Loop / Archive type

I read posts on how to do this, but none of them make sense or work. I created a custom post type (research) in my functions.php file and a custom taxonomy (classifications). I also have a special archive page (archive-research.php) for my post type.

I have a category (classification) called "oldresearch" that I would like to exclude from the user archive template.

Below is my own message type code. Can someone please help me and tell me where the exception code should go.

<?php /* redirect users to front page after login */ function redirect_to_front_page() { global $redirect_to; if (!isset($_GET['redirect_to'])) { $redirect_to = get_option('siteurl'); } } add_action('login_form', 'redirect_to_front_page'); if ( function_exists('register_sidebars') ) register_sidebars(3); add_action('init', 'register_custom_menu'); function register_custom_menu() { register_nav_menu('custom_menu', __('Custom Menu')); } /** Registering Custom Post Type: Research **/ // Register Taxonomy for Research $labels = array( 'name' => 'Classifications', 'singular_name' => 'Classification', 'search_items' => 'Search Classifications', 'popular_items' => 'Popular Classifications', 'all_items' => 'All Classifications', 'parent_item' => 'Parent Classifications', 'edit_item' => 'Edit Classifications', 'update_item' => 'Update Classifications', 'add_new_item' => 'Add New Classification', 'new_item_name' => 'New Classifications', 'separate_items_with_commas' => 'Separate Classifications with commas', 'add_or_remove_items' => 'Add or remove Classifications', 'choose_from_most_used' => 'Choose from most used Classifications' ); $args = array( 'label' => 'Classifications', 'labels' => $labels, 'public' => true, 'hierarchical' => true, 'show_ui' => true, 'show_in_nav_menus' => true, 'args' => array( 'orderby' => 'term_order' ), 'rewrite' => array( 'slug' => 'research/classifications', 'with_front' => false ), 'query_var' => true ); register_taxonomy( 'Classifications', 'Research', $args ); // Register Classification Column add_filter( 'manage_research_posts_columns', 'ilc_cpt_columns' ); add_action('manage_research_posts_custom_column', 'ilc_cpt_custom_column', 10, 2); function ilc_cpt_columns($defaults) { $defaults['Classifications'] = 'Classifications'; return $defaults; } function ilc_cpt_custom_column($column_name, $post_id) { $taxonomy = $column_name; $post_type = get_post_type($post_id); $terms = get_the_terms($post_id, $taxonomy); if ( !empty($terms) ) { foreach ( $terms as $term ) $post_terms[] = "<a href='edit.php?post_type={$post_type}&{$taxonomy}={$term->slug}'> " . esc_html(sanitize_term_field('name', $term->name, $term->term_id, $taxonomy, 'edit')) . "</a>"; echo join( ', ', $post_terms ); } else echo '<i>No terms.</i>'; } // Register Custom Post Type function research_post_type() { $labels = array( 'name' => _x( 'Research', 'Post Type General Name', 'text_domain' ), 'singular_name' => _x( 'Research', 'Post Type Singular Name', 'text_domain' ), 'menu_name' => __( 'Research', 'text_domain' ), 'parent_item_colon' => __( 'Parent Research', 'text_domain' ), 'all_items' => __( 'All Research', 'text_domain' ), 'view_item' => __( 'View Research', 'text_domain' ), 'add_new_item' => __( 'Add New Research', 'text_domain' ), 'add_new' => __( 'New Research', 'text_domain' ), 'edit_item' => __( 'Edit Research', 'text_domain' ), 'update_item' => __( 'Update Research', 'text_domain' ), 'search_items' => __( 'Search Research', 'text_domain' ), 'not_found' => __( 'No Research found', 'text_domain' ), 'not_found_in_trash' => __( 'No Research found in Trash', 'text_domain' ), ); $rewrite = array( 'slug' => 'research', 'with_front' => true, 'rewrite_pages' => true, 'rewrite_feeds' => true, ); $args = array( 'label' => __( 'research', 'text_domain' ), 'description' => __( 'Agri-Gro product research', 'text_domain' ), 'labels' => $labels, 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'trackbacks', 'revisions', 'custom-fields', 'page-attributes', 'post-formats', ), 'taxonomies' => array( 'Classifications', 'post_tag' ), 'hierarchical' => true, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'show_in_admin_bar' => true, 'menu_position' => 20, 'menu_icon' => 'http://www.agrigro.com/news/wp-content/uploads/2013/01/Documents-icon.png', 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'rewrite' => $rewrite, 'capability_type' => 'page', ); register_post_type( 'research', $args ); } // Hook into the 'init' action add_action( 'init', 'research_post_type', 0 ); ?> 
+4
source share
1 answer

You can use the pre_get_posts filter in your functions.php file to modify the request for a specific post_type type. This is not the only way to achieve this goal, but, in my opinion, it is very easy.

UPDATE

You need to exclude the custom taxonomy term from your query, so we must set the tax_query object, therefore:

Example:

 add_action('pre_get_posts','custom_get_posts'); function custom_get_posts($query) { // We are not displaying the posts on admin panel and this is the main query if ( !is_admin() && $query->is_main_query() ) { //Define the tax_query $taxquery = array( array( 'taxonomy' => 'Classifications', // also try lower case, remember a taxonomy name must be in lowercase 'field' => 'slug', 'terms' => array( 'oldresearch' ), 'operator' => 'NOT IN' ) ); // We are displaying a custom posts type archive if( $query->is_post_type_archive( 'research' ) ){ $query->set('tax_query', $taxquery ); } } } 

Hope this helps! Let me know if you are stuck.

+5
source

Source: https://habr.com/ru/post/945271/


All Articles