<?php
if ( ! class_exists( 'NISHIKI_PRO_CONTENT_POST_TYPE' ) ) {
	/**
	 * 投稿の編集画面に設定画面追加
	 */
	class NISHIKI_PRO_CONTENT_POST_TYPE extends NISHIKI_PRO_CONTENT_UTILITY {

		/**
		 * 初期設定
		 */
		public function __construct() {

			// 投稿タイプ追加
			add_action( 'init', array( $this, 'nishiki_pro_content_register_post_type' ), 20 );

			// Gutenberg対応
			add_filter( 'gutenberg_can_edit_post_type', array( $this, 'nishiki_pro_content_can_edit_post_type' ), 20, 2 );

			// ショートコード有効化
			add_shortcode( 'nishiki_pro_cta', array( $this, 'nishiki_pro_content_shortcode' ), 20 );

			// カラムにCTA追加
			add_filter( 'manage_nishiki_pro_content_posts_columns', array( $this, 'nishiki_pro_content_columns_head' ), 20 );
			add_action( 'manage_nishiki_pro_content_posts_custom_column', array( $this, 'nishiki_pro_content_columns' ), 20, 2 );
		}

		/**
		 * カスタム投稿タイプ追加
		 */
		public function nishiki_pro_content_register_post_type() {

			register_post_type(
				'nishiki_pro_content',
				array(
					'labels'                => array(
						'name'               => '再利用コンテンツ',
						'add_new_item'       => '再利用コンテンツを追加',
						'edit_item'          => '編集',
						'new_item'           => '新規作成',
						'attributes'         => '',
						'view_item'          => 'コンテンツを表示',
						'search_items'       => '検索',
						'not_found'          => '見つかりませんでした',
						'not_found_in_trash' => 'ゴミ箱にはありません',
						'parent_item_colon'  => '',
					),
					'public'                => false,
					'exclude_from_search'   => true,
					'publicly_queryable'    => false,
					'show_ui'               => true,
					'show_in_nav_menus'     => false,
					'show_in_menu'          => true,
					'menu_icon'             => 'dashicons-flag',
					'description'           => '',
					'has_archive'           => false,
					'show_in_rest'          => true,
					'rest_base'             => 'nishiki_pro_content',
					'rest_controller_class' => 'WP_REST_Posts_Controller',
					'supports'              => array(
						'title',
						'editor',
						'revisions',
						'custom-fields',
					),
				)
			);
		}

		/**
		 * カスタム投稿タイプ Gutenberg 対応
		 *
		 * @param boolean $can_edit 編集可能かどうか
		 * @param string  $post_type 投稿タイプ
		 * @return $can_edit
		 */
		public function nishiki_pro_content_can_edit_post_type( $can_edit, $post_type ) {

			if ( $this->plugin_name === $post_type ) {
				return true;
			}

			return $can_edit;
		}

		/**
		 * ショートコード
		 *
		 * @param array $atts 属性
		 * @return $post_content
		 */
		public function nishiki_pro_content_shortcode( $atts ) {
			$a = shortcode_atts(
				array(
					'id' => '',
				),
				$atts
			);
			if ( '' === $a['id'] ) {
				return false;
			}
			$post_content = '<div id="nishiki_pro_cta_' . esc_attr( $a['id'] ) . '">' . apply_filters( 'the_content', get_post_field( 'post_content', esc_attr( $a['id'] ) ) ) . '</div>';

			return $post_content;
		}

		/**
		 * カラム追加
		 *
		 * @param array $defaults デフォルト設定
		 * @return $defaults
		 */
		public function nishiki_pro_content_columns_head( $defaults ) {
			$defaults['nishiki_pro_content'] = 'ショートコード';

			return $defaults;
		}

		/**
		 * カラム内容
		 *
		 * @param string $column_name カラム名
		 * @param int    $post_ID 投稿 ID
		 * @return void
		 */
		public function nishiki_pro_content_columns( $column_name, $post_ID ) {
			if ( 'nishiki_pro_content' === $column_name ) {
				echo '[nishiki_pro_content id="' . absint( $post_ID ) . '"]';
			}
		}
	}

	$nishiki_pro_content_post_type = new NISHIKI_PRO_CONTENT_POST_TYPE();
}
