publish == 0) {
echo '
';
echo '
';
echo esc_html__("Create the first header or footer by clicking the 'Create New' button above.", 'king addons');
echo '
';
echo '
';
}
}
}
public function disableScreenOptions($show_screen, $screen)
{
if ($screen->id === 'edit-king-addons-el-hf') {
return false;
}
return $show_screen;
}
function king_addons_el_hf_get_posts_by_query()
{
check_ajax_referer('king-addons-el-hf-get-posts-by-query', 'nonce');
$search_string = isset($_POST['q']) ? sanitize_text_field($_POST['q']) : '';
$result = array();
$args = array(
'public' => true,
'_builtin' => false,
);
$output = 'names';
$operator = 'and';
$post_types = get_post_types($args, $output, $operator);
unset($post_types['elementor-hf']);
$post_types['Posts'] = 'post';
$post_types['Pages'] = 'page';
foreach ($post_types as $key => $post_type) {
$data = array();
add_filter('posts_search', array($this, 'search_only_titles'), 10, 2);
$query = new WP_Query(
array(
's' => $search_string,
'post_type' => $post_type,
'posts_per_page' => -1,
)
);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$title = get_the_title();
$title .= (0 != $query->post->post_parent) ? ' (' . get_the_title($query->post->post_parent) . ')' : '';
$id = get_the_id();
$data[] = array(
'id' => 'post-' . $id,
'text' => $title,
);
}
}
if (is_array($data) && !empty($data)) {
$result[] = array(
'text' => $key,
'children' => $data,
);
}
}
wp_reset_postdata();
$args = array(
'public' => true,
);
$output = 'objects';
$taxonomies = get_taxonomies($args, $output, $operator);
foreach ($taxonomies as $taxonomy) {
$terms = get_terms(
$taxonomy->name,
array(
'orderby' => 'count',
'hide_empty' => 0,
'name__like' => $search_string,
)
);
$data = array();
$label = ucwords($taxonomy->label);
if (!empty($terms)) {
foreach ($terms as $term) {
$data[] = array(
'id' => 'tax-' . $term->term_id,
'text' => $term->name . ' archive page',
);
$data[] = array(
'id' => 'tax-' . $term->term_id . '-single-' . $taxonomy->name,
'text' => 'All singulars from ' . $term->name,
);
}
}
if (is_array($data) && !empty($data)) {
$result[] = array(
'text' => $label,
'children' => $data,
);
}
}
wp_send_json($result);
}
public function initialize_options()
{
self::$user_selection = self::get_user_selections();
self::$location_selection = self::getLocationSelections();
}
public function renderAdminCustomHeader()
{
$current_screen = get_current_screen()->id;
if ($current_screen !== 'edit-king-addons-el-hf'
&& $current_screen !== 'header-footer_page_king-addons-el-hf-settings') {
return;
}
?>
publish + (int)$counts->draft;
if (0 === $total) {
echo '';
echo '
';
echo esc_html__("Create the first header or footer by clicking the 'Create New' button above.", 'king addons');
echo '
';
echo '
';
}
}
function addPostType(): void
{
if (!current_user_can('manage_options')) {
return;
}
$labels = [
'name' => esc_html__('Elementor Header & Footer Builder', 'king-addons'),
'singular_name' => esc_html__('Elementor Header & Footer Builder', 'king-addons'),
'menu_name' => esc_html__('Elementor Header & Footer Builder', 'king-addons'),
'name_admin_bar' => esc_html__('Elementor Header & Footer Builder', 'king-addons'),
'add_new' => esc_html__('Add New', 'king-addons'),
'add_new_item' => esc_html__('Add New', 'king-addons'),
'new_item' => esc_html__('New Template', 'king-addons'),
'edit_item' => esc_html__('Edit Template', 'king-addons'),
'view_item' => esc_html__('View Template', 'king-addons'),
'all_items' => esc_html__('All Templates', 'king-addons'),
'search_items' => esc_html__('Search Templates', 'king-addons'),
'parent_item_colon' => esc_html__('Parent Templates:', 'king-addons'),
'not_found' => esc_html__('No Templates found.', 'king-addons'),
'not_found_in_trash' => esc_html__('No Templates found in Trash.', 'king-addons'),
];
$args = [
'labels' => $labels,
'public' => true,
'show_ui' => true,
'show_in_menu' => false,
'show_in_nav_menus' => false,
'exclude_from_search' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_icon' => 'dashicons-editor-kitchensink',
'supports' => ['title', 'thumbnail', 'elementor'],
'show_in_rest' => true,
];
register_post_type('king-addons-el-hf', $args);
if (false === get_option('king_addons_HFB_flushed_rewrite_rules')) {
add_option('king_addons_HFB_flushed_rewrite_rules', true);
flush_rewrite_rules();
}
}
function registerMetabox()
{
add_meta_box(
'king-addons-el-hf-meta-box',
esc_html__('Elementor Header & Footer Builder Options', 'king-addons'),
[$this, 'renderMetabox'],
'king-addons-el-hf',
'normal',
'high'
);
}
function renderMetabox($post)
{
$values = get_post_custom($post->ID);
$template_type = isset($values['king_addons_el_hf_template_type']) ? esc_attr(sanitize_text_field($values['king_addons_el_hf_template_type'][0])) : '';
$display_on_canvas = isset($values['king-addons-el-hf-display-on-canvas']);
wp_nonce_field('king_addons_el_hf_meta_nounce', 'king_addons_el_hf_meta_nounce');
?>
__('Please enter', 'king-addons'),
'please_delete' => __('Please delete', 'king-addons'),
'more_char' => __('or more characters', 'king-addons'),
'character' => __('character', 'king-addons'),
'loading' => __('Loading more results…', 'king-addons'),
'only_select' => __('You can only select', 'king-addons'),
'item' => __('item', 'king-addons'),
'char_s' => __('s', 'king-addons'),
'no_result' => __('No results found', 'king-addons'),
'searching' => __('Searching…', 'king-addons'),
'not_loader' => __('The results could not be loaded.', 'king-addons'),
'search' => __('Search pages / post / categories', 'king-addons'),
'ajax_nonce' => wp_create_nonce('king-addons-el-hf-get-posts-by-query'),
);
wp_localize_script('king-addons-el-hf-select2', 'kngRules', $localize_vars);
}
public function display_rules_tab()
{
$this->admin_styles();
$include_locations = get_post_meta(get_the_id(), 'king_addons_el_hf_target_include_locations', true);
$exclude_locations = get_post_meta(get_the_id(), 'king_addons_el_hf_target_exclude_locations', true);
$users = get_post_meta(get_the_id(), 'king_addons_el_hf_target_user_roles', true);
?>
|
|
__('Display Rules', 'king-addons'),
'value' => '[{"type":"basic-global","specific":null}]',
'tags' => 'site,enable,target,pages',
'rule_type' => 'display',
'add_rule_label' => __('Add Display Rule', 'king-addons'),
],
$include_locations
);
?>
|
|
|
__('Exclude On', 'king-addons'),
'value' => '[]',
'tags' => 'site,enable,target,pages',
'add_rule_label' => __('Add Exclusion Rule', 'king-addons'),
'rule_type' => 'exclude',
],
$exclude_locations
);
?>
|
|
|
__('Users', 'king-addons'),
'value' => '[]',
'tags' => 'site,enable,target,pages',
'add_rule_label' => __('Add User Rule', 'king-addons'),
],
$users
);
?>
|
array(
'label' => __('Basic', 'king-addons'),
'value' => array(
'all' => __('All', 'king-addons'),
'logged-in' => __('Logged In', 'king-addons'),
'logged-out' => __('Logged Out', 'king-addons'),
),
),
'advanced' => array(
'label' => __('Advanced', 'king-addons'),
'value' => array(),
),
);
/* User roles */
$roles = get_editable_roles();
foreach ($roles as $slug => $data) {
$selection_options['advanced']['value'][$slug] = $data['name'];
}
/**
* Filter options displayed in the user select field of Display conditions.
*
* @since 1.5.0
*/
return apply_filters('king-addons-el-hf_user_roles_list', $selection_options);
}
public static function target_user_role_settings_field($name, $settings, $value)
{
$input_name = $name;
$add_rule_label = $settings['add_rule_label'] ?? __('Add Rule', 'king-addons');
$saved_values = $value;
$output = '';
if (!isset(self::$user_selection) || empty(self::$user_selection)) {
self::$user_selection = self::get_user_selections();
}
$selection_options = self::$user_selection;
$output .= '';
/** @noinspection PhpConditionAlreadyCheckedInspection */
if (!is_array($saved_values) || (is_array($saved_values) && empty($saved_values))) {
$saved_values = array();
$saved_values[0] = '';
}
$index = 0;
$output .= '';
$output .= '
';
$output .= '
';
foreach ($saved_values as $index => $data) {
$output .= '
';
$output .= '
';
/* Condition Selection */
$output .= '
';
$output .= '';
$output .= '
';
$output .= '
';
}
$output .= '
';
/* Add new rule */
$output .= '
';
$output .= '
';
$output .= '
';
echo $output;
}
public static function target_rule_settings_field($name, $settings, $value)
{
$input_name = $name;
$rule_type = $settings['rule_type'] ?? 'target_rule';
$add_rule_label = $settings['add_rule_label'] ?? __('Add Rule', 'king-addons');
$saved_values = $value;
$output = '';
if (isset(self::$location_selection) || empty(self::$location_selection)) {
self::$location_selection = self::getLocationSelections();
}
$selection_options = self::$location_selection;
$output .= '';
$output .= '';
$output .= '
';
$output .= self::generate_target_rule_selector($rule_type, $selection_options, $input_name, $saved_values, $add_rule_label);
$output .= '
';
$output .= '
';
echo $output;
}
public static function generate_target_rule_selector($type, $selection_options, $input_name, $saved_values, $add_rule_label)
{
$output = '';
/** @noinspection PhpConditionAlreadyCheckedInspection */
if (!is_array($saved_values) || (is_array($saved_values) && empty($saved_values))) {
$saved_values = array();
$saved_values['rule'][0] = '';
$saved_values['specific'][0] = '';
}
$index = 0;
if (is_array($saved_values) && is_array($saved_values['rule'])) {
foreach ($saved_values['rule'] as $index => $data) {
$output .= '
';
$output .= '
';
$output .= '
';
$output .= '';
$output .= '
';
$output .= '
';
$output .= '
';
$output .= '';
$output .= '
';
}
}
$output .= '
';
$output .= '';
if ('display' == $type) {
$output .= '';
}
return $output;
}
function saveMetaboxData($post_id)
{
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (!isset($_POST['king_addons_el_hf_meta_nounce']) || !wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['king_addons_el_hf_meta_nounce'])), 'king_addons_el_hf_meta_nounce')) {
return;
}
if (!current_user_can('edit_posts')) {
return;
}
if (!isset($_POST['king-addons-el-hf-target-rules-location'])) {
$target_locations = array(
'rule' => array('basic-global'),
'specific' => array(),
);
} else {
$target_locations = self::getFormatRuleValue($_POST, 'king-addons-el-hf-target-rules-location');
if (empty($target_locations)) {
$target_locations = array(
'rule' => array('basic-global'),
'specific' => array(),
);
}
}
$target_exclusion = self::getFormatRuleValue($_POST, 'king-addons-el-hf-target-rules-exclusion');
$target_users = [];
if (isset($_POST['king-addons-el-hf-target-rules-users'])) {
$target_users = array_map('sanitize_text_field', wp_unslash($_POST['king-addons-el-hf-target-rules-users']));
}
update_post_meta($post_id, 'king_addons_el_hf_target_include_locations', $target_locations);
update_post_meta($post_id, 'king_addons_el_hf_target_exclude_locations', $target_exclusion);
update_post_meta($post_id, 'king_addons_el_hf_target_user_roles', $target_users);
if (isset($_POST['king_addons_el_hf_template_type'])) {
update_post_meta($post_id, 'king_addons_el_hf_template_type', sanitize_text_field(wp_unslash($_POST['king_addons_el_hf_template_type'])));
}
if (isset($_POST['king-addons-el-hf-display-on-canvas'])) {
update_post_meta($post_id, 'king-addons-el-hf-display-on-canvas', sanitize_text_field(wp_unslash($_POST['king-addons-el-hf-display-on-canvas'])));
} else {
delete_post_meta($post_id, 'king-addons-el-hf-display-on-canvas');
}
}
function setCompatibility()
{
$template = get_template();
$is_elementor_callable = defined('ELEMENTOR_VERSION') && is_callable('Elementor\Plugin::instance');
if ($is_elementor_callable) {
self::$elementor_instance = Elementor\Plugin::instance();
// TODO: Add popular themes
switch ($template) {
case 'hello-elementor':
require_once(KING_ADDONS_PATH . 'includes/extensions/Header_Footer_Builder/themes/hello-elementor/ELHF_Hello_Elementor.php');
break;
default:
add_action('init', [$this, 'setupSettingsPage']);
add_filter('king_addons_el_hf_settings_tabs', [$this, 'setupUnsupportedTheme']);
add_action('init', [$this, 'setupFallbackSupport']);
break;
}
}
}
public function setupUnsupportedTheme($settings_tabs = [])
{
if (!current_theme_supports('king-addons-elementor-header-footer')) {
$settings_tabs['king_addons_el_hf_settings'] = [
'name' => esc_html__('Display Settings', 'king-addons'),
'url' => admin_url('edit.php?post_type=king-addons-el-hf&page=king-addons-el-hf-settings'),
];
}
return $settings_tabs;
}
public function setupFallbackSupport()
{
if (!current_theme_supports('king-addons-elementor-header-footer')) {
$compatibility_option = get_option('king_addons_el_hf_compatibility_option', '1');
if ('1' === $compatibility_option) {
if (!class_exists('ELHF_Default_Method_1')) {
require_once(KING_ADDONS_PATH . 'includes/extensions/Header_Footer_Builder/themes/default/ELHF_Default_Method_1.php');
}
} elseif ('2' === $compatibility_option) {
if (!class_exists('ELHF_Default_Method_2')) {
require_once(KING_ADDONS_PATH . 'includes/extensions/Header_Footer_Builder/themes/default/ELHF_Default_Method_2.php');
}
}
}
}
function setupSettingsPage()
{
require_once(KING_ADDONS_PATH . 'includes/extensions/Header_Footer_Builder/ELHF_Settings_Page.php');
}
public static function renderHeader()
{
/** @noinspection SpellCheckingInspection */
echo '