Post types & taxonomies

The custom post types and taxonomies Highend registers, their metabox groups, and how to query them.

Highend registers seven custom post types and six custom taxonomies, all conditional on the matching Highend Module being enabled (checked with highend_is_module_enabled(); see Functions & constants). Modules are enabled by default. A module's toggle only takes effect once the master Enable/Disable Highend Modules switch is turned on, so all seven post types register out of the box. None of them declare has_archive or a custom rewrite slug unless noted below, so each uses the default /{post_type}/{post_name}/ permalink structure and has no built-in archive page. Grid/listing pages are built with the dedicated page templates instead (Portfolio Standard, Gallery Standard, and so on).

Portfolio

Registered in includes/portfolio/class-highend-portfolio.php, gated by the hb_module_portfolio option.

Post typeportfolio
Taxonomyportfolio_categories (hierarchical), rewrite slug portfolio_category (filter: highend_portfolio_category_rewrite)
Supportstitle, excerpt, editor, thumbnail, page-attributes, custom-fields, comments
REST API / block editorYes: the only custom post type with show_in_rest enabled
Single templatesingle-portfolio.php (theme root)
Metabox groupsportfolio_settings, portfolio_layout_settings (portfolio only); general_settings, background_settings, misc_settings (shared with post/page/team/faq)
$portfolio_items = new WP_Query( array(
	'post_type'      => 'portfolio',
	'posts_per_page' => 12,
	'tax_query'      => array(
		array(
			'taxonomy' => 'portfolio_categories',
			'field'    => 'slug',
			'terms'    => 'branding',
		),
	),
) );

Registered in includes/gallery/class-highend-gallery.php, gated by hb_module_gallery.

Post typegallery
Taxonomygallery_categories (hierarchical), rewrite slug gallery_category (filter: highend_gallery_category_rewrite)
Supportstitle, editor, thumbnail, page-attributes, custom-fields, comments
REST API / block editorNo: show_in_rest isn't set for this post type (only its taxonomy is)
Single templatetemplate-parts/single/single-gallery.php, loaded via get_template_part( 'template-parts/single/single', 'gallery' )
Metabox groupsgallery_settings (gallery only); no general_settings/background_settings/misc_settings (those aren't attached to gallery)
$gallery_items = new WP_Query( array(
	'post_type'      => 'gallery',
	'posts_per_page' => -1,
	'orderby'        => 'menu_order',
	'order'          => 'ASC',
) );

Team members

Registered in includes/core/class-highend-theme-setup.php, gated by hb_module_team_members.

Post typeteam
Taxonomyteam_categories (hierarchical), rewrite slug team_member_category (filter: highend_team_member_category_rewrite)
Supportseditor, title, excerpt, thumbnail, page-attributes
Single templatesingle-team.php (theme root)
Metabox groupsteam_layout_settings, team_member_settings (team only); featured_section (shared with page); general_settings, background_settings, misc_settings (shared with post/page/portfolio/faq)
$team_members = new WP_Query( array(
	'post_type'      => 'team',
	'posts_per_page' => -1,
	'orderby'        => 'menu_order',
	'order'          => 'ASC',
) );

FAQ

Registered in includes/core/class-highend-theme-setup.php, gated by hb_module_faq.

Post typefaq
Taxonomyfaq_categories (hierarchical), rewrite slug faq_category (filter: highend_faq_category_rewrite)
Supportstitle, editor, page-attributes, custom-fields, comments
Single templatetemplate-parts/single/single-faq.php, loaded via get_template_part( 'template-parts/single/single', 'faq' )
Metabox groupsgeneral_settings, background_settings, misc_settings (shared with post/page/team/portfolio)
$faqs = new WP_Query( array(
	'post_type'      => 'faq',
	'posts_per_page' => -1,
	'tax_query'      => array(
		array(
			'taxonomy' => 'faq_categories',
			'field'    => 'slug',
			'terms'    => 'billing',
		),
	),
) );

Testimonials

Registered in includes/core/class-highend-theme-setup.php, gated by hb_module_testimonials.

Post typehb_testimonials
Taxonomytestimonial_categories (hierarchical), rewrite slug testimonial_category (filter: highend_testimonial_category_rewrite)
Supportstitle, page-attributes, custom-fields, editor, comments
Single templatetemplate-parts/single/single-hb_testimonials.php
Metabox groupstestimonial_type_settings (testimonials only)
Public, but not linked or searched

hb_testimonials is registered public => true (so single URLs resolve normally), but query_var => false, exclude_from_search => true, and show_in_nav_menus => false. It won't appear in search results, custom-menu post-type pickers, or answer a ?hb_testimonials= query var. Query it explicitly with 'post_type' => 'hb_testimonials', as below.

$testimonials = new WP_Query( array(
	'post_type'      => 'hb_testimonials',
	'posts_per_page' => 6,
) );

Clients

Registered in includes/core/class-highend-theme-setup.php, gated by hb_module_clients.

Post typeclients
Taxonomyclient_categories (hierarchical), rewrite slug client_category (filter: highend_client_category_rewrite)
Supportstitle, page-attributes
Metabox groupsclients_settings (clients only)
No public single page

clients is registered publicly_queryable => false. There's no front-end single template for it at all, and visiting its permalink returns a 404. It exists purely as data for the Client Carousel/Logos elements; query it the same way ('post_type' => 'clients') and read its meta, but don't link to get_permalink() for it.

Pricing tables

Registered in includes/core/class-highend-theme-setup.php, gated by hb_module_pricing_tables.

Post typehb_pricing_table
Supportstitle, page-attributes, custom-fields
Metabox groupspricing_settings (pricing tables only)

Like clients, publicly_queryable => false means there's no public single page. Unlike clients, hb_pricing_table also sets query_var => false, so it doesn't answer a ?hb_pricing_table= query var either. Pricing tables are read directly (by ID, or with 'post_type' => 'hb_pricing_table') and rendered through the [pricing_table] shortcode, not linked to individually.

Reading a post type's meta

Every metabox group above is read the same way, with vp_metabox() using "{group_id}.{field_id}":

$team_role = vp_metabox( 'team_member_settings.hb_employee_position', '', $post_id );
$author    = vp_metabox( 'testimonial_type_settings.hb_testimonial_author', '', $post_id );

Field IDs inside each group aren't listed here. Check the corresponding file in admin/metaboxes/ (for example meta-team-member-settings.php for team_member_settings) for the exact field IDs available in that group.

In the post editor, a post type with two or more groups shows them as tabs of one Highend Settings box (ID highend_settings), with some fields regrouped by topic. The group IDs, field IDs and saved meta are the same as before, so vp_metabox() calls don't change.

Post likes

The Like button (Portfolio and blog posts) stores its count in the _likes post meta key on any post type, read and written through hb_like_this(). See Functions & constants.

On this page