name}", array( $this, 'wp_hook_add_meta_boxes' ) ); add_action( "manage_{$this->name}_posts_custom_column", array( $this, 'wp_hook_manage_posts_custom_column' ), 10, 2 ); add_filter( "manage_{$this->name}_posts_columns", array( $this, 'wp_hook_manage_posts_columns' ) ); } /** * @inheritDoc */ protected function _before_register() { /** * Filters {@see register_post_type()} args for the et_pb_layout post type. * * @deprecated Use {@see 'et_core_cpt_et_pb_layout_args'} instead. * * @since 3.1 Deprecated. See {@see 'et_core_cpt_et_pb_layout_args'}. * @since 1.0 * * @param $args */ $this->_args = apply_filters( 'et_pb_layout_args', $this->_args ); } /** * @inheritDoc */ protected function _get_args() { return array( 'can_export' => true, 'capability_type' => 'post', 'has_archive' => false, 'hierarchical' => false, 'map_meta_cap' => true, 'public' => false, 'publicly_queryable' => self::is_publicly_queryable(), 'query_var' => false, 'show_in_menu' => false, 'show_ui' => true, 'supports' => array( 'editor', 'excerpt', 'revisions', 'thumbnail', 'title', ), 'taxonomies' => array( 'layout_category', 'layout_pack', 'layout_type', 'module_width', 'scope', ), ); } /** * @inheritDoc */ protected function _get_labels() { return array( 'add_new' => esc_html_x( 'Add New', 'Layout', 'et_builder' ), 'add_new_item' => esc_html__( 'Add New Layout', 'et_builder' ), 'all_items' => esc_html__( 'All Layouts', 'et_builder' ), 'edit_item' => esc_html__( 'Edit Layout', 'et_builder' ), 'name' => esc_html__( 'Layouts', 'et_builder' ), 'new_item' => esc_html__( 'New Layout', 'et_builder' ), 'not_found' => esc_html__( 'Nothing found', 'et_builder' ), 'not_found_in_trash' => esc_html__( 'Nothing found in Trash', 'et_builder' ), 'parent_item_colon' => '', 'search_items' => esc_html__( 'Search Layouts', 'et_builder' ), 'singular_name' => et_builder_i18n( 'Layout' ), 'view_item' => esc_html__( 'View Layout', 'et_builder' ), ); } /** * Get the class instance. * * @since 3.0.99 * * @param string $type See {@see self::$wp_type} for accepted values. Default is 'cpt'. * @param string $name The name/slug of the post object. Default is {@see self::$name}. * * @return self|null */ public static function instance( $type = 'cpt', $name = 'et_pb_layout' ) { if ( ! $instance = parent::instance( $type, $name ) ) { $instance = new self(); } return $instance; } /** * Whether or not a layout is global. * * @param $post_id * * @return bool */ public function is_global( $post_id ) { $tax_name = ET_Builder_Post_Taxonomy_LayoutScope::instance()->name; if ( $terms = get_the_terms( $post_id, $tax_name ) ) { foreach ( $terms as $term ) { if ( 'global' === $term->name ) { return true; } } } return false; } /** * Determines if the Library's CPT and taxonomies should be publicly queryable for the current request. * * @sine ?? * * @return bool */ public static function is_publicly_queryable() { // phpcs:disable WordPress.Security.NonceVerification.NoNonceVerification $get = $_GET; $actions = array( 'et_fb_update_builder_assets', 'et_fb_retrieve_builder_data', ); $is_ajax = isset( $_REQUEST['action'] ) && in_array( $_REQUEST['action'], $actions ); $is_VB = ( '1' === self::$_->array_get( $get, 'et_fb' ) || $is_ajax ) && et_pb_is_allowed( 'use_visual_builder' ); // phpcs:enable $is_wpcli = defined( 'WP_CLI' ) && WP_CLI; $has_preview = ! $is_VB && ! is_null( self::$_->array_get( $get, 'et_pb_preview', null ) ); $is_preview = $has_preview && et_core_security_check_passed( '', 'et_pb_preview_nonce', '', '_GET' ); return $is_VB || $is_preview || $is_wpcli; } /** * @return ET_Builder_Post_Query_Layouts */ public function query() { return new ET_Builder_Post_Query_Layouts( $this->name, $this->_category_tax, $this->_tag_tax ); } /** * Moves the excerpt meta box into the side column for this post type. * {@see 'add_meta_boxes_{$type}'} * * @since 3.0.99 */ public function wp_hook_add_meta_boxes() { remove_meta_box( 'postexcerpt', null, 'normal' ); add_meta_box( 'postexcerpt', __( 'Description' ), 'post_excerpt_meta_box', null, 'side', 'default' ); } /** * Adds custom columns to the Divi Library admin page. * {@see 'manage_{$post_type}_posts_columns'} * * @since 3.1 Relocated from `builder/layouts.php`. * @since 2.5.7 */ public function wp_hook_manage_posts_columns( $columns ) { $_new_columns = array(); foreach ( $columns as $column_key => $column ) { $_new_columns[ $column_key ] = $column; if ( 'taxonomy-layout_type' === $column_key ) { $_new_columns['layout_global'] = esc_html__( 'Global', 'et_builder' ); } } return $_new_columns; } /** * Sets the content of our custom columns for each row on the Divi Library admin page. * {@see 'manage_posts_custom_column'} * * @since 3.1 Relocated from `builder/layouts.php`. * @since 2.5.7 */ public function wp_hook_manage_posts_custom_column( $column_key, $post_id ) { switch ( $column_key ) { case 'layout_global': if ( $this->is_global( $post_id ) ) { echo ''; } else { echo ''; } break; } } }