Исключить категорию из пользовательского цикла типа записи / архива
Я читал сообщения о том, как это сделать, но ни одно из них не имеет смысла и не работает. Я создал пользовательский тип сообщения (исследование) в своих функциях.php файл и пользовательская таксономия (классификации). У меня также есть своя страница архива (archive-research.php) для моего типа сообщения.
У меня есть категория (классификация) под названием "oldresearch", которую я хотел бы исключить из пользовательского шаблона архива.
Ниже приведен мой пользовательский код типа сообщения. Кто-нибудь, пожалуйста, помогите мне и позвольте мне ... знайте, куда должен идти код исключения.
<?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 );
?>
1 ответ:
Вы можете использовать
pre_get_posts
фильтр в ваших функциях.php для того, чтобы изменить запрос для конкретного post_type. Это не единственный способ достичь поставленной задачи, но, на мой взгляд, он достаточно простОбновить
Вам нужно исключить пользовательский термин таксономии из вашего запроса, поэтому мы должны установить
tax_query
объект, таким образом:Пример:
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 ); } } }
Надеюсь, это поможет! Дай мне знать, если застрянешь.