updated plugin GP Premium version 2.0.3

This commit is contained in:
2021-07-25 23:25:02 +00:00
committed by Gitium
parent d7964b08bd
commit 3ef36355e9
154 changed files with 6153 additions and 9541 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@ -1,4 +1,4 @@
jQuery( document ).ready( function( $ ) {
jQuery( function( $ ) {
$( '.post-type-gp_elements .page-title-action:not(.legacy-button)' ).on( 'click', function( e ) {
e.preventDefault();
@ -10,4 +10,9 @@ jQuery( document ).ready( function( $ ) {
$( '.choose-element-type-parent' ).hide();
} );
// Don't allow Elements to quick edit parents.
$( '.inline-edit-gp_elements select#post_parent, .inline-edit-gp_elements .inline-edit-menu-order-input, .bulk-edit-gp_elements select#post_parent' ).each( function() {
$( this ).closest( 'label' ).remove();
} );
} );

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

View File

@ -188,18 +188,25 @@ ul.element-metabox-tabs li.is-selected a {
display: block;
}
.element-settings.header table[data-tab="hero"],
.element-settings.header:not(.has-page-hero) table[data-tab="site-header"],
.element-settings.header.has-page-hero table[data-tab="hero"],
.element-settings.hook table[data-tab="hook-settings"],
.element-settings.block table[data-tab="hook-settings"],
.element-settings.layout table[data-tab="sidebars"] {
display: table;
}
.element-settings.layout #generate-element-content,
.element-settings.block #generate-element-content {
.element-settings.header:not(.has-page-hero) #generate-element-content {
display: none;
}
.element-settings.header:not(.has-page-hero) #generate-element-content + .CodeMirror:not(.gpp-elements-show-codemirror) {
height: 0;
overflow: hidden;
opacity: 0;
margin: 0;
}
.padding-container {
display: flex;
}
@ -337,7 +344,8 @@ span.tip {
font-size: 10px;
}
body:not(.header-element-type) #generate_page_hero_template_tags {
body:not(.header-element-type) #generate_page_hero_template_tags,
.header-element-type:not(.element-has-page-hero) #generate_page_hero_template_tags {
display: none;
}

View File

@ -1,8 +1,8 @@
jQuery(document).ready(function( $ ) {
jQuery( function( $ ) {
if ( $( '.element-settings' ).hasClass( 'header' ) || $( '.element-settings' ).hasClass( 'hook' ) ) {
$( function() {
if ( elements.settings) {
wp.codeEditor.initialize( "generate-element-content", elements.settings );
if ( elements.settings ) {
wp.codeEditor.initialize( 'generate-element-content', elements.settings );
}
} );
}
@ -51,7 +51,7 @@ jQuery(document).ready(function( $ ) {
} );
$( '#_generate_hook' ).select2( {
width: '100%'
width: '100%',
} );
$( '.element-metabox-tabs li' ).on( 'click', function() {
@ -63,15 +63,17 @@ jQuery(document).ready(function( $ ) {
$( '.generate-elements-settings' ).hide();
$( '.generate-elements-settings[data-tab="' + tab + '"]' ).show();
if ( $( '.element-settings' ).hasClass( 'block' ) & 'hook-settings' === tab ) {
if ( $( '.element-settings' ).hasClass( 'block' ) && 'hook-settings' === tab ) {
$( '.generate-elements-settings[data-tab="display-rules"]' ).show();
}
if ( $( '.element-settings' ).hasClass( 'header' ) ) {
if ( 'hero' !== tab ) {
$( '#generate-element-content' ).next( '.CodeMirror' ).hide();
$( '#generate-element-content' ).next( '.CodeMirror' ).removeClass( 'gpp-elements-show-codemirror' );
$( '#generate_page_hero_template_tags' ).css( 'display', '' );
} else {
$( '#generate-element-content' ).next( '.CodeMirror' ).show();
$( '#generate-element-content' ).next( '.CodeMirror' ).addClass( 'gpp-elements-show-codemirror' );
$( '#generate_page_hero_template_tags' ).css( 'display', 'block' );
}
}
} );
@ -82,7 +84,7 @@ jQuery(document).ready(function( $ ) {
selects.each( function() {
var select = $( this ),
config = {
width: 'style'
width: 'style',
};
select.select2( config );
@ -95,82 +97,70 @@ jQuery(document).ready(function( $ ) {
$( '.add-condition' ).on( 'click', function() {
var _this = $( this );
var row = _this.closest( '.generate-element-row-content' ).find( '.condition.hidden.screen-reader-text' ).clone(true);
var row = _this.closest( '.generate-element-row-content' ).find( '.condition.hidden.screen-reader-text' ).clone( true );
row.removeClass( 'hidden screen-reader-text' );
row.insertBefore( _this.closest( '.generate-element-row-content' ).find( '.condition:last' ) );
select2Init();
return false;
});
} );
$( '.remove-condition' ).on('click', function() {
$(this).parents('.condition').remove();
$( '.remove-condition' ).on( 'click', function() {
$( this ).parents( '.condition' ).remove();
select2Init();
return false;
});
} );
var get_location_objects = function( _this, onload = false ) {
var select = _this,
parent = select.parent(),
location = select.val(),
object_select = parent.find( '.condition-object-select' ),
locationString = '',
actionType = 'terms';
if ( '' == location ) {
var getLocationObjects = function( _this, onload = false, data = '' ) {
var select = _this,
parent = select.parent(),
location = select.val(),
objectSelect = parent.find( '.condition-object-select' ),
locationType = '',
actionType = 'terms';
if ( '' === location ) {
parent.removeClass( 'generate-elements-rule-objects-visible' );
select.closest( '.generate-element-row-content' ).find( '.generate-element-row-loading' ).remove();
} else {
if ( location.indexOf( ':taxonomy:' ) > 0 ) {
var locationType = 'taxonomy';
locationType = 'taxonomy';
} else {
var locationType = location.substr( 0, location.indexOf( ':' ) );
locationType = location.substr( 0, location.indexOf( ':' ) );
}
var locationID = location.substr( location.lastIndexOf( ':' ) + 1 );
locationString = location;
if ( 'taxonomy' == locationType || 'post' == locationType ) {
if ( 'taxonomy' === locationType || 'post' === locationType ) {
if ( ! ( '.generate-element-row-loading' ).length ) {
select.closest( '.generate-element-row-content' ).prepend( '<div class="generate-element-row-loading"></div>' );
}
if ( 'post' == locationType ) {
if ( 'taxonomy' == locationType ) {
actionType = 'terms';
} else {
actionType = 'posts';
}
}
$.post( ajaxurl, {
action : 'generate_elements_get_location_' + actionType,
id : locationID,
nonce : elements.nonce
}, function( response ) {
response = $.parseJSON( response );
var objects = response.objects;
var fillObjects = function( response ) {
var objects = response[ locationID ].objects;
var blank = {
'id': '',
'name': 'All ' + response.label,
id: '',
name: 'All ' + response[ locationID ].label,
};
if ( location.indexOf( ':taxonomy:' ) > 0 ) {
blank.name = elements.choose;
}
objects.unshift( blank );
object_select.empty();
objectSelect.empty();
objectSelect.append( $( '<option>', {
value: blank.id,
label: blank.name,
text: blank.name,
} ) );
$.each( objects, function( key, value ) {
object_select.append( $( '<option>', {
objectSelect.append( $( '<option>', {
value: value.id,
label: elements.showID && value.id ? value.name + ': ' + value.id : value.name,
text: elements.showID && value.id ? value.name + ': ' + value.id : value.name,
@ -180,38 +170,93 @@ jQuery(document).ready(function( $ ) {
parent.addClass( 'generate-elements-rule-objects-visible' );
if ( onload ) {
object_select.val( object_select.attr( 'data-saved-value' ) );
objectSelect.val( objectSelect.attr( 'data-saved-value' ) );
}
select.closest( '.generate-element-row-content' ).find( '.generate-element-row-loading' ).remove();
} );
};
if ( data && onload ) {
// Use pre-fetched data if we just loaded the page.
fillObjects( data );
} else {
if ( 'post' === locationType ) {
if ( 'taxonomy' === locationType ) {
actionType = 'terms';
} else {
actionType = 'posts';
}
}
$.post( ajaxurl, {
action: 'generate_elements_get_location_' + actionType,
id: locationID,
nonce: elements.nonce,
}, function( response ) {
response = JSON.parse( response );
fillObjects( response );
} );
}
} else {
parent.removeClass( 'generate-elements-rule-objects-visible' );
select.closest( '.generate-element-row-content' ).find( '.generate-element-row-loading' ).remove();
object_select.empty().append( '<option value="0"></option>' );
object_select.val( '0' );
objectSelect.empty().append( '<option value="0"></option>' );
objectSelect.val( '0' );
}
//remove.show();
}
};
$( '.condition select.condition-select' ).on( 'change', function() {
get_location_objects( $( this ) );
getLocationObjects( $( this ) );
$( '.elements-no-location-error' ).hide();
} );
var postObjects = [];
var termObjects = [];
$( '.generate-elements-rule-objects-visible' ).each( function() {
var _this = $( this ),
select = _this.find( 'select.condition-select' );
select = _this.find( 'select.condition-select' ),
location = select.val(),
locationID = location.substr( location.lastIndexOf( ':' ) + 1 ),
locationType = '';
$( '<div class="generate-element-row-loading"></div>' ).insertBefore( _this );
if ( location.indexOf( ':taxonomy:' ) > 0 ) {
locationType = 'taxonomy';
} else {
locationType = location.substr( 0, location.indexOf( ':' ) );
}
get_location_objects( select, true );
if ( 'post' === locationType ) {
if ( ! postObjects.includes( locationID ) ) {
postObjects.push( locationID );
}
} else if ( 'taxonomy' === locationType && ! termObjects.includes( locationID ) ) {
termObjects.push( locationID );
}
} );
if ( postObjects.length > 0 || termObjects.length > 0 ) {
$.post( ajaxurl, {
action: 'generate_elements_get_location_objects',
posts: postObjects,
terms: termObjects,
nonce: elements.nonce,
}, function( response ) {
response = JSON.parse( response );
$( '.generate-elements-rule-objects-visible' ).each( function() {
var _this = $( this ),
select = _this.find( 'select.condition-select' );
$( '<div class="generate-element-row-loading"></div>' ).insertBefore( _this );
getLocationObjects( select, true, response );
} );
} );
}
$( '.set-featured-image a, .change-featured-image a:not(.remove-image)' ).on( 'click', function( event ) {
event.preventDefault();
@ -237,7 +282,7 @@ jQuery(document).ready(function( $ ) {
$( '.change-featured-image' ).hide();
$( '.image-preview' ).empty();
return false;
});
} );
$( '.remove-image' ).on( 'click', function( e ) {
e.preventDefault();
@ -257,12 +302,12 @@ jQuery(document).ready(function( $ ) {
var frame = wp.media( {
title: _this.data( 'title' ),
multiple: false,
library: { type : _this.data( 'type' ) },
button: { text : _this.data( 'insert' ) }
library: { type: _this.data( 'type' ) },
button: { text: _this.data( 'insert' ) },
} );
frame.on( 'select', function() {
var attachment = frame.state().get('selection').first().toJSON();
var attachment = frame.state().get( 'selection' ).first().toJSON();
container.find( '.media-field' ).val( attachment.id );
container.find( '.remove-field' ).show();
@ -293,11 +338,11 @@ jQuery(document).ready(function( $ ) {
$( '.requires-background-image' ).hide();
}
if ( 'featured-image' == _this.val() ) {
if ( 'featured-image' === _this.val() ) {
$( '.image-text' ).text( elements.fallback_image );
}
if ( 'custom-image' == _this.val() ) {
if ( 'custom-image' === _this.val() ) {
$( '.image-text' ).text( elements.custom_image );
}
} );
@ -308,10 +353,10 @@ jQuery(document).ready(function( $ ) {
var _this = $( this ),
control = _this.attr( 'data-control' ),
control_area = _this.closest( '.generate-element-row-content' );
controlArea = _this.closest( '.generate-element-row-content' );
control_area.find( '.padding-container' ).hide();
control_area.find( '.padding-container.' + control ).show();
controlArea.find( '.padding-container' ).hide();
controlArea.find( '.padding-container.' + control ).show();
_this.siblings().removeClass( 'is-selected' );
_this.addClass( 'is-selected' );
} );

File diff suppressed because it is too large Load Diff

View File

@ -30,6 +30,14 @@ class GeneratePress_Block_Element {
*/
protected $type = '';
/**
* Has post ancestors.
*
* @since 2.0.0
* @var boolean If this post has a parent.
*/
protected $has_parent = false;
/**
* Kicks it all off.
*
@ -40,6 +48,18 @@ class GeneratePress_Block_Element {
public function __construct( $post_id ) {
$this->post_id = $post_id;
$this->type = get_post_meta( $post_id, '_generate_block_type', true );
$has_content_template_condition = get_post_meta( $post_id, '_generate_post_loop_item_display', true );
// Take over the $post_id temporarily if this is a child block.
// This allows us to inherit the parent block Display Rules.
if ( 'content-template' === $this->type && $has_content_template_condition ) {
$parent_block = wp_get_post_parent_id( $post_id );
if ( ! empty( $parent_block ) ) {
$this->has_parent = true;
$post_id = $parent_block;
}
}
$display_conditions = get_post_meta( $post_id, '_generate_element_display_conditions', true ) ? get_post_meta( $post_id, '_generate_element_display_conditions', true ) : array();
$exclude_conditions = get_post_meta( $post_id, '_generate_element_exclude_conditions', true ) ? get_post_meta( $post_id, '_generate_element_exclude_conditions', true ) : array();
@ -55,7 +75,31 @@ class GeneratePress_Block_Element {
$post_id
);
/**
* Simplify filter name.
*
* @since 2.0.0
*/
$display = apply_filters(
'generate_element_display',
$display,
$post_id
);
// Restore our actual post ID if it's been changed.
if ( 'content-template' === $this->type && $has_content_template_condition ) {
$post_id = $this->post_id;
}
if ( $display ) {
global $generate_elements;
$generate_elements[ $post_id ] = array(
'is_block_element' => true,
'type' => $this->type,
'id' => $post_id,
);
$hook = get_post_meta( $post_id, '_generate_hook', true );
$custom_hook = get_post_meta( $post_id, '_generate_custom_hook', true );
$priority = get_post_meta( $post_id, '_generate_hook_priority', true );
@ -80,12 +124,36 @@ class GeneratePress_Block_Element {
case 'left-sidebar':
$hook = 'generate_before_left_sidebar_content';
break;
case 'content-template':
$hook = 'generate_before_do_template_part';
break;
}
if ( 'custom' === $hook && $custom_hook ) {
$hook = $custom_hook;
}
if ( 'post-meta-template' === $this->type ) {
$post_meta_location = get_post_meta( $post_id, '_generate_post_meta_location', true );
if ( '' === $post_meta_location || 'after-post-title' === $post_meta_location ) {
$hook = 'generate_after_entry_title';
if ( is_page() ) {
$hook = 'generate_after_page_title';
}
} elseif ( 'before-post-title' === $post_meta_location ) {
$hook = 'generate_before_entry_title';
if ( is_page() ) {
$hook = 'generate_before_page_title';
}
} elseif ( 'after-content' === $post_meta_location ) {
$hook = 'generate_after_content';
}
}
if ( ! $hook ) {
return;
}
@ -98,16 +166,27 @@ class GeneratePress_Block_Element {
remove_action( 'generate_footer', 'generate_construct_footer' );
}
add_action( esc_attr( $hook ), array( $this, 'build_hook' ), absint( $priority ) );
if ( 'right-sidebar' === $this->type || 'left-sidebar' === $this->type ) {
add_filter( 'sidebars_widgets', array( $this, 'remove_sidebar_widgets' ) );
add_filter( 'generate_show_default_sidebar_widgets', '__return_false' );
if ( 'content-template' === $this->type && ! $this->has_parent ) {
add_filter( 'generate_do_template_part', array( $this, 'do_template_part' ) );
}
add_action( 'wp', array( $this, 'remove_elements' ), 100 );
add_action( esc_attr( $hook ), array( $this, 'build_hook' ), absint( $priority ) );
add_filter( 'generateblocks_do_content', array( $this, 'do_block_content' ) );
}
}
/**
* Disable our post loop items if needed.
*
* @param boolean $do Whether to display the default post loop item or not.
*/
public function do_template_part( $do ) {
if ( GeneratePress_Elements_Helper::should_render_content_template( $this->post_id ) ) {
return false;
}
return $do;
}
/**
@ -152,12 +231,185 @@ class GeneratePress_Block_Element {
return $widgets;
}
/**
* Remove existing elements.
*
* @since 2.0.0
*/
public function remove_elements() {
if ( 'right-sidebar' === $this->type || 'left-sidebar' === $this->type ) {
add_filter( 'sidebars_widgets', array( $this, 'remove_sidebar_widgets' ) );
add_filter( 'generate_show_default_sidebar_widgets', '__return_false' );
}
if ( 'page-hero' === $this->type ) {
$disable_title = get_post_meta( $this->post_id, '_generate_disable_title', true );
$disable_featured_image = get_post_meta( $this->post_id, '_generate_disable_featured_image', true );
$disable_primary_post_meta = get_post_meta( $this->post_id, '_generate_disable_primary_post_meta', true );
if ( $disable_title ) {
if ( is_singular() ) {
add_filter( 'generate_show_title', '__return_false' );
}
remove_action( 'generate_archive_title', 'generate_archive_title' );
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_title', 5 );
}
if ( $disable_primary_post_meta ) {
remove_action( 'generate_after_entry_title', 'generate_post_meta' );
}
if ( $disable_featured_image && is_singular() ) {
remove_action( 'generate_after_entry_header', 'generate_blog_single_featured_image' );
remove_action( 'generate_before_content', 'generate_blog_single_featured_image' );
remove_action( 'generate_after_header', 'generate_blog_single_featured_image' );
remove_action( 'generate_before_content', 'generate_featured_page_header_inside_single' );
remove_action( 'generate_after_header', 'generate_featured_page_header' );
}
}
if ( 'post-meta-template' === $this->type ) {
$post_meta_location = get_post_meta( $this->post_id, '_generate_post_meta_location', true );
$disable_primary_post_meta = get_post_meta( $this->post_id, '_generate_disable_primary_post_meta', true );
$disable_secondary_post_meta = get_post_meta( $this->post_id, '_generate_disable_secondary_post_meta', true );
if ( '' === $post_meta_location || 'after-post-title' === $post_meta_location || 'custom' === $post_meta_location ) {
if ( $disable_primary_post_meta ) {
remove_action( 'generate_after_entry_title', 'generate_post_meta' );
}
} elseif ( 'before-post-title' === $post_meta_location || 'custom' === $post_meta_location ) {
if ( $disable_primary_post_meta ) {
remove_action( 'generate_after_entry_title', 'generate_post_meta' );
}
} elseif ( 'after-content' === $post_meta_location || 'custom' === $post_meta_location ) {
if ( $disable_secondary_post_meta ) {
remove_action( 'generate_after_entry_content', 'generate_footer_meta' );
}
}
}
if ( 'post-navigation-template' === $this->type ) {
$disable_post_navigation = get_post_meta( $this->post_id, '_generate_disable_post_navigation', true );
if ( $disable_post_navigation ) {
add_filter( 'generate_footer_entry_meta_items', array( $this, 'disable_post_navigation' ) );
}
}
if ( 'archive-navigation-template' === $this->type ) {
$disable_archive_navigation = get_post_meta( $this->post_id, '_generate_disable_archive_navigation', true );
if ( $disable_archive_navigation ) {
remove_action( 'generate_after_loop', 'generate_do_post_navigation' );
}
}
}
/**
* Disable post navigation.
*
* @param array $items The post meta items.
*/
public function disable_post_navigation( $items ) {
return array_diff( $items, array( 'post-navigation' ) );
}
/**
* Builds the HTML structure for Page Headers.
*
* @since 1.11.0
*/
public function build_hook() {
echo GeneratePress_Elements_Helper::build_content( $this->post_id); // phpcs:ignore -- No escaping needed.
$post_id = $this->post_id;
if ( 'content-template' === $this->type ) {
// Check for child templates if this isn't already one.
if ( ! $this->has_parent ) {
$children = get_posts(
array(
'post_type' => 'gp_elements',
'post_parent' => $post_id,
'order' => 'ASC',
'orderby' => 'menu_order',
'no_found_rows' => true,
'post_status' => 'publish',
'numberposts' => 20,
'fields' => 'ids',
)
);
if ( ! empty( $children ) ) {
// Loop through any child templates and overwrite $post_id if applicable.
foreach ( (array) $children as $child_id ) {
if ( GeneratePress_Elements_Helper::should_render_content_template( $child_id ) ) {
$post_id = $child_id;
break;
}
}
} else {
// No children, check if parent should render.
if ( ! GeneratePress_Elements_Helper::should_render_content_template( $post_id ) ) {
return;
}
}
} else {
// No children, check if template should render.
if ( ! GeneratePress_Elements_Helper::should_render_content_template( $post_id ) ) {
return;
}
}
// Don't display child elements - they will replace the parent element if applicable.
if ( $this->has_parent ) {
return;
}
$tag_name_value = get_post_meta( $post_id, '_generate_post_loop_item_tagname', true );
$use_theme_container = get_post_meta( $post_id, '_generate_use_theme_post_container', true );
if ( $tag_name_value ) {
$tag_name = $tag_name_value;
} else {
$tag_name = 'article';
}
printf(
'<%s id="%s" class="%s">',
esc_attr( $tag_name ),
'post-' . get_the_ID(),
implode( ' ', get_post_class( 'dynamic-content-template' ) ) // phpcs:ignore -- No escaping needed.
);
if ( $use_theme_container ) {
echo '<div class="inside-article">';
}
}
if ( 'archive-navigation-template' === $this->type || 'post-navigation-template' === $this->type ) {
$use_theme_pagination_container = get_post_meta( $post_id, '_generate_use_archive_navigation_container', true );
if ( $use_theme_pagination_container ) {
echo '<div class="paging-navigation">';
}
}
echo GeneratePress_Elements_Helper::build_content( $post_id ); // phpcs:ignore -- No escaping needed.
if ( 'content-template' === $this->type ) {
if ( $use_theme_container ) {
echo '</div>';
}
echo '</' . esc_attr( $tag_name ) . '>';
}
if ( 'archive-navigation-template' === $this->type || 'post-navigation-template' === $this->type ) {
$use_theme_pagination_container = get_post_meta( $post_id, '_generate_use_archive_navigation_container', true );
if ( $use_theme_pagination_container ) {
echo '</div>';
}
}
}
}

View File

@ -51,6 +51,7 @@ class GeneratePress_Conditions {
'general:author' => esc_attr__( 'Author Archives', 'gp-premium' ),
'general:date' => esc_attr__( 'Date Archives', 'gp-premium' ),
'general:search' => esc_attr__( 'Search Results', 'gp-premium' ),
'general:no_results' => esc_attr__( 'No Search Results', 'gp-premium' ),
'general:404' => esc_attr__( '404 Template', 'gp-premium' ),
),
),
@ -188,6 +189,12 @@ class GeneratePress_Conditions {
$location = 'general:date';
} elseif ( is_search() ) {
$location = 'general:search';
global $wp_query;
if ( 0 === $wp_query->found_posts ) {
$location = 'general:no_results';
}
} elseif ( is_404() ) {
$location = 'general:404';
} elseif ( is_category() ) {

View File

@ -142,6 +142,351 @@ class GeneratePress_Elements_Helper {
return '';
}
$block_type = get_post_meta( $id, '_generate_block_type', true );
if ( 'site-footer' === $block_type ) {
$block_element->post_content = str_replace( '{{current_year}}', date( 'Y' ), $block_element->post_content ); // phpcs:ignore -- Prefer date().
}
return apply_filters( 'generate_do_block_element_content', do_blocks( $block_element->post_content ) );
}
/**
* Get our Element type label.
*
* @since 2.0.0
* @param string $type The type value.
*/
public static function get_element_type_label( $type ) {
switch ( $type ) {
case 'block':
$label = __( 'Block', 'gp-premium' );
break;
case 'header':
$label = __( 'Header', 'gp-premium' );
break;
case 'hook':
$label = __( 'Hook', 'gp-premium' );
break;
case 'layout':
$label = __( 'Layout', 'gp-premium' );
break;
case 'site-header':
$label = __( 'Site Header', 'gp-premium' );
break;
case 'page-hero':
$label = __( 'Page Hero', 'gp-premium' );
break;
case 'content-template':
$label = __( 'Content Template', 'gp-premium' );
break;
case 'post-meta-template':
$label = __( 'Post Meta Template', 'gp-premium' );
break;
case 'post-navigation-template':
$label = __( 'Post Navigation', 'gp-premium' );
break;
case 'archive-navigation-template':
$label = __( 'Archive Navigation', 'gp-premium' );
break;
case 'right-sidebar':
$label = __( 'Right Sidebar', 'gp-premium' );
break;
case 'left-sidebar':
$label = __( 'Left Sidebar', 'gp-premium' );
break;
case 'site-footer':
$label = __( 'Site Footer', 'gp-premium' );
break;
default:
$label = esc_html( str_replace( '-', ' ', ucfirst( $type ) ) );
break;
}
return $label;
}
/**
* Check for content template conditions.
*
* @since 2.0.0
* @param int $post_id The post to check.
*/
public static function should_render_content_template( $post_id ) {
$loop_item_display = get_post_meta( $post_id, '_generate_post_loop_item_display', true );
$display = true;
if ( 'has-term' === $loop_item_display ) {
$tax = get_post_meta( $post_id, '_generate_post_loop_item_display_tax', true );
if ( $tax ) {
$term = get_post_meta( $post_id, '_generate_post_loop_item_display_term', true );
// Add support for multiple comma separated terms.
if ( ! empty( $term ) ) {
$term = str_replace( ' ', '', $term );
$term = explode( ',', $term );
}
if ( has_term( $term, $tax ) ) {
$display = true;
} else {
$display = false;
}
}
}
if ( 'has-post-meta' === $loop_item_display ) {
$post_meta_name = get_post_meta( $post_id, '_generate_post_loop_item_display_post_meta', true );
if ( $post_meta_name ) {
$post_meta = get_post_meta( get_the_ID(), $post_meta_name, true );
if ( $post_meta ) {
$display = true;
} else {
$display = false;
}
}
}
if ( 'is-first-post' === $loop_item_display ) {
global $wp_query;
if ( 0 === $wp_query->current_post && ! is_paged() ) {
$display = true;
} else {
$display = false;
}
}
return apply_filters( 'generate_should_render_content_template', $display, $post_id );
}
/**
* Build our entire list of hooks to display.
*
* @since 1.7
*
* @return array Our list of hooks.
*/
public static function get_available_hooks() {
$hooks = array(
'scripts' => array(
'group' => esc_attr__( 'Scripts/Styles', 'gp-premium' ),
'hooks' => array(
'wp_head',
'wp_body_open',
'wp_footer',
),
),
'header' => array(
'group' => esc_attr__( 'Header', 'gp-premium' ),
'hooks' => array(
'generate_before_header',
'generate_after_header',
'generate_before_header_content',
'generate_after_header_content',
'generate_before_logo',
'generate_after_logo',
'generate_header',
),
),
'navigation' => array(
'group' => esc_attr__( 'Navigation', 'gp-premium' ),
'hooks' => array(
'generate_inside_navigation',
'generate_after_primary_menu',
'generate_inside_secondary_navigation',
'generate_inside_mobile_menu',
'generate_inside_mobile_menu_bar',
'generate_inside_mobile_header',
'generate_inside_slideout_navigation',
'generate_after_slideout_navigation',
),
),
'content' => array(
'group' => esc_attr__( 'Content', 'gp-premium' ),
'hooks' => array(
'generate_inside_site_container',
'generate_inside_container',
'generate_before_main_content',
'generate_after_main_content',
'generate_before_content',
'generate_after_content',
'generate_after_entry_content',
'generate_after_primary_content_area',
'generate_before_entry_title',
'generate_after_entry_title',
'generate_after_entry_header',
'generate_before_archive_title',
'generate_after_archive_title',
'generate_after_archive_description',
),
),
'comments' => array(
'group' => esc_attr__( 'Comments', 'gp-premium' ),
'hooks' => array(
'generate_before_comments_container',
'generate_before_comments',
'generate_inside_comments',
'generate_below_comments_title',
),
),
'sidebars' => array(
'group' => esc_attr__( 'Sidebars', 'gp-premium' ),
'hooks' => array(
'generate_before_right_sidebar_content',
'generate_after_right_sidebar_content',
'generate_before_left_sidebar_content',
'generate_after_left_sidebar_content',
),
),
'footer' => array(
'group' => esc_attr__( 'Footer', 'gp-premium' ),
'hooks' => array(
'generate_before_footer',
'generate_after_footer',
'generate_after_footer_widgets',
'generate_before_footer_content',
'generate_after_footer_content',
'generate_footer',
),
),
);
if ( class_exists( 'WooCommerce' ) ) {
$hooks['navigation']['hooks'][] = 'generate_mobile_cart_items';
$hooks['woocommerce-global'] = array(
'group' => esc_attr__( 'WooCommerce - Global', 'gp-premium' ),
'hooks' => array(
'woocommerce_before_main_content',
'woocommerce_after_main_content',
'woocommerce_sidebar',
'woocommerce_breadcrumb',
),
);
$hooks['woocommerce-shop'] = array(
'group' => esc_attr__( 'WooCommerce - Shop', 'gp-premium' ),
'hooks' => array(
'woocommerce_archive_description',
'woocommerce_before_shop_loop',
'woocommerce_after_shop_loop',
'woocommerce_before_shop_loop_item_title',
'woocommerce_after_shop_loop_item_title',
),
);
$hooks['woocommerce-product'] = array(
'group' => esc_attr__( 'WooCommerce - Product', 'gp-premium' ),
'hooks' => array(
'woocommerce_before_single_product',
'woocommerce_before_single_product_summary',
'woocommerce_after_single_product_summary',
'woocommerce_single_product_summary',
'woocommerce_share',
'woocommerce_simple_add_to_cart',
'woocommerce_before_add_to_cart_form',
'woocommerce_after_add_to_cart_form',
'woocommerce_before_add_to_cart_button',
'woocommerce_after_add_to_cart_button',
'woocommerce_before_add_to_cart_quantity',
'woocommerce_after_add_to_cart_quantity',
'woocommerce_product_meta_start',
'woocommerce_product_meta_end',
'woocommerce_after_single_product',
),
);
$hooks['woocommerce-cart'] = array(
'group' => esc_attr__( 'WooCommerce - Cart', 'gp-premium' ),
'hooks' => array(
'woocommerce_before_calculate_totals',
'woocommerce_after_calculate_totals',
'woocommerce_before_cart',
'woocommerce_after_cart_table',
'woocommerce_before_cart_table',
'woocommerce_before_cart_contents',
'woocommerce_cart_contents',
'woocommerce_after_cart_contents',
'woocommerce_cart_coupon',
'woocommerce_cart_actions',
'woocommerce_before_cart_totals',
'woocommerce_cart_totals_before_order_total',
'woocommerce_cart_totals_after_order_total',
'woocommerce_proceed_to_checkout',
'woocommerce_after_cart_totals',
'woocommerce_after_cart',
),
);
$hooks['woocommerce-checkout'] = array(
'group' => esc_attr__( 'WooCommerce - Checkout', 'gp-premium' ),
'hooks' => array(
'woocommerce_before_checkout_form',
'woocommerce_checkout_before_customer_details',
'woocommerce_checkout_after_customer_details',
'woocommerce_checkout_billing',
'woocommerce_before_checkout_billing_form',
'woocommerce_after_checkout_billing_form',
'woocommerce_before_order_notes',
'woocommerce_after_order_notes',
'woocommerce_checkout_shipping',
'woocommerce_checkout_before_order_review',
'woocommerce_checkout_order_review',
'woocommerce_review_order_before_cart_contents',
'woocommerce_review_order_after_cart_contents',
'woocommerce_review_order_before_order_total',
'woocommerce_review_order_after_order_total',
'woocommerce_review_order_before_payment',
'woocommerce_review_order_before_submit',
'woocommerce_review_order_after_submit',
'woocommerce_review_order_after_payment',
'woocommerce_checkout_after_order_review',
'woocommerce_after_checkout_form',
),
);
$hooks['woocommerce-account'] = array(
'group' => esc_attr__( 'WooCommerce - Account', 'gp-premium' ),
'hooks' => array(
'woocommerce_before_account_navigation',
'woocommerce_account_navigation',
'woocommerce_after_account_navigation',
),
);
}
if ( function_exists( 'generate_is_using_flexbox' ) && generate_is_using_flexbox() ) {
$hooks['navigation']['hooks'][] = 'generate_menu_bar_items';
}
if ( defined( 'GENERATE_VERSION' ) && version_compare( GENERATE_VERSION, '3.0.0-alpha.1', '>' ) ) {
$hooks['navigation']['hooks'][] = 'generate_before_navigation';
$hooks['navigation']['hooks'][] = 'generate_after_navigation';
$hooks['navigation']['hooks'][] = 'generate_after_mobile_menu_button';
$hooks['navigation']['hooks'][] = 'generate_inside_mobile_menu_control_wrapper';
$hooks['content']['hooks'][] = 'generate_after_loop';
$hooks['content']['hooks'][] = 'generate_before_do_template_part';
$hooks['content']['hooks'][] = 'generate_after_do_template_part';
}
return apply_filters( 'generate_hooks_list', $hooks );
}
}

View File

@ -96,7 +96,26 @@ class GeneratePress_Hero {
$display = apply_filters( 'generate_header_element_display', GeneratePress_Conditions::show_data( $this->conditional, $this->exclude, $this->users ), $post_id );
/**
* Simplify filter name.
*
* @since 2.0.0
*/
$display = apply_filters(
'generate_element_display',
$display,
$post_id
);
if ( $display ) {
global $generate_elements;
$generate_elements[ $post_id ] = array(
'is_block_element' => false,
'type' => 'header',
'id' => $post_id,
);
$location = apply_filters( 'generate_page_hero_location', 'generate_after_header', $post_id );
add_action( $location, array( $this, 'build_hero' ), 9 );

View File

@ -163,7 +163,26 @@ class GeneratePress_Hook {
$display = apply_filters( 'generate_hook_element_display', GeneratePress_Conditions::show_data( $this->conditional, $this->exclude, $this->users ), $post_id );
/**
* Simplify filter name.
*
* @since 2.0.0
*/
$display = apply_filters(
'generate_element_display',
$display,
$post_id
);
if ( $display ) {
global $generate_elements;
$generate_elements[ $post_id ] = array(
'is_block_element' => false,
'type' => 'hook',
'id' => $post_id,
);
if ( 'generate_header' === $this->hook && $this->disable_site_header ) {
remove_action( 'generate_header', 'generate_construct_header' );
}

View File

@ -232,7 +232,26 @@ class GeneratePress_Site_Layout {
$display = apply_filters( 'generate_layout_element_display', GeneratePress_Conditions::show_data( $this->conditional, $this->exclude, $this->users ), $post_id );
/**
* Simplify filter name.
*
* @since 2.0.0
*/
$display = apply_filters(
'generate_element_display',
$display,
$post_id
);
if ( $display ) {
global $generate_elements;
$generate_elements[ $post_id ] = array(
'is_block_element' => false,
'type' => 'layout',
'id' => $post_id,
);
add_action( 'wp', array( $this, 'after_setup' ), 100 );
add_action( 'wp_enqueue_scripts', array( $this, 'build_css' ), 50 );
@ -285,6 +304,7 @@ class GeneratePress_Site_Layout {
if ( $this->disable_primary_navigation ) {
add_filter( 'generate_navigation_location', '__return_false', 20 );
add_filter( 'generate_disable_mobile_header_menu', '__return_true' );
}
if ( $this->disable_secondary_navigation ) {

View File

@ -47,6 +47,7 @@ class GeneratePress_Elements_Metabox {
add_action( 'save_post', array( $this, 'save' ) );
add_action( 'wp_ajax_generate_elements_get_location_terms', array( $this, 'get_terms' ) );
add_action( 'wp_ajax_generate_elements_get_location_posts', array( $this, 'get_posts' ) );
add_action( 'wp_ajax_generate_elements_get_location_objects', array( $this, 'get_all_objects' ) );
}
/**
@ -63,6 +64,14 @@ class GeneratePress_Elements_Metabox {
if ( ! $element_type ) {
$element_type = 'no-element-type';
if ( function_exists( 'get_current_screen' ) ) {
$current_screen = get_current_screen();
if ( ! empty( $current_screen->is_block_editor ) ) {
$element_type = 'block';
}
}
}
return $element_type;
@ -87,9 +96,21 @@ class GeneratePress_Elements_Metabox {
$classes .= ' no-element-type';
}
if ( 'header' === $element_type && get_post_meta( get_the_ID(), '_generate_element_content', true ) ) {
$classes .= ' element-has-page-hero';
}
$block_type = get_post_meta( get_the_ID(), '_generate_block_type', true );
if ( $block_type ) {
if ( 'content-template' === $block_type && get_post_meta( get_the_ID(), '_generate_use_theme_post_container', true ) ) {
$classes .= ' using-theme-post-container';
}
if ( ( 'archive-navigation-template' === $block_type || 'post-navigation-template' === $block_type ) && get_post_meta( get_the_ID(), '_generate_use_archive_navigation_container', true ) ) {
$classes .= ' using-theme-pagination-container';
}
$classes .= ' ' . $block_type . '-block-type';
}
}
@ -152,7 +173,12 @@ class GeneratePress_Elements_Metabox {
wp_enqueue_media();
wp_enqueue_script( 'wp-color-picker' );
wp_enqueue_style( 'wp-color-picker' );
wp_enqueue_script( 'wp-color-picker-alpha', GP_LIBRARY_DIRECTORY_URL . 'alpha-color-picker/wp-color-picker-alpha.min.js', array( 'wp-color-picker' ), '2.1.4', true );
wp_enqueue_script( 'wp-color-picker-alpha', GP_LIBRARY_DIRECTORY_URL . 'alpha-color-picker/wp-color-picker-alpha.min.js', array( 'wp-color-picker' ), '3.0.0', true );
wp_add_inline_script(
'wp-color-picker-alpha',
'jQuery( function() { jQuery( ".color-picker" ).wpColorPicker(); } );'
);
if ( function_exists( 'wp_add_inline_script' ) && function_exists( 'generate_get_default_color_palettes' ) ) {
// Grab our palette array and turn it into JS.
@ -167,31 +193,12 @@ class GeneratePress_Elements_Metabox {
wp_enqueue_script( 'select2', GP_LIBRARY_DIRECTORY_URL . 'select2/select2.full.min.js', array( 'jquery', 'generate-elements-metabox' ), '4.0.13', true );
$css = '';
$containerWidth = function_exists( 'generate_get_option' ) ? generate_get_option( 'container_width' ) : 1100;
$rightSidebarWidth = apply_filters( 'generate_right_sidebar_width', '25' );
$leftSidebarWidth = apply_filters( 'generate_left_sidebar_width', '25' );
$containerWidth = floatval( $containerWidth );
$leftSidebarWidth = '0.' . $leftSidebarWidth;
$rightSidebarWidth = '0.' . $rightSidebarWidth;
$leftSidebarWidth = $containerWidth - ( $containerWidth * $leftSidebarWidth );
$rightSidebarWidth = $containerWidth - ( $containerWidth * $rightSidebarWidth );
$leftSidebarWidth = $containerWidth - $leftSidebarWidth;
$rightSidebarWidth = $containerWidth - $rightSidebarWidth;
$css .= '.left-sidebar-block-type div:not(.block-editor-inner-blocks) > .block-editor-block-list__layout {max-width:' . $leftSidebarWidth . 'px;margin-left: auto;margin-right: auto;box-sizing: content-box;}';
$css .= '.right-sidebar-block-type div:not(.block-editor-inner-blocks) > .block-editor-block-list__layout {max-width:' . $rightSidebarWidth . 'px;margin-left: auto;margin-right: auto;box-sizing: content-box;}';
$css .= '.left-sidebar-block-type div:not(.block-editor-inner-blocks) > .block-editor-block-list__layout, .right-sidebar-block-type div:not(.block-editor-inner-blocks) > .block-editor-block-list__layout {padding: 10px;}';
$css .= 'body.left-sidebar-block-type div:not(.block-editor-inner-blocks) > .block-editor-block-list__layout .block-editor-block-list__block, body.right-sidebar-block-type div:not(.block-editor-inner-blocks) > .block-editor-block-list__layout .block-editor-block-list__block {margin-top:0;margin-bottom:0;}';
if ( function_exists( 'generate_get_option' ) && 'separate-containers' === generate_get_option( 'content_layout_setting' ) ) {
$css .= 'body.left-sidebar-block-type div:not(.block-editor-inner-blocks) > .block-editor-block-list__layout, body.right-sidebar-block-type div:not(.block-editor-inner-blocks) > .block-editor-block-list__layout {background: ' . generate_get_option( 'background_color' ) . ';}';
$css .= 'body.left-sidebar-block-type .block-editor-block-list__layout.is-root-container, body.right-sidebar-block-type .block-editor-block-list__layout.is-root-container {background: ' . generate_get_option( 'background_color' ) . ';}';
$css .= 'body.content-template-block-type:not(.using-theme-post-container) .block-editor-block-list__layout.is-root-container, body.archive-navigation-template-block-type:not(.using-theme-pagination-container) .block-editor-block-list__layout.is-root-container {background: ' . generate_get_option( 'background_color' ) . ';}';
}
$css .= '.editor-styles-wrapper .wp-block:not(.editor-post-title__block), .site-header-block-type .editor-styles-wrapper .wp-block:not(.editor-post-title__block), .site-footer-block-type .editor-styles-wrapper .wp-block:not(.editor-post-title__block) {max-width: 100%;}';
wp_add_inline_style( 'generate-elements-metabox', $css );
}
}
@ -204,7 +211,7 @@ class GeneratePress_Elements_Metabox {
*/
public function register_metabox() {
// Title not translated on purpose.
add_meta_box( 'generate_premium_elements', 'Element', array( $this, 'element_fields' ), 'gp_elements', 'normal' );
add_meta_box( 'generate_premium_elements', 'Element', array( $this, 'element_fields' ), 'gp_elements', 'normal', 'high' );
add_meta_box( 'generate_page_hero_template_tags', __( 'Template Tags', 'gp-premium' ), array( $this, 'template_tags' ), 'gp_elements', 'side', 'low' );
remove_meta_box( 'slugdiv', 'gp_elements', 'normal' );
}
@ -220,9 +227,14 @@ class GeneratePress_Elements_Metabox {
wp_nonce_field( basename( __FILE__ ), 'generate_elements_nonce' );
$type = self::get_element_type();
$page_hero_class = '';
$merge = get_post_meta( get_the_ID(), '_generate_site_header_merge', true );
$conditions_set = get_post_meta( get_the_ID(), '_generate_element_display_conditions', true );
$post_status = get_post_status( get_the_ID() );
if ( 'header' === $type && get_post_meta( get_the_ID(), '_generate_element_content', true ) ) {
$page_hero_class = ' has-page-hero';
}
?>
<div class="gp-element-type" style="display: none;">
<select class="select-type" name="_generate_element_type">
@ -240,29 +252,29 @@ class GeneratePress_Elements_Metabox {
</div>
<?php endif; ?>
<div class="element-settings <?php echo esc_html( $type ); ?>">
<div class="element-settings <?php echo esc_html( $type . $page_hero_class ); ?>">
<?php if ( 'hook' === $type || 'header' === $type ) : ?>
<textarea id="generate-element-content" name="_generate_element_content"><?php echo esc_textarea( get_post_meta( get_the_ID(), '_generate_element_content', true ) ); ?></textarea>
<?php endif; ?>
<ul class="element-metabox-tabs">
<?php if ( 'header' === $type ) : ?>
<li data-type="header" <?php echo 'header' === $type ? 'class="is-selected" ' : ''; ?>data-tab="hero">
<li data-type="header" <?php echo 'header' === $type && '' === $page_hero_class ? 'class="is-selected" ' : ''; ?>data-tab="site-header">
<a href="#">
<?php _e( 'Page Hero', 'gp-premium' ); ?>
<?php _e( 'Site Header', 'gp-premium' ); ?>
</a>
</li>
<li data-type="header" data-tab="site-header">
<li data-type="header" <?php echo 'header' === $type && '' !== $page_hero_class ? 'class="is-selected" ' : ''; ?>data-tab="hero">
<a href="#">
<?php _e( 'Site Header', 'gp-premium' ); ?>
<?php _e( 'Page Hero', 'gp-premium' ); ?>
</a>
</li>
<?php endif; ?>
<li data-type="hook" <?php echo ( 'hook' === $type || 'block' === $type ) ? 'class="is-selected" ' : ''; ?>data-tab="hook-settings">
<a href="#">
<?php _e( 'Settings', 'gp-premium' ); ?>
<?php echo 'block' === $type ? esc_attr__( 'Display Rules', 'gp-premium' ) : esc_attr__( 'Settings', 'gp-premium' ); ?>
</a>
</li>
@ -312,30 +324,7 @@ class GeneratePress_Elements_Metabox {
<table class="generate-elements-settings" data-type="hook" data-tab="hook-settings">
<tbody>
<?php
if ( 'block' === $type ) :
?>
<tr id="block-row" class="generate-element-row">
<td class="generate-element-row-heading">
<label for="_generate_block_type"><?php _e( 'Block Type', 'gp-premium' ); ?></label>
</td>
<td class="generate-element-row-content">
<select id="_generate_block_type" name="_generate_block_type">
<option <?php selected( get_post_meta( get_the_ID(), '_generate_block_type', true ), 'hook' ); ?> value="hook"><?php esc_attr_e( 'Hook', 'gp-premium' ); ?></option>
<option <?php selected( get_post_meta( get_the_ID(), '_generate_block_type', true ), 'site-header' ); ?> value="site-header"><?php esc_attr_e( 'Site Header', 'gp-premium' ); ?></option>
<option <?php selected( get_post_meta( get_the_ID(), '_generate_block_type', true ), 'site-footer' ); ?> value="site-footer"><?php esc_attr_e( 'Site Footer', 'gp-premium' ); ?></option>
<option <?php selected( get_post_meta( get_the_ID(), '_generate_block_type', true ), 'right-sidebar' ); ?> value="right-sidebar"><?php esc_attr_e( 'Right Sidebar', 'gp-premium' ); ?></option>
<option <?php selected( get_post_meta( get_the_ID(), '_generate_block_type', true ), 'left-sidebar' ); ?> value="left-sidebar"><?php esc_attr_e( 'Left Sidebar', 'gp-premium' ); ?></option>
</select>
<div class="sidebar-notice" <?php echo 'left-sidebar' === get_post_meta( get_the_ID(), '_generate_block_type', true ) || 'right-sidebar' === get_post_meta( get_the_ID(), '_generate_block_type', true ) ? 'style="display: block;"' : ''; ?>>
<?php _e( 'This will remove the current sidebar widgets for the selected sidebar. Your layout must have a sidebar set for this Element to show.', 'gp-premium' ); ?>
</div>
</td>
</tr>
<?php
endif;
if ( 'hook' === $type || 'block' === $type ) :
if ( 'hook' === $type ) :
?>
<tr id="hook-row" class="generate-element-row hook-row <?php echo '' !== get_post_meta( get_the_ID(), '_generate_block_type', true ) && 'hook' !== get_post_meta( get_the_ID(), '_generate_block_type', true ) ? 'hide-hook-row' : ''; ?>">
<td class="generate-element-row-heading">
@ -430,7 +419,7 @@ class GeneratePress_Elements_Metabox {
<?php
endif;
if ( 'hook' === $type || 'block' === $type ) :
if ( 'hook' === $type ) :
?>
<tr class="generate-element-row hook-row <?php echo '' !== get_post_meta( get_the_ID(), '_generate_block_type', true ) && 'hook' !== get_post_meta( get_the_ID(), '_generate_block_type', true ) ? 'hide-hook-row' : ''; ?>">
<td class="generate-element-row-heading">
@ -753,7 +742,7 @@ class GeneratePress_Elements_Metabox {
<label for="_generate_hero_background_color"><?php _e( 'Background Color', 'gp-premium' ); ?></label>
</td>
<td class="generate-element-row-content">
<input class="color-picker" data-alpha="true" type="text" name="_generate_hero_background_color" id="_generate_hero_background_color" value="<?php echo esc_attr( get_post_meta( get_the_ID(), '_generate_hero_background_color', true ) ); ?>" />
<input class="color-picker" data-alpha-enabled="true" data-alpha-color-type="hex" type="text" name="_generate_hero_background_color" id="_generate_hero_background_color" value="<?php echo esc_attr( get_post_meta( get_the_ID(), '_generate_hero_background_color', true ) ); ?>" />
</td>
</tr>
@ -836,7 +825,7 @@ class GeneratePress_Elements_Metabox {
<label for="_generate_site_header_background_color"><?php _e( 'Header Background', 'gp-premium' ); ?></label>
</td>
<td class="generate-element-row-content">
<input class="color-picker" data-alpha="true" type="text" name="_generate_site_header_background_color" id="_generate_site_header_background_color" value="<?php echo esc_attr( get_post_meta( get_the_ID(), '_generate_site_header_background_color', true ) ); ?>" />
<input class="color-picker" data-alpha-enabled="true" data-alpha-color-type="hex" type="text" name="_generate_site_header_background_color" id="_generate_site_header_background_color" value="<?php echo esc_attr( get_post_meta( get_the_ID(), '_generate_site_header_background_color', true ) ); ?>" />
</td>
</tr>
@ -998,7 +987,7 @@ class GeneratePress_Elements_Metabox {
<label for="_generate_navigation_background_color"><?php _e( 'Navigation Background', 'gp-premium' ); ?></label>
</td>
<td class="generate-element-row-content">
<input class="color-picker" data-alpha="true" type="text" name="_generate_navigation_background_color" id="_generate_navigation_background_color" value="<?php echo esc_attr( get_post_meta( get_the_ID(), '_generate_navigation_background_color', true ) ); ?>" />
<input class="color-picker" data-alpha-enabled="true" data-alpha-color-type="hex" type="text" name="_generate_navigation_background_color" id="_generate_navigation_background_color" value="<?php echo esc_attr( get_post_meta( get_the_ID(), '_generate_navigation_background_color', true ) ); ?>" />
</td>
</tr>
@ -1016,7 +1005,7 @@ class GeneratePress_Elements_Metabox {
<label for="_generate_navigation_background_color_hover"><?php _e( 'Navigation Background Hover', 'gp-premium' ); ?></label>
</td>
<td class="generate-element-row-content">
<input class="color-picker" data-alpha="true" type="text" name="_generate_navigation_background_color_hover" id="_generate_navigation_background_color_hover" value="<?php echo esc_attr( get_post_meta( get_the_ID(), '_generate_navigation_background_color_hover', true ) ); ?>" />
<input class="color-picker" data-alpha-enabled="true" data-alpha-color-type="hex" type="text" name="_generate_navigation_background_color_hover" id="_generate_navigation_background_color_hover" value="<?php echo esc_attr( get_post_meta( get_the_ID(), '_generate_navigation_background_color_hover', true ) ); ?>" />
</td>
</tr>
@ -1034,7 +1023,7 @@ class GeneratePress_Elements_Metabox {
<label for="_generate_navigation_background_color_current"><?php _e( 'Navigation Background Current', 'gp-premium' ); ?></label>
</td>
<td class="generate-element-row-content">
<input class="color-picker" data-alpha="true" type="text" name="_generate_navigation_background_color_current" id="_generate_navigation_background_color_current" value="<?php echo esc_attr( get_post_meta( get_the_ID(), '_generate_navigation_background_color_current', true ) ); ?>" />
<input class="color-picker" data-alpha-enabled="true" data-alpha-color-type="hex" type="text" name="_generate_navigation_background_color_current" id="_generate_navigation_background_color_current" value="<?php echo esc_attr( get_post_meta( get_the_ID(), '_generate_navigation_background_color_current', true ) ); ?>" />
</td>
</tr>
@ -1659,17 +1648,6 @@ class GeneratePress_Elements_Metabox {
delete_post_meta( $post_id, $type_key );
}
// Save the block type.
if ( 'block' === $type_value && isset( $_POST['_generate_block_type'] ) ) {
$block_type_value = sanitize_key( $_POST['_generate_block_type'] );
if ( $block_type_value ) {
update_post_meta( $post_id, '_generate_block_type', $block_type_value );
} else {
delete_post_meta( $post_id, '_generate_block_type' );
}
}
// Content.
if ( isset( $_POST['_generate_element_content'] ) ) {
$key = '_generate_element_content';
@ -1688,7 +1666,7 @@ class GeneratePress_Elements_Metabox {
}
// Save Hooks type.
if ( 'hook' === $type_value || 'block' === $type_value ) {
if ( 'hook' === $type_value ) {
$hook_values = array(
'_generate_hook' => 'text',
'_generate_custom_hook' => 'text',
@ -2078,45 +2056,93 @@ class GeneratePress_Elements_Metabox {
die();
}
/**
* Get all of our posts and terms in one go on load.
*
* @since 2.0.0
*/
public function get_all_objects() {
check_ajax_referer( 'generate-elements-location', 'nonce' );
$current_user_can = 'manage_options';
if ( apply_filters( 'generate_elements_metabox_ajax_allow_editors', false ) ) {
$current_user_can = 'edit_posts';
}
if ( ! current_user_can( $current_user_can ) ) {
return;
}
if ( ! isset( $_POST['posts'] ) && ! isset( $_POST['terms'] ) ) {
return;
}
$posts = array();
$terms = array();
if ( ! empty( $_POST['posts'] ) ) {
$posts = array_map( 'sanitize_text_field', $_POST['posts'] );
}
if ( ! empty( $_POST['terms'] ) ) {
$terms = array_map( 'sanitize_text_field', $_POST['terms'] );
}
$all_posts = self::get_post_type_posts( $posts );
$all_terms = self::get_taxonomy_terms( $terms );
echo wp_json_encode( array_merge( $all_posts, $all_terms ) );
die();
}
/**
* Look up posts inside a post type.
*
* @since 1.7
*
* @param string $post_type The post type to look up.
* @param string|array $post_type The post type to look up.
* @return array
*/
public static function get_post_type_posts( $post_type ) {
global $wpdb;
$post_status = array( 'publish', 'future', 'draft', 'pending', 'private' );
$object = get_post_type_object( $post_type );
$data = array(
'type' => 'posts',
'postType' => $post_type,
'label' => $object->label,
'objects' => array(),
);
if ( 'attachment' === $post_type ) {
$posts = $wpdb->get_results( $wpdb->prepare( "SELECT ID, post_title from $wpdb->posts where post_type = %s ORDER BY post_title", $post_type ) );
} else {
$format = implode( ', ', array_fill( 0, count( $post_status ), '%s' ) );
$query = sprintf( "SELECT ID, post_title from $wpdb->posts where post_type = '%s' AND post_status IN(%s) ORDER BY post_title", $post_type, $format );
// @codingStandardsIgnoreLine
$posts = $wpdb->get_results( $wpdb->prepare( $query, $post_status ) );
if ( ! is_array( $post_type ) ) {
$post_type = array( $post_type );
}
foreach ( $posts as $post ) {
$title = ( '' !== $post->post_title ) ? esc_attr( $post->post_title ) : $post_type . '-' . $post->ID;
$data['objects'][] = array(
'id' => $post->ID,
'name' => $title,
$data = array();
foreach ( $post_type as $type ) {
global $wpdb;
$post_status = array( 'publish', 'future', 'draft', 'pending', 'private' );
$object = get_post_type_object( $type );
$data[ $type ] = array(
'type' => 'posts',
'postType' => $type,
'label' => $object->label,
'objects' => array(),
);
if ( 'attachment' === $type ) {
$posts = $wpdb->get_results( $wpdb->prepare( "SELECT ID, post_title from $wpdb->posts where post_type = %s ORDER BY post_title", $type ) );
} else {
$format = implode( ', ', array_fill( 0, count( $post_status ), '%s' ) );
$query = sprintf( "SELECT ID, post_title from $wpdb->posts where post_type = '%s' AND post_status IN(%s) ORDER BY post_title", $type, $format );
// @codingStandardsIgnoreLine
$posts = $wpdb->get_results( $wpdb->prepare( $query, $post_status ) );
}
foreach ( $posts as $post ) {
$title = ( '' !== $post->post_title ) ? esc_attr( $post->post_title ) : $type . '-' . $post->ID;
$data[ $type ]['objects'][] = array(
'id' => $post->ID,
'name' => $title,
);
}
}
return $data;
@ -2127,31 +2153,39 @@ class GeneratePress_Elements_Metabox {
*
* @since 1.7
*
* @param int $tax_id The taxonomy ID.
* @param int|array $tax_id The taxonomy ID.
* @return array
*/
public static function get_taxonomy_terms( $tax_id ) {
$tax = get_taxonomy( $tax_id );
if ( ! is_array( $tax_id ) ) {
$tax_id = array( $tax_id );
}
$terms = get_terms(
array(
'taxonomy' => $tax_id,
'hide_empty' => false,
)
);
$data = array();
$data = array(
'type' => 'terms',
'taxonomy' => $tax_id,
'label' => $tax->label,
'objects' => array(),
);
foreach ( $tax_id as $id ) {
$tax = get_taxonomy( $id );
foreach ( $terms as $term ) {
$data['objects'][] = array(
'id' => $term->term_id,
'name' => esc_attr( $term->name ),
$terms = get_terms(
array(
'taxonomy' => $id,
'hide_empty' => false,
)
);
$data[ $id ] = array(
'type' => 'terms',
'taxonomy' => $id,
'label' => $tax->label,
'objects' => array(),
);
foreach ( $terms as $term ) {
$data[ $id ]['objects'][] = array(
'id' => $term->term_id,
'name' => esc_attr( $term->name ),
);
}
}
return $data;
@ -2165,209 +2199,7 @@ class GeneratePress_Elements_Metabox {
* @return array Our list of hooks.
*/
public static function get_available_hooks() {
$hooks = array(
'scripts' => array(
'group' => esc_attr__( 'Scripts & Styles', 'gp-premium' ),
'hooks' => array(
'wp_head',
'wp_body_open',
'wp_footer',
),
),
'header' => array(
'group' => esc_attr__( 'Header', 'gp-premium' ),
'hooks' => array(
'generate_before_header',
'generate_after_header',
'generate_before_header_content',
'generate_after_header_content',
'generate_before_logo',
'generate_after_logo',
'generate_header',
),
),
'navigation' => array(
'group' => esc_attr__( 'Navigation', 'gp-premium' ),
'hooks' => array(
'generate_inside_navigation',
'generate_inside_secondary_navigation',
'generate_inside_mobile_menu',
'generate_inside_mobile_menu_bar',
'generate_inside_mobile_header',
'generate_inside_slideout_navigation',
'generate_after_slideout_navigation',
),
),
'content' => array(
'group' => esc_attr__( 'Content', 'gp-premium' ),
'hooks' => array(
'generate_inside_site_container',
'generate_inside_container',
'generate_before_main_content',
'generate_after_main_content',
'generate_before_content',
'generate_after_content',
'generate_after_entry_content',
'generate_after_primary_content_area',
'generate_before_entry_title',
'generate_after_entry_title',
'generate_after_entry_header',
'generate_before_archive_title',
'generate_after_archive_title',
'generate_after_archive_description',
),
),
'comments' => array(
'group' => esc_attr__( 'Comments', 'gp-premium' ),
'hooks' => array(
'generate_before_comments_container',
'generate_before_comments',
'generate_inside_comments',
'generate_below_comments_title',
),
),
'sidebars' => array(
'group' => esc_attr__( 'Sidebars', 'gp-premium' ),
'hooks' => array(
'generate_before_right_sidebar_content',
'generate_after_right_sidebar_content',
'generate_before_left_sidebar_content',
'generate_after_left_sidebar_content',
),
),
'footer' => array(
'group' => esc_attr__( 'Footer', 'gp-premium' ),
'hooks' => array(
'generate_before_footer',
'generate_after_footer',
'generate_after_footer_widgets',
'generate_before_footer_content',
'generate_after_footer_content',
'generate_footer',
),
),
);
if ( class_exists( 'WooCommerce' ) ) {
$hooks['navigation']['hooks'][] = 'generate_mobile_cart_items';
$hooks['woocommerce-global'] = array(
'group' => esc_attr__( 'WooCommerce - Global', 'gp-premium' ),
'hooks' => array(
'woocommerce_before_main_content',
'woocommerce_after_main_content',
'woocommerce_sidebar',
'woocommerce_breadcrumb',
),
);
$hooks['woocommerce-shop'] = array(
'group' => esc_attr__( 'WooCommerce - Shop', 'gp-premium' ),
'hooks' => array(
'woocommerce_archive_description',
'woocommerce_before_shop_loop',
'woocommerce_after_shop_loop',
'woocommerce_before_shop_loop_item_title',
'woocommerce_after_shop_loop_item_title',
),
);
$hooks['woocommerce-product'] = array(
'group' => esc_attr__( 'WooCommerce - Product', 'gp-premium' ),
'hooks' => array(
'woocommerce_before_single_product',
'woocommerce_before_single_product_summary',
'woocommerce_after_single_product_summary',
'woocommerce_single_product_summary',
'woocommerce_share',
'woocommerce_simple_add_to_cart',
'woocommerce_before_add_to_cart_form',
'woocommerce_after_add_to_cart_form',
'woocommerce_before_add_to_cart_button',
'woocommerce_after_add_to_cart_button',
'woocommerce_before_add_to_cart_quantity',
'woocommerce_after_add_to_cart_quantity',
'woocommerce_product_meta_start',
'woocommerce_product_meta_end',
'woocommerce_after_single_product',
),
);
$hooks['woocommerce-cart'] = array(
'group' => esc_attr__( 'WooCommerce - Cart', 'gp-premium' ),
'hooks' => array(
'woocommerce_before_calculate_totals',
'woocommerce_after_calculate_totals',
'woocommerce_before_cart',
'woocommerce_after_cart_table',
'woocommerce_before_cart_table',
'woocommerce_before_cart_contents',
'woocommerce_cart_contents',
'woocommerce_after_cart_contents',
'woocommerce_cart_coupon',
'woocommerce_cart_actions',
'woocommerce_before_cart_totals',
'woocommerce_cart_totals_before_order_total',
'woocommerce_cart_totals_after_order_total',
'woocommerce_proceed_to_checkout',
'woocommerce_after_cart_totals',
'woocommerce_after_cart',
),
);
$hooks['woocommerce-checkout'] = array(
'group' => esc_attr__( 'WooCommerce - Checkout', 'gp-premium' ),
'hooks' => array(
'woocommerce_before_checkout_form',
'woocommerce_checkout_before_customer_details',
'woocommerce_checkout_after_customer_details',
'woocommerce_checkout_billing',
'woocommerce_before_checkout_billing_form',
'woocommerce_after_checkout_billing_form',
'woocommerce_before_order_notes',
'woocommerce_after_order_notes',
'woocommerce_checkout_shipping',
'woocommerce_checkout_before_order_review',
'woocommerce_checkout_order_review',
'woocommerce_review_order_before_cart_contents',
'woocommerce_review_order_after_cart_contents',
'woocommerce_review_order_before_order_total',
'woocommerce_review_order_after_order_total',
'woocommerce_review_order_before_payment',
'woocommerce_review_order_before_submit',
'woocommerce_review_order_after_submit',
'woocommerce_review_order_after_payment',
'woocommerce_checkout_after_order_review',
'woocommerce_after_checkout_form',
),
);
$hooks['woocommerce-account'] = array(
'group' => esc_attr__( 'WooCommerce - Account', 'gp-premium' ),
'hooks' => array(
'woocommerce_before_account_navigation',
'woocommerce_account_navigation',
'woocommerce_after_account_navigation',
),
);
}
if ( function_exists( 'generate_is_using_flexbox' ) && generate_is_using_flexbox() ) {
$hooks['navigation']['hooks'][] = 'generate_menu_bar_items';
}
if ( defined( 'GENERATE_VERSION' ) && version_compare( GENERATE_VERSION, '3.0.0-alpha.1', '>' ) ) {
$hooks['navigation']['hooks'][] = 'generate_before_navigation';
$hooks['navigation']['hooks'][] = 'generate_after_navigation';
$hooks['navigation']['hooks'][] = 'generate_after_mobile_menu_button';
$hooks['navigation']['hooks'][] = 'generate_inside_mobile_menu_control_wrapper';
$hooks['content']['hooks'][] = 'generate_after_loop';
$hooks['content']['hooks'][] = 'generate_before_do_template_part';
$hooks['content']['hooks'][] = 'generate_after_do_template_part';
}
return apply_filters( 'generate_hooks_list', $hooks );
return GeneratePress_Elements_Helper::get_available_hooks();
}
/**

View File

@ -74,25 +74,29 @@ class GeneratePress_Elements_Post_Type {
*/
public function post_type() {
$labels = array(
'name' => _x( 'Elements', 'Post Type General Name', 'gp-premium' ),
'singular_name' => _x( 'Element', 'Post Type Singular Name', 'gp-premium' ),
'menu_name' => __( 'Elements', 'gp-premium' ),
'all_items' => __( 'All Elements', 'gp-premium' ),
'add_new' => __( 'Add New Element', 'gp-premium' ),
'add_new_item' => __( 'Add New Element', 'gp-premium' ),
'new_item' => __( 'New Element', 'gp-premium' ),
'edit_item' => __( 'Edit Element', 'gp-premium' ),
'update_item' => __( 'Update Element', 'gp-premium' ),
'search_items' => __( 'Search Element', 'gp-premium' ),
'featured_image' => __( 'Background Image', 'gp-premium' ),
'set_featured_image' => __( 'Set background image', 'gp-premium' ),
'remove_featured_image' => __( 'Remove background image', 'gp-premium' ),
'name' => _x( 'Elements', 'Post Type General Name', 'gp-premium' ),
'singular_name' => _x( 'Element', 'Post Type Singular Name', 'gp-premium' ),
'menu_name' => __( 'Elements', 'gp-premium' ),
'all_items' => __( 'All Elements', 'gp-premium' ),
'add_new' => __( 'Add New Element', 'gp-premium' ),
'add_new_item' => __( 'Add New Element', 'gp-premium' ),
'new_item' => __( 'New Element', 'gp-premium' ),
'edit_item' => __( 'Edit Element', 'gp-premium' ),
'update_item' => __( 'Update Element', 'gp-premium' ),
'search_items' => __( 'Search Element', 'gp-premium' ),
'featured_image' => __( 'Background Image', 'gp-premium' ),
'set_featured_image' => __( 'Set background image', 'gp-premium' ),
'remove_featured_image' => __( 'Remove background image', 'gp-premium' ),
'item_published' => __( 'Element published.', 'gp-premium' ),
'item_updated' => __( 'Element updated.', 'gp-premium' ),
'item_scheduled' => __( 'Element scheduled.', 'gp-premium' ),
'item_reverted_to_draft' => __( 'Element reverted to draft.', 'gp-premium' ),
);
$args = array(
'labels' => $labels,
'supports' => array( 'title', 'editor', 'thumbnail' ),
'hierarchical' => false,
'supports' => array( 'title', 'editor', 'thumbnail', 'custom-fields', 'page-attributes' ),
'hierarchical' => true,
'public' => false,
'show_ui' => true,
'show_in_menu' => false,
@ -134,10 +138,11 @@ class GeneratePress_Elements_Post_Type {
if ( 'block' !== $type ) {
$args['supports'] = array( 'title', 'thumbnail' );
$args['show_in_rest'] = false;
$args['hierarchical'] = false;
}
if ( 'block' === $type ) {
$args['supports'] = array( 'title', 'editor' );
$args['supports'] = array( 'title', 'editor', 'custom-fields', 'page-attributes' );
}
if ( 'layout' === $type ) {
@ -196,7 +201,13 @@ class GeneratePress_Elements_Post_Type {
* @since 1.7
*/
public function build_element_type_filter() {
if ( 'gp_elements' !== get_post_type() ) {
$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : false;
if ( ! $screen ) {
return;
}
if ( ! isset( $screen->post_type ) || 'gp_elements' !== $screen->post_type ) {
return;
}
@ -207,23 +218,52 @@ class GeneratePress_Elements_Post_Type {
'layout' => esc_html__( 'Layouts', 'gp-premium' ),
);
$current_element_type = isset( $_GET['gp_element_type_filter'] ) ? esc_html( $_GET['gp_element_type_filter'] ) : ''; // phpcs:ignore -- No processing happening.
$current_block_type = isset( $_GET['gp_elements_block_type_filter'] ) ? esc_html( $_GET['gp_elements_block_type_filter'] ) : ''; // phpcs:ignore -- No processing happening.
?>
<select name="gp_element_type_filter">
<option value=""><?php esc_html_e( 'All types', 'gp-premium' ); ?></option>
<?php
$current = isset( $_GET['gp_element_type_filter'] )? esc_html( $_GET['gp_element_type_filter'] ) : ''; // phpcs:ignore -- No processing happening.
foreach ( $values as $value => $label ) {
printf(
'<option value="%1$s" %2$s>%3$s</option>',
esc_html( $value ),
$value === $current ? 'selected="selected"' : '',
$value === $current_element_type ? 'selected="selected"' : '',
esc_html( $label )
);
}
?>
</select>
<?php
if ( 'block' === $current_element_type ) {
$block_types = array(
'hook',
'site-header',
'page-hero',
'content-template',
'post-meta-template',
'post-navigation-template',
'archive-navigation-template',
'right-sidebar',
'left-sidebar',
'site-footer',
);
?>
<select name="gp_elements_block_type_filter">
<option value=""><?php esc_html_e( 'All block types', 'gp-premium' ); ?></option>
<?php
foreach ( $block_types as $value ) {
printf(
'<option value="%1$s" %2$s>%3$s</option>',
esc_html( $value ),
$value === $current_block_type ? 'selected="selected"' : '',
esc_html( GeneratePress_Elements_Helper::get_element_type_label( $value ) )
);
}
?>
</select>
<?php
}
}
/**
@ -242,10 +282,28 @@ class GeneratePress_Elements_Post_Type {
global $pagenow;
$type = isset( $_GET['gp_element_type_filter'] ) ? $_GET['gp_element_type_filter'] : ''; // phpcs:ignore -- No processing happening.
$meta_query = array();
if ( 'edit.php' === $pagenow && $query->is_main_query() && '' !== $type ) {
$query->set( 'meta_key', '_generate_element_type' );
$query->set( 'meta_value', esc_attr( $type ) );
$meta_query[] = array(
'key' => '_generate_element_type',
'value' => esc_attr( $type ),
'compare' => '=',
);
$block_type = isset( $_GET['gp_elements_block_type_filter'] ) ? $_GET['gp_elements_block_type_filter'] : ''; // phpcs:ignore -- No processing happening.
if ( 'block' === $type && '' !== $block_type ) {
$meta_query['relation'] = 'AND';
$meta_query[] = array(
'key' => '_generate_block_type',
'value' => esc_attr( $block_type ),
'compare' => '=',
);
}
$query->set( 'meta_query', $meta_query );
}
}
@ -269,7 +327,7 @@ class GeneratePress_Elements_Post_Type {
$block_type = get_post_meta( $post_id, '_generate_block_type', true );
if ( $block_type ) {
echo ' - ' . esc_html( str_replace( '-', ' ', ucfirst( $block_type ) ) );
echo ' - ' . esc_html( GeneratePress_Elements_Helper::get_element_type_label( $block_type ) );
if ( 'hook' === $block_type && $hook_location ) {
echo '<br />';
@ -310,12 +368,15 @@ class GeneratePress_Elements_Post_Type {
case 'location':
$location = get_post_meta( $post_id, '_generate_element_display_conditions', true );
$parent_block = wp_get_post_parent_id( $post_id );
if ( $location ) {
foreach ( (array) $location as $data ) {
echo esc_html( GeneratePress_Conditions::get_saved_label( $data ) );
echo '<br />';
}
} elseif ( ! empty( $parent_block ) ) {
echo esc_html__( 'Inherit from parent', 'gp-premium' );
} else {
echo esc_html__( 'Not set', 'gp-premium' );
}
@ -423,9 +484,9 @@ class GeneratePress_Elements_Post_Type {
<select class="select-type" name="element_type">
<option value=""><?php esc_attr_e( 'Choose...', 'gp-premium' ); ?></option>
<option value="block"><?php esc_attr_e( 'Block', 'gp-premium' ); ?></option>
<option value="header"><?php esc_attr_e( 'Header', 'gp-premium' ); ?></option>
<option value="hook"><?php esc_attr_e( 'Hook', 'gp-premium' ); ?></option>
<option value="layout"><?php esc_attr_e( 'Layout', 'gp-premium' ); ?></option>
<option value="header"><?php esc_attr_e( 'Header', 'gp-premium' ); ?></option>
</select>
<button class="button button-primary"><?php _e( 'Create', 'gp-premium' ); ?></button>

View File

@ -19,6 +19,7 @@ require $elements_dir . 'class-hooks.php';
require $elements_dir . 'class-hero.php';
require $elements_dir . 'class-layout.php';
require $elements_dir . 'class-block.php';
require $elements_dir . 'class-block-elements.php';
require $elements_dir . 'class-post-type.php';
add_action( 'wp', 'generate_premium_do_elements' );
@ -188,3 +189,84 @@ function generate_add_block_element_content_filters( $content ) {
return $content;
}
add_action( 'admin_bar_menu', 'generate_add_elements_admin_bar', 100 );
/**
* Add the Elementd admin bar item.
*
* @since 2.0.0
*/
function generate_add_elements_admin_bar() {
$current_user_can = 'manage_options';
if ( apply_filters( 'generate_elements_metabox_ajax_allow_editors', false ) ) {
$current_user_can = 'edit_posts';
}
if ( ! current_user_can( $current_user_can ) ) {
return;
}
global $wp_admin_bar;
global $generate_elements;
$title = __( 'Elements', 'gp-premium' );
$count = ! empty( $generate_elements ) ? count( $generate_elements ) : 0;
// Prevent "Entire Site" Elements from being counted on non-edit pages in the admin.
if ( is_admin() && function_exists( 'get_current_screen' ) ) {
$screen = get_current_screen();
if ( ! isset( $screen->is_block_editor ) || ! $screen->is_block_editor ) {
$count = 0;
}
if ( 'edit' !== $screen->parent_base ) {
$count = 0;
}
}
if ( $count > 0 ) {
$title = sprintf(
/* translators: Active Element count. */
__( 'Elements (%s)', 'gp-premium' ),
$count
);
}
$wp_admin_bar->add_menu(
array(
'id' => 'gp_elements-menu',
'title' => $title,
'href' => esc_url( admin_url( 'edit.php?post_type=gp_elements' ) ),
)
);
if ( ! empty( $generate_elements ) ) {
// Prevent "Entire Site" Elements from being counted on non-edit pages in the admin.
if ( is_admin() && function_exists( 'get_current_screen' ) ) {
$screen = get_current_screen();
if ( ! isset( $screen->is_block_editor ) || ! $screen->is_block_editor ) {
return;
}
if ( 'edit' !== $screen->parent_base ) {
return;
}
}
foreach ( (array) $generate_elements as $key => $data ) {
$label = GeneratePress_Elements_Helper::get_element_type_label( $data['type'] );
$wp_admin_bar->add_menu(
array(
'id' => 'element-' . absint( $data['id'] ),
'parent' => 'gp_elements-menu',
'title' => get_the_title( $data['id'] ) . ' (' . $label . ')',
'href' => get_edit_post_link( $data['id'] ),
)
);
}
}
}