esc_html_x( 'WooCommerce Page Builder', 'Post Type General Name', 'shopbuilder' ),
'singular_name' => esc_html_x( 'Templates Builder', 'Post Type Singular Name', 'shopbuilder' ),
'menu_name' => esc_html__( 'Templates Builder', 'shopbuilder' ),
'name_admin_bar' => esc_html__( 'Templates Builder', 'shopbuilder' ),
'archives' => esc_html__( 'WC Page Archives', 'shopbuilder' ),
'attributes' => esc_html__( 'Page Attributes', 'shopbuilder' ),
'parent_item_colon' => esc_html__( 'Parent Item:', 'shopbuilder' ),
'all_items' => esc_html__( 'Templates Builder', 'shopbuilder' ),
'add_new_item' => esc_html__( 'Add New Page', 'shopbuilder' ),
'add_new' => esc_html__( 'Add New', 'shopbuilder' ),
'new_item' => esc_html__( 'New Page', 'shopbuilder' ),
'edit_item' => esc_html__( 'Edit Page', 'shopbuilder' ),
'update_item' => esc_html__( 'Update Page', 'shopbuilder' ),
'view_item' => esc_html__( 'View Page', 'shopbuilder' ),
'view_items' => esc_html__( 'View Pages', 'shopbuilder' ),
'search_items' => esc_html__( 'Search Pages', 'shopbuilder' ),
'not_found' => esc_html__( 'Not found', 'shopbuilder' ),
'not_found_in_trash' => esc_html__( 'Not found in Trash', 'shopbuilder' ),
'featured_image' => esc_html__( 'Featured Image', 'shopbuilder' ),
'set_featured_image' => esc_html__( 'Set featured image', 'shopbuilder' ),
'remove_featured_image' => esc_html__( 'Remove featured image', 'shopbuilder' ),
'use_featured_image' => esc_html__( 'Use as featured image', 'shopbuilder' ),
'insert_into_item' => esc_html__( 'Insert into page', 'shopbuilder' ),
'uploaded_to_this_item' => esc_html__( 'Uploaded to this page', 'shopbuilder' ),
'items_list' => esc_html__( 'Pages list', 'shopbuilder' ),
'items_list_navigation' => esc_html__( 'Pages list navigation', 'shopbuilder' ),
'filter_items_list' => esc_html__( 'Filter from list', 'shopbuilder' ),
];
$tb_args = [
'label' => esc_html__( 'Templates Builder', 'shopbuilder' ),
'description' => esc_html__( 'Shopbuilder Template', 'shopbuilder' ),
'labels' => $tb_labels,
'supports' => [ 'title', 'editor', 'elementor', 'author', 'permalink', 'comments' ],
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => 'rtsb',
'show_in_admin_bar' => false,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => false,
'rewrite' => [
'slug' => 'rtsb-template',
'pages' => false,
'with_front' => true,
'feeds' => false,
],
'query_var' => true,
'publicly_queryable' => apply_filters( 'rtsb/builder/args/publicly_queryable', true ),
'capability_type' => 'product',
'show_in_rest' => true,
'rest_base' => BuilderFns::$post_type_tb,
];
$tb_args = apply_filters( 'rtsb/builder/template_args', $tb_args );
register_post_type( BuilderFns::$post_type_tb, $tb_args );
// Flash rewrite rules.
$this->flush_rewrite_rules();
}
/**
* Flush rewrite
*
* @return void
*/
public function flush_rewrite_rules() {
if ( get_option( 'shopbuilder_permalinks_flushed', 'no' ) !== 'yes' ) {
flush_rewrite_rules();
update_option( 'shopbuilder_permalinks_flushed', 'yes' );
}
}
/**
* Add new columns to the post table
*
* @param array $columns - Current columns on the list post.
*/
public function add_new_columns( $columns ) {
$column_meta = [
'type' => esc_html__( 'Template Type', 'shopbuilder' ),
'edit_with' => esc_html__( 'Editor Type', 'shopbuilder' ),
'set_default' => esc_html__( 'Set as Active', 'shopbuilder' ),
];
unset( $columns['comments'] );
$columns = array_merge(
array_slice( $columns, 0, 2 ),
$column_meta,
array_slice( $columns, 2 )
);
return $columns;
}
/**
* Display data in new columns
*
* @param string $column table column.
* @param string $post_id Post id.
*
* @return void
*/
public function custom_columns( $column, $post_id ) {
$post_id = absint( $post_id );
$types = BuilderFns::builder_page_types();
$type = BuilderFns::builder_type( $post_id ) ? BuilderFns::builder_type( $post_id ) : array_key_first( $types );
switch ( $column ) {
case 'type':
$the_type = ! empty( $types[ $type ] ) ? esc_html( ucwords( $types[ $type ] ) ) : '';
echo apply_filters( 'rtsb/columns/template/types/text', $the_type, $type, $post_id );
break;
case 'edit_with':
$edit_by = Fns::page_edit_with( $post_id );
echo esc_html( ucfirst( $edit_by ) );
break;
case 'set_default':
$is_set_default = absint( BuilderFns::builder_page_id_by_type( $type ) );
$is_published = 'publish' === get_post_status( $post_id );
$page_type_for = $type;
if ( 'product' === $type ) {
$product_ids = apply_filters( 'rtsb/product/page/builder/selected/products', [], $post_id );
$set_default = BuilderFns::get_specific_product_as_default( $post_id );
if ( ! empty( $product_ids ) && $set_default ) {
$is_set_default = $post_id;
$page_type_for = 'template-' . $post_id . '-specific-products';
}
} elseif ( 'archive' === $type ) {
$categories_name = apply_filters( 'rtsb/archive/page/builder/selected/categories', [], $post_id );
$set_default = BuilderFns::get_specific_category_as_default( $post_id );
if ( ! empty( $categories_name ) && $set_default ) {
$is_set_default = $post_id;
$page_type_for = 'template-' . $post_id . '-specific-category';
}
}
?>
title="">
is_current_screen() ) {
return;
}
$orderby = $query->get( 'orderby' );
if ( 'type' === $orderby ) {
$query->set( 'meta_key', BuilderFns::template_type_meta_key() );
$query->set( 'orderby', 'meta_value' );
}
}
/**
* Check template screen
*
* @return boolean
*/
public function is_current_screen() {
global $pagenow, $typenow;
return 'edit.php' === $pagenow && BuilderFns::$post_type_tb === $typenow;
}
/**
* Manage Template filter by template type
*
* @param WP_Query $query WordPress main query.
*
* @return void
*/
public function query_filter( WP_Query $query ) {
if ( ! is_admin() || ! $this->is_current_screen() || ! empty( $query->query_vars['meta_key'] ) ) {
return;
}
$type = isset( $_GET['template_type'] ) ? sanitize_key( $_GET['template_type'] ) : '';
if ( '' != $type && 'all' != $type ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$query->query_vars['meta_key'] = BuilderFns::template_type_meta_key(); // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
$query->query_vars['meta_value'] = $type;
$query->query_vars['meta_compare'] = '=';
}
}
/**
* Load Template.
*
* @param string $template Template File.
*
* @return string
*/
public function builder_template( $template ) {
$builder_page_id = BuilderFns::is_builder_preview() ? get_the_ID() : BuilderFns::builder_page_id_by_page();
if ( $builder_page_id ) {
$page_template = get_post_meta( $builder_page_id, '_wp_page_template', true );
$new_template = RTSB_ABSPATH . 'page-templates/builder-template.php';
if ( 'elementor_canvas' === $page_template ) {
$new_template = RTSB_ABSPATH . 'page-templates/elementor-canvas.php';
} elseif ( 'elementor_header_footer' === $page_template ) {
$new_template = RTSB_ABSPATH . 'page-templates/builder-template.php';
}
if ( file_exists( $new_template ) ) {
$template = $new_template;
}
}
return $template;
}
/**
* Add/Remove edit link in dashboard.
*
* Add or remove an edit link to the post/page action links on the post/pages list table.
*
* Fired by `post_row_actions` and `page_row_actions` filters.
*
* @access public
*
* @param array $actions An array of row action links.
*
* @return array An updated array of row action links.
*/
public function filter_post_row_actions( $actions ) {
if ( $this->is_current_screen() ) {
// unset( $actions['view'] );
unset( $actions['inline hide-if-no-js'] );
}
return $actions;
}
/**
* Remove admin notices
*/
public function remove_all_notices() {
$screen = get_current_screen();
if ( 'edit-rtsb_builder' === $screen->id ) {
remove_all_actions( 'admin_notices' );
remove_all_actions( 'all_admin_notices' );
}
}
}