如何使WordPress的Archives.php支持自定义文章类型?

导语:叶子在制作一个主题的时候,自定义了文章类型,然后又希望自定义类型的文章能够在Archives.php的循环中出现,那么需要使用过滤器了。

Archives.php

Archives.php仅显示类型“文章”的内容,如果你希望包含自定义文章类型的文章,那么可以加下面的代码添加到functions.php中:

function leaf_add_custom_types( $query ) {
  if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
    $query->set( 'post_type', array(
     'post', 'nav_menu_item', 'your-custom-post-type-here'
		));
	  return $query;
	}
}
add_filter( 'pre_get_posts', 'leaf_add_custom_types' );

自动支持所有的文章类型

如果你希望Archives.php自动支持所有的自定义文章类型,那么可以使用get_post_types来获得,然后设置它。

function leaf_add_custom_post_types_to_query($post_types){
  $added = get_post_types(array( 'public'=>true,'_builtin'=>false));
  foreach($added as $key=>$value){
    $post_types[]=$key;
  }
  return $post_types;
}
function leaf_modify_archive_query( $query ) {
  if( is_category() || is_tag() || is_date() && empty( $query->query_vars['suppress_filters'] ) ) { 
    $post_types = leaf_add_custom_post_types_to_query(array( 'post', 'nav_menu_item'));
    $query->set( 'post_type', $post_types);
    return $query;
  }
}
add_filter( 'pre_get_posts', 'leaf_modify_archive_query' );

搜索结果

如果你希望搜索结果内容中也能自定义文章类型,请包含下面的代码。

function searchAll( $query ) {
	if ( $query->is_search ) {
		$query->set( 'post_type', array( 'post', 'page', 'feed', 'custom_post_type1', 'custom_post_type2'));
	}
	return $query;
}

add_filter( 'the_search_query', 'searchAll' );

结束

你学会了吗?叶子也是从这里学习的:https://css-tricks.com/snippets/wordpress/make-archives-php-include-custom-post-types/

发表评论

邮箱地址不会被公开。 必填项已用*标注