@Helen-Elena

Архивы дат для произвольного типа записи?

есть произвольный тип записи с добавленной к ней таксономией:
add_action( 'init', 'register_newcat_newpost' );
function register_newcat_newpost() {

	register_taxonomy('newcat', array('newpost'), array(
		'label'                 => 'NewCat',

		'description'           => 'Рубрики', // описание таксономии
		'public'                => true,
		'show_in_nav_menus'     => false, // равен аргументу public
		'show_ui'               => true, // равен аргументу public
		'show_tagcloud'         => false, // равен аргументу show_ui
		'hierarchical'          => true,
		'rewrite'               => array('slug'=>'newpost', 'hierarchical'=>false, 'with_front'=>false ),
		'show_admin_column'     => true, // Позволить или нет авто-создание колонки таксономии в таблице ассоциированного типа записи. (с версии 3.5)
	) );

	// тип записи
	register_post_type('newpost', array(
		'label'               => 'NewPost',
		'description'         => '',
		'public'              => true,
		'publicly_queryable'  => true,
		'show_ui'             => true,
		'show_in_rest'        => false,
		'rest_base'           => '',
		'show_in_menu'        => true,
		'exclude_from_search' => false,
		'capability_type'     => 'post',
		'map_meta_cap'        => true,
		'hierarchical'        => false,
		'rewrite'             => array( 'slug'=>'newpost/%newcat%', 'with_front'=>true, 'pages'=>true, 'feeds'=>false ),
		'has_archive'         => 'newpost',
		'query_var'           => true,
		'supports'            => array( 'title','editor','thumbnail','custom-fields','comments','revisions','page-attributes' ),
		'taxonomies'          => array( 'newcat','post_tag' ),
	) );

}

// Отфильтруем ЧПУ произвольного типа
add_filter('post_type_link', 'newpost_permalink', 1, 2);
function newpost_permalink( $permalink, $post ){
	// выходим если это не наш тип записи: без холдера %newcat%
	if( strpos($permalink, '%newcat%') === false )
		return $permalink;

	// Получаем элементы таксы
	$terms = get_the_terms($post, 'newcat');
	// если есть элемент заменим холдер
	if( ! is_wp_error($terms) && !empty($terms) && is_object($terms[0]) )
		$term_slug = array_pop($terms)->slug;
	// элемента нет, а должен быть...
	else
		$term_slug = 'no-newcat';

	return str_replace('%newcat%', $term_slug, $permalink );
}

add_filter('pre_get_posts', 'tag_newpost');
function tag_newpost($query) {
  if( is_tag() ) {
    $post_type = get_query_var('post_type');
    if($post_type)
        $post_type = $post_type;
    else
        $post_type = array('nav_menu_item', 'post', 'newpost');
    $query->set('post_type',$post_type);
    return $query;
    }
}

всё работает замечательно, вид url устраивает (/newpost/newcat/post), понадобилось получить архив для этого типа записи, нашла плагин Custom Post Type Date Archives, получается конфуз, чтобы он заработал нужно 'slug'=>'newpost/%newcat%' убрать, иначе нет архива дат и страница дочерних категорий отображает контент главной страницы произвольного типа, если его убрать url становятся, мягко говоря, некрасивые :(
Может кто сталкивался с данной проблемой, как можно решить данную ситуацию?
  • Вопрос задан
  • 47 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы