从自定义帖子类型循环/存档中排除类别 [英] Exclude Category from Custom Post Type Loop / Archive

查看:65
本文介绍了从自定义帖子类型循环/存档中排除类别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在阅读有关如何执行此操作的帖子,但似乎没有任何意义或可行的方法。我在我的functions.php文件中创建了一个自定义帖子类型(研究)和一个自定义分类法(分类)。我也有一个针对我的帖子类型的自定义存档页面(archive-research.php)。

I've been reading through posts on how to do this but none seem to make sense or work. I have created a custom post type (research) in my functions.php file and a custom taxonomy (classifications). I also have a custom archive page (archive-research.php) for my post type.

我有一个类别(分类),称为 oldresearch,我想从自定义存档模板中排除。

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

以下是我的自定义帖子类型代码。有人可以帮助我,让我知道排除代码的去向。

Below is my custom post type code. Could someone please help me and let me know where the exclusion code needs to 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 );




?>


推荐答案

您可以使用 pre_get_posts 过滤器,用于更改特定post_type的查询。这不是完成任务的唯一方法,但我认为这是最简单的

You can use the pre_get_posts filter in your functions.php in order to alter the query for a specific post_type. This is not the only way to achieve the task,but in my opinion it is quite easiest

更新

您需要从查询中排除自定义分类术语,因此,我们必须设置 tax_query 对象,因此:

You need to exclude a custom taxonomy term from your query so, we have to set a tax_query object, so:

示例:

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 it helps! Let me know if you get stuck.

这篇关于从自定义帖子类型循环/存档中排除类别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆