Source: classes/model/posttypes.php

<?php

namespace wpbuddy\rich_snippets;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
} // Exit if accessed directly


/**
 * Class Posttypes.
 *
 * Creates posttypes.
 *
 * @package wpbuddy\rich_snippets
 *
 * @since   2.0.0
 */
class Posttypes_Model {

	public static function create_post_types() {

		$pro_helper = class_exists( '\wpbuddy\rich_snippets\pro\Helper_Model' ) ? \wpbuddy\rich_snippets\pro\Helper_Model::instance() : new \stdClass();

		if ( (bool) get_option( 'wpb_rs/active', false ) || ( method_exists( $pro_helper, 'magic' ) && $pro_helper->magic() ) ) {
			$gl_args = array(
				'label'               => _x( 'Schema Templates', 'Global post type label', 'rich-snippets-schema' ),
				'labels'              => array(
					'singular_name' => _x( 'Schema Template', 'Global post type singular name', 'rich-snippets-schema' ),
					'add_new'       => __( 'Add new schema template', 'rich-snippets-schema' ),
					'add_new_item'  => __( 'Add new schema template', 'rich-snippets-schema' ),
					'new_item'      => __( 'Add new schema template', 'rich-snippets-schema' ),
					'edit_item'     => __( 'Edit schema template', 'rich-snippets-schema' ),
					'menu_name'     => _x( 'Global Snippets (Schema Templates)', 'Global post type menu label', 'rich-snippets-schema' ),
				),
				'public'              => false,
				'exclude_from_search' => true,
				'publicly_queryable'  => false,
				'show_in_nav_menus'   => false,
				'show_in_admin_bar'   => false,
				'show_in_menu'        => false,
				'supports'            => array( 'title' ),
				'show_ui'             => true,
				'show_in_rest'        => true,
				'menu_icon'           => 'data:image/svg+xml;base64,' . base64_encode( '<svg xmlns="http://www.w3.org/2000/svg" width="1041" height="1013.031" viewBox="0 0 1041 1013.031"><path fill="#fff" d="M332.672,244.708q-97.679,78.74-97.667,206.327,0,127.611,80.175,184.456,80.152,56.867,236.151,71.448v35a907.63,907.63,0,0,1-175.656-16.769Q290.4,708.42,249.582,687.984V1004.4l33.528,13.12q33.516,13.125,125.364,26.25t209.912,13.12q221.564,0,310.5-71.445,88.9-71.427,88.919-191.017,0-119.544-67.053-164.77-67.067-45.18-247.813-62.7v-35q196.793,0,295.918,51.035V218.462l-33.528-13.124q-34.984-13.124-127.551-26.246-92.587-13.124-207.725-13.124Q430.317,165.968,332.672,244.708Z" transform="translate(-235 -165.969)"></path><rect fill="#fff" x="16" y="973.031" width="1025" height="40"></rect></svg>' ),
			);


			/**
			 * Global Snippets post type argument filter.
			 *
			 * Allows to modify the post type arguments of the Global Snippets post type.
			 *
			 * @hook   wpbuddy/rich_snippets/posttype/global/args
			 *
			 * @param  {array} The post type arguments.
			 *
			 * @returns {array) The post type arguments.
			 *
			 * @since  2.0.0
			 */
			$gl_args = apply_filters( 'wpbuddy/rich_snippets/posttype/global/args', $gl_args );

			register_post_type( 'wpb-rs-global', $gl_args );
		}


		add_action( 'wpbuddy/rich_snippets/admin_menu', [ '\wpbuddy\rich_snippets\Posttypes_Model', 'menu' ] );
	}


	/**
	 * @param Admin_Controller $admin
	 *
	 * @since 2.14.0
	 */
	public static function menu( $admin ) {

		/**
		 * Settings menu capability filter.
		 *
		 * Allows to change the capability for the settings submenu.
		 *
		 * @hook  wpbuddy/rich_snippets/capability_menu_support
		 *
		 * @param {string} $capability The capability (default: manage_options)
		 * @returns {string} The capability.
		 *
		 * @since 2.0.0
		 */

		$pro_helper = class_exists( '\wpbuddy\rich_snippets\pro\Helper_Model' ) ? \wpbuddy\rich_snippets\pro\Helper_Model::instance() : new \stdClass();

		if ( (bool) get_option( 'wpb_rs/active', false ) || ( method_exists( $pro_helper, 'magic' ) && $pro_helper->magic() ) ) {

			$capability = apply_filters( 'wpbuddy/rich_snippets/capability_menu_globalsnippets', 'manage_options' );

			$admin->menu_globalsnippets_hook = add_submenu_page(
				'rich-snippets-schema',
				__( 'Global Snippets (Schema Templates)', 'rich-snippets-schema' ),
				__( 'Global Snippets (Schema Templates)', 'rich-snippets-schema' ),
				$capability,
				'edit.php?post_type=wpb-rs-global',
				null
			);

			/**
			 * Admin Menu Global Snippets action.
			 *
			 * Allows to fire code after the "Global Snippets" menu has been added.
			 *
			 * @hook  wpbuddy/rich_snippets/admin_menu_globalsnippets
			 *
			 * @param {string} $hook The "Global Snippets" menu hook name.
			 *
			 * @since 2.0.0
			 */
			do_action( 'wpbuddy/rich_snippets/admin_menu_globalsnippets', $admin->menu_globalsnippets_hook );
		}
	}

}