Skip to content
This repository has been archived by the owner on Oct 31, 2022. It is now read-only.

Custom Post Types

Jared Cobb edited this page Jan 7, 2018 · 7 revisions

Overview

Creating a Custom Post Type Class is how you map a CCB Entity to a Custom Post Type in WordPress. CCB Core includes two Custom Post Type Classes by default: CCB_Core_Group and CCB_Core_Calendar which map groups and public calendar events.

Class API Service Entity Custom Post Type
CCB_Core_Group group_profiles <group> ccb_core_group
CCB_Core_Calendar public_calendar_listing <item> ccb_core_calendar

Example Class

There is an example class in /includes/post-types/class-example-post-type.php. You can also look at the CCB_Core_Group and CCB_Core_Calendar classes.

Creating A Class

You can create your own classes to implement your own mappings of CCB API services to Custom Post Types.

All Custom Post Type Classes inhert from (extend) a parent class called CCB_Core_CPT. Your class is required to implement three methods which help to define the mappings and functionality.

Methods

get_post_args()

This method should return an array of $args that define this new WordPress Custom Post Type. These are the same $args that are used by register_post_type.

get_post_api_map( $maps )

Parameter Description
$maps An array of maps that define the API service name, nodes, and mapping of Entity properties to post properties and post meta.

The $maps array is a collection of all API mappings that have been registered, so the goal is to insert your own additional mapping to be included with the others.

A $map consists of four array elements:

Element Data Type Description
service string The CCB API service name (i.e. group_profiles, public_calendar_listing, etc)
data array This is a collection of key / value pairs. Any additional parameters that need to be sent along with the CCB API request are included here. For example, the public_calendar_listing requires that we include date_start, so we would include 'data' => [ 'date_start' => '2018-01-01' ].
nodes array This is a path from the <response> node all the way to (and including) the node that defines the CCB Entity. For example, the nodes value for group_profiles would be 'nodes' => [ 'groups', 'group' ].
fields array This is a collection of key / value pairs. Each item is a mapping from a CCB Entity property to a WP_Post property name or use post_meta to have it saved as post meta.

Each $map in the $maps array is inserted with its custom post type slug as the key. For example:

[Array]
(
	['ccb_core_groups'] => {all mapping info about groups}
	['ccb_core_calendar'] => {all mapping info about events}
	[{your_new_post_type_slug}] => {all your mapping info}
)
Example Implementation
public function get_post_api_map( $maps ) {
	$maps['ccb_core_person'] = [
		'service' => 'individual_profiles',
		'data' => [
			'include_inactive' => true,
		],
		'nodes' => [ 'individuals', 'individual' ],
		'fields' => [
			'full_name' => 'post_title',
			'family_position' => 'post_content',
			'email' => 'post_meta',
			'addresses' => 'post_meta',
		],
	];
	return $maps;
}

get_post_settings_definitions( $settings )

Parameter Description
$settings An array that contains a settings page, settings section, and settings fields, that get used by add_submenu_page() and settings_fields().

This method is used to build any settings pages & fields that should be exposed to the user. It gives you the ability to let users customize the integration. The settings get stored in the global ccb_core_settings array.

Creating a settings page & fields is completely optional, however you still need to implement the method. If you do not want to create any settings for this map you should do:

public function get_post_settings_definitions( $settings ) {
	return $settings;
}