WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Как удалить slug из произвольных типов записей?

Здравствуйте, как удалить slug http://site.loc/ blogcard /novaya-zapis-1 из произвольных типов записей?

add_action( 'init', 'register_post_types' );
function register_post_types(){
	register_post_type( 'blogcard', [
		'label'  => null,
		'labels' => [
			'name'               => 'Блог', // основное название для типа записи
			'singular_name'      => 'Блог', // название для одной записи этого типа
			'add_new'            => 'Добавить запись в блог', // для добавления новой записи
			'add_new_item'       => 'Добавление записи в блог', // заголовка у вновь создаваемой записи в админ-панели.
			'edit_item'          => 'Редактирование записи', // для редактирования типа записи
			'new_item'           => 'Новая запись', // текст новой записи
			'view_item'          => 'Смотреть запись', // для просмотра записи этого типа.
			'search_items'       => 'Искать запись в блоге', // для поиска по этим типам записи
			'not_found'          => 'Не найдено', // если в результате поиска ничего не было найдено
			'not_found_in_trash' => 'Не найдено в корзине', // если не было найдено в корзине
			'parent_item_colon'  => '', // для родителей (у древовидных типов)
			'menu_name'          => 'Блог', // название меню
		],
		'description'         => 'Записи для блога',
		'public'              => true,
		// 'publicly_queryable'  => null, // зависит от public
		// 'exclude_from_search' => null, // зависит от public
		// 'show_ui'             => null, // зависит от public
		// 'show_in_nav_menus'   => null, // зависит от public
		'show_in_menu'        => true, // показывать ли в меню адмнки
		// 'show_in_admin_bar'   => null, // зависит от show_in_menu
		'show_in_rest'        => null, // добавить в REST API. C WP 4.7
		'rest_base'           => null, // $post_type. C WP 4.7
		'menu_position'       => 7,
		'menu_icon'           => 'dashicons-welcome-write-blog',
		//'capability_type'   => 'post',
		//'capabilities'      => 'post', // массив дополнительных прав для этого типа записи
		//'map_meta_cap'      => null, // Ставим true чтобы включить дефолтный обработчик специальных прав
		'hierarchical'        => false,
		'supports'            => [ 'title','editor','author','thumbnail','excerpt','custom-fields'], // 'title','editor','author','thumbnail','excerpt','trackbacks','custom-fields','comments','revisions','page-attributes','post-formats'
		'taxonomies'          => [],
		'has_archive'         => false,
		'rewrite'             => true,
		'query_var'           => true,
	] );
}
0
wrwww
2.3 года назад
  • 1
    stepan2278 www.weblancer.net/users/stepanko/?affili...

    https://pressimply.com/blog/rewrite-custom-post-type-to-remove-slug/
    https://wordpress.stackexchange.com/questions/203951/remove-slug-from-custom-post-type-post-urls

    Гуглом пробовали пользоваться/искать?
    Не находило ответы?

    wrwww 2.3 года назад

    для такого есть вы.

    stepan 2.3 года назад

    Вы проверьте код - отпишитесь, работает или нет.
    Если все ок - то отмечайте вопрос решенным.
    Иначе я локально буду смотреть, проверять.

    wrwww 2.3 года назад

    Помог этот код. Спасибо

    / remove cpt slug from permalinks
    function remove_cpt_slug( $post_link, $post, $leavename ) {
    
    	if ( $post->post_type != 'blogcard'// ваша произвольная запись ) {
    		return $post_link;
    	} else {
    		$post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );
    		return $post_link;
    	}
    }
    add_filter( 'post_type_link', 'remove_cpt_slug', 10, 3 );
    
    // instruct wordpress on how to find posts from the new permalinks
    function parse_request_remove_cpt_slug( $query_vars ) {
    
    	// return if admin dashboard
    	if ( is_admin() ) {
    		return $query_vars;
    	}
    
    	// return if pretty permalink isn't enabled
    	if ( ! get_option( 'permalink_structure' ) ) {
    		return $query_vars;
    	}
    
    	$cpt = 'blogcard' // ваша произвольная запись;
    
    	// store post slug value to a variable
    	if ( isset( $query_vars['pagename'] ) ) {
    		$slug = $query_vars['pagename'];
    	} elseif ( isset( $query_vars['name'] ) ) {
    		$slug = $query_vars['name'];
    	} else {
    		global $wp;
    
    		$path = $wp->request;
    
    		// use url path as slug
    		if ( $path && strpos( $path, '/' ) === false ) {
    			$slug = $path;
    		} else {
    			$slug = false;
    		}
    	}
    
    	if ( $slug ) {
    		$post_match = get_page_by_path( $slug, 'OBJECT', $cpt );
    
    		if ( ! is_admin() && $post_match ) {
    
    			// remove any 404 not found error element from the query_vars array because a post match already exists in cpt
    			if ( isset( $query_vars['error'] ) && $query_vars['error'] == 404 ) {
    				unset( $query_vars['error'] );
    			}
    
    			// remove unnecessary elements from the original query_vars array
    			unset( $query_vars['pagename'] );
    
    			// add necessary elements in the the query_vars array
    			$query_vars['post_type'] = $cpt;
    			$query_vars['name'] = $slug;
    			$query_vars[$cpt] = $slug; // this constructs the "cpt=>post_slug" element
    		}
    	}
    
    	return $query_vars;
    }
    add_filter( 'request', "parse_request_remove_cpt_slug" , 1, 1 );
    stepan 2.3 года назад

    Спасибо за ответ.
    Другим это может пригодится, когда столкнуться с подобной проблемой.

    Йван 8 дней назад

    Спасибо! Пригодилось!

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация