get_section('title_tagline')->priority = 2;
// check if exists in case user has no pages
if (is_object($wp_customize->get_section('static_front_page'))) {
$wp_customize->get_section('static_front_page')->priority = 5;
}
/***** Add PostMessage Support *****/
// Add postMessage support for site title and description.
$wp_customize->get_setting('blogname')->transport = 'postMessage';
$wp_customize->get_setting('blogdescription')->transport = 'postMessage';
/***** Add Custom Controls *****/
// create multi-checkbox/select control
class ct_author_multi_checkbox_control extends WP_Customize_Control
{
public $type = 'multi-checkbox';
public function render_content()
{
if (empty($this->choices)) {
return;
} ?>
add_section('ct_author_avatar', array(
'title' => __('Avatar', 'author'),
'priority' => 15
));
// setting
$wp_customize->add_setting('avatar_method', array(
'default' => 'none',
'sanitize_callback' => 'ct_author_sanitize_avatar_method'
));
// control
$wp_customize->add_control('avatar_method', array(
'label' => __('Avatar image source', 'author'),
'section' => 'ct_author_avatar',
'settings' => 'avatar_method',
'type' => 'radio',
'description' => __('Gravatar uses the admin email address.', 'author'),
'choices' => array(
'gravatar' => __('Gravatar', 'author'),
'upload' => __('Upload an image', 'author'),
'none' => __('Do not display avatar', 'author')
)
));
// setting
$wp_customize->add_setting('avatar', array(
'sanitize_callback' => 'esc_url_raw'
));
// control
$wp_customize->add_control(new WP_Customize_Image_Control(
$wp_customize,
'avatar',
array(
'label' => __('Upload your avatar', 'author'),
'section' => 'ct_author_avatar',
'settings' => 'avatar'
)
));
// setting
$wp_customize->add_setting('comment_avatar', array(
'default' => 'yes',
'sanitize_callback' => 'ct_author_sanitize_yes_no_settings'
));
// control
$wp_customize->add_control('comment_avatar', array(
'label' => __('Would you like to use the uploaded avatar for your post comments?', 'author'),
'section' => 'ct_author_avatar',
'settings' => 'comment_avatar',
'type' => 'radio',
'choices' => array(
'yes' => __('Yes', 'author'),
'no' => __('No', 'author')
)
));
/***** Logo Upload *****/
// section
$wp_customize->add_section('ct_author_logo_upload', array(
'title' => __('Logo', 'author'),
'priority' => 25,
'description' => __('Use this instead of the avatar if you want a non-rounded logo image.', 'author')
));
// setting
$wp_customize->add_setting('logo_upload', array(
'sanitize_callback' => 'esc_url_raw'
));
// control
$wp_customize->add_control(new WP_Customize_Image_Control(
$wp_customize,
'logo_image',
array(
'label' => __('Upload custom logo.', 'author'),
'section' => 'ct_author_logo_upload',
'settings' => 'logo_upload'
)
));
/***** Social Media Icons *****/
// get the social sites array
$social_sites = ct_author_social_array();
// set a priority used to order the social sites
$priority = 5;
// section
$wp_customize->add_section('ct_author_social_media_icons', array(
'title' => __('Social Media Icons', 'author'),
'priority' => 35,
'description' => __('Add the URL for each of your social profiles.', 'author')
));
// create a setting and control for each social site
foreach ($social_sites as $social_site => $value) {
// if email icon
if ($social_site == 'email') {
// setting
$wp_customize->add_setting($social_site, array(
'sanitize_callback' => 'ct_author_sanitize_email'
));
// control
$wp_customize->add_control($social_site, array(
'label' => __('Email Address', 'author'),
'section' => 'ct_author_social_media_icons',
'priority' => $priority,
));
} else {
$label = ucfirst($social_site);
if ($social_site == 'rss') {
$label = __('RSS', 'author');
} elseif ($social_site == 'researchgate') {
$label = __('ResearchGate', 'author');
} elseif ($social_site == 'soundcloud') {
$label = __('SoundCloud', 'author');
} elseif ($social_site == 'slideshare') {
$label = __('SlideShare', 'author');
} elseif ($social_site == 'codepen') {
$label = __('CodePen', 'author');
} elseif ($social_site == 'stumbleupon') {
$label = __('StumbleUpon', 'author');
} elseif ($social_site == 'deviantart') {
$label = __('DeviantArt', 'author');
} elseif ($social_site == 'hacker-news') {
$label = __('Hacker News', 'author');
} elseif ($social_site == 'google-wallet') {
$label = __('Google Wallet', 'author');
} elseif ($social_site == 'whatsapp') {
$label = __('WhatsApp', 'author');
} elseif ($social_site == 'qq') {
$label = __('QQ', 'author');
} elseif ($social_site == 'vk') {
$label = __('VK', 'author');
} elseif ($social_site == 'ok-ru') {
$label = __('OK.ru', 'author');
} elseif ($social_site == 'wechat') {
$label = __('WeChat', 'author');
} elseif ($social_site == 'tencent-weibo') {
$label = __('Tencent Weibo', 'author');
} elseif ($social_site == 'paypal') {
$label = __('PayPal', 'author');
} elseif ($social_site == 'stack-overflow') {
$label = __('Stack Overflow', 'author');
} elseif ($social_site == 'artstation') {
$label = __('ArtStation', 'author');
} elseif ($social_site == 'email-form') {
$label = __('Contact Form', 'author');
} elseif ($social_site == 'diaspora') {
$label = __('diaspora*', 'author');
} elseif ($social_site == 'imdb') {
$label = __('IMDB', 'author');
} elseif ($social_site == 'signal-messenger') {
$label = __('Signal', 'author');
}
if ($social_site == 'skype') {
// setting
$wp_customize->add_setting($social_site, array(
'sanitize_callback' => 'ct_author_sanitize_skype'
));
// control
$wp_customize->add_control($social_site, array(
'type' => 'url',
'label' => $label,
'description' => sprintf(__('Accepts Skype link protocol (learn more)', 'author'), 'https://www.competethemes.com/blog/skype-links-wordpress/'),
'section' => 'ct_author_social_media_icons',
'priority' => $priority
));
} elseif ($social_site == 'signal-messenger') {
// setting
$wp_customize->add_setting($social_site, array(
'sanitize_callback' => 'ct_author_sanitize_signal'
));
// control
$wp_customize->add_control($social_site, array(
'type' => 'url',
'label' => $label,
'section' => 'ct_author_social_media_icons',
'priority' => $priority
));
} elseif ($social_site == 'phone') {
// setting
$wp_customize->add_setting($social_site, array(
'sanitize_callback' => 'ct_author_sanitize_text'
));
// control
$wp_customize->add_control($social_site, array(
'type' => 'text',
'label' => $label,
'section' => 'ct_author_social_media_icons',
'priority' => $priority
));
} else {
// setting
$wp_customize->add_setting($social_site, array(
'sanitize_callback' => 'esc_url_raw'
));
// control
$wp_customize->add_control($social_site, array(
'type' => 'url',
'label' => $label,
'section' => 'ct_author_social_media_icons',
'priority' => $priority
));
if ($social_site == 'twitter') {
// setting
$wp_customize->add_setting('twitter_verified', array(
'sanitize_callback' => 'ct_author_sanitize_checkbox'
));
// control
$wp_customize->add_control('twitter_verified', array(
'type' => 'checkbox',
'label' => __('Display verified checkmark?', 'author'),
'section' => 'ct_author_social_media_icons',
'priority' => $priority
));
}
}
}
// increment the priority for next site
$priority = $priority + 5;
}
// Custom icon 1
$wp_customize->add_setting('social_icon_custom_1', array(
'sanitize_callback' => 'esc_url_raw'
));
$wp_customize->add_control('social_icon_custom_1', array(
'label' => __('Custom icon 1 URL', 'author'),
'section' => 'ct_author_social_media_icons',
'settings' => 'social_icon_custom_1',
'type' => 'url',
'priority' => $priority + 5
));
$wp_customize->add_setting('social_icon_custom_1_image', array(
'sanitize_callback' => 'esc_url_raw'
));
$wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'social_icon_custom_1_image', array(
'label' => __('Custom icon 1 image', 'author'),
'section' => 'ct_author_social_media_icons',
'settings' => 'social_icon_custom_1_image',
'priority' => $priority + 6
)));
$wp_customize->add_setting('social_icon_custom_1_size', array(
'default' => '30',
'sanitize_callback' => 'absint'
));
$wp_customize->add_control('social_icon_custom_1_size', array(
'label' => __('Custom icon 1 size (px)', 'author'),
'section' => 'ct_author_social_media_icons',
'settings' => 'social_icon_custom_1_size',
'type' => 'number',
'priority' => $priority + 7
));
// Custom icon 2
$wp_customize->add_setting('social_icon_custom_2', array(
'sanitize_callback' => 'esc_url_raw'
));
$wp_customize->add_control('social_icon_custom_2', array(
'label' => __('Custom icon 2 URL', 'author'),
'section' => 'ct_author_social_media_icons',
'settings' => 'social_icon_custom_2',
'type' => 'url',
'priority' => $priority + 10
));
$wp_customize->add_setting('social_icon_custom_2_image', array(
'sanitize_callback' => 'esc_url_raw'
));
$wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'social_icon_custom_2_image', array(
'label' => __('Custom icon 2 image', 'author'),
'section' => 'ct_author_social_media_icons',
'settings' => 'social_icon_custom_2_image',
'priority' => $priority + 11
)));
$wp_customize->add_setting('social_icon_custom_2_size', array(
'default' => '30',
'sanitize_callback' => 'absint'
));
$wp_customize->add_control('social_icon_custom_2_size', array(
'label' => __('Custom icon 2 size (px)', 'author'),
'section' => 'ct_author_social_media_icons',
'settings' => 'social_icon_custom_2_size',
'type' => 'number',
'priority' => $priority + 12
));
// Custom icon 3
$wp_customize->add_setting('social_icon_custom_3', array(
'sanitize_callback' => 'esc_url_raw'
));
$wp_customize->add_control('social_icon_custom_3', array(
'label' => __('Custom icon 3 URL', 'author'),
'section' => 'ct_author_social_media_icons',
'settings' => 'social_icon_custom_3',
'type' => 'url',
'priority' => $priority + 15
));
$wp_customize->add_setting('social_icon_custom_3_image', array(
'sanitize_callback' => 'esc_url_raw'
));
$wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'social_icon_custom_3_image', array(
'label' => __('Custom icon 3 image', 'author'),
'section' => 'ct_author_social_media_icons',
'settings' => 'social_icon_custom_3_image',
'priority' => $priority + 16
)));
$wp_customize->add_setting('social_icon_custom_3_size', array(
'default' => '30',
'sanitize_callback' => 'absint'
));
$wp_customize->add_control('social_icon_custom_3_size', array(
'label' => __('Custom icon 3 size (px)', 'author'),
'section' => 'ct_author_social_media_icons',
'settings' => 'social_icon_custom_3_size',
'type' => 'number',
'priority' => $priority + 17
));
/***** Blog *****/
// section
$wp_customize->add_section('author_blog', array(
'title' => _x('Blog', 'noun: the blog section', 'author'),
'priority' => 45
));
// setting
$wp_customize->add_setting('full_post', array(
'default' => 'no',
'sanitize_callback' => 'ct_author_sanitize_yes_no_settings'
));
// control
$wp_customize->add_control('full_post', array(
'label' => __('Show full posts on blog?', 'author'),
'section' => 'author_blog',
'settings' => 'full_post',
'type' => 'radio',
'choices' => array(
'yes' => __('Yes', 'author'),
'no' => __('No', 'author')
)
));
// setting - comments link
$wp_customize->add_setting('comments_link', array(
'default' => 'no',
'sanitize_callback' => 'ct_author_sanitize_yes_no_settings'
));
// control - comments link
$wp_customize->add_control('comments_link', array(
'label' => __('Show link to comments after posts?', 'author'),
'section' => 'author_blog',
'settings' => 'comments_link',
'type' => 'radio',
'choices' => array(
'yes' => __('Yes', 'author'),
'no' => __('No', 'author')
)
));
// setting
$wp_customize->add_setting('excerpt_length', array(
'default' => '25',
'sanitize_callback' => 'absint'
));
// control
$wp_customize->add_control('excerpt_length', array(
'label' => __('Excerpt word count', 'author'),
'section' => 'author_blog',
'settings' => 'excerpt_length',
'type' => 'number'
));
// Read More text - setting
$wp_customize->add_setting('read_more_text', array(
'default' => __('Continue reading', 'author'),
'sanitize_callback' => 'ct_author_sanitize_text'
));
// Read More text - control
$wp_customize->add_control('read_more_text', array(
'label' => __('Read More link text', 'author'),
'section' => 'author_blog',
'settings' => 'read_more_text',
'type' => 'text'
));
/***** Comment Display *****/
// section
$wp_customize->add_section('ct_author_comments_display', array(
'title' => __('Comment Display', 'author'),
'priority' => 55
));
// setting
$wp_customize->add_setting('comments_display', array(
'default' => array( 'post', 'page', 'attachment', 'none' ),
'sanitize_callback' => 'ct_author_sanitize_comments_setting'
));
// control
$wp_customize->add_control(new ct_author_multi_checkbox_control(
$wp_customize,
'comments_display',
array(
'label' => __('Show comments on:', 'author'),
'section' => 'ct_author_comments_display',
'settings' => 'comments_display',
'type' => 'multi-checkbox',
'choices' => array(
'post' => __('Posts', 'author'),
'page' => __('Pages', 'author'),
'attachment' => __('Attachments', 'author'),
'none' => __('Do not show', 'author')
)
)
));
/***** Scroll-to-stop *****/
// section
$wp_customize->add_section('ct_author_scroll_to_stop', array(
'title' => __('Scroll-to-Top Arrow', 'author'),
'priority' => 60
));
// setting - scroll-to-top arrow
$wp_customize->add_setting('scroll_to_top', array(
'default' => 'no',
'sanitize_callback' => 'ct_author_sanitize_yes_no_settings'
));
// control - scroll-to-top arrow
$wp_customize->add_control('scroll_to_top', array(
'label' => __('Display Scroll-to-top arrow?', 'author'),
'section' => 'ct_author_scroll_to_stop',
'settings' => 'scroll_to_top',
'type' => 'radio',
'choices' => array(
'yes' => __('Yes', 'author'),
'no' => __('No', 'author')
)
));
/***** Additional Options *****/
// section
$wp_customize->add_section('ct_author_additional_options', array(
'title' => __('Additional Options', 'author'),
'priority' => 65
));
// setting - last updated
$wp_customize->add_setting('last_updated', array(
'default' => 'no',
'sanitize_callback' => 'ct_author_sanitize_yes_no_settings'
));
// control - last updated
$wp_customize->add_control('last_updated', array(
'label' => __('Display the date each post was last updated?', 'author'),
'section' => 'ct_author_additional_options',
'settings' => 'last_updated',
'type' => 'radio',
'choices' => array(
'yes' => __('Yes', 'author'),
'no' => __('No', 'author')
)
));
// setting - author byline display
$wp_customize->add_setting('display_post_author', array(
'default' => 'yes',
'sanitize_callback' => 'ct_author_sanitize_yes_no_settings'
));
// control - author byline display
$wp_customize->add_control('display_post_author', array(
'label' => __('Display the post author in the byline?', 'author'),
'section' => 'ct_author_additional_options',
'settings' => 'display_post_author',
'type' => 'radio',
'choices' => array(
'yes' => __('Yes', 'author'),
'no' => __('No', 'author')
)
));
// setting - date byline display
$wp_customize->add_setting('display_post_date', array(
'default' => 'yes',
'sanitize_callback' => 'ct_author_sanitize_yes_no_settings'
));
// control - date byline display
$wp_customize->add_control('display_post_date', array(
'label' => __('Display the post date in the byline?', 'author'),
'section' => 'ct_author_additional_options',
'settings' => 'display_post_date',
'type' => 'radio',
'choices' => array(
'yes' => __('Yes', 'author'),
'no' => __('No', 'author')
)
));
/***** Custom CSS *****/
if (function_exists('wp_update_custom_css_post')) {
// Migrate any existing theme CSS to the core option added in WordPress 4.7.
$css = get_theme_mod('custom_css');
if ($css) {
$core_css = wp_get_custom_css(); // Preserve any CSS already added to the core option.
$return = wp_update_custom_css_post($core_css . $css);
if (! is_wp_error($return)) {
// Remove the old theme_mod, so that the CSS is stored in only one place moving forward.
remove_theme_mod('custom_css');
}
}
} else {
// section
$wp_customize->add_section('author_custom_css', array(
'title' => __('Custom CSS', 'author'),
'priority' => 65
));
// setting
$wp_customize->add_setting('custom_css', array(
'sanitize_callback' => 'ct_author_sanitize_css',
'transport' => 'postMessage'
));
// control
$wp_customize->add_control('custom_css', array(
'type' => 'textarea',
'label' => __('Add Custom CSS Here:', 'author'),
'section' => 'author_custom_css',
'settings' => 'custom_css'
));
}
}
/***** Custom Sanitization Functions *****/
/*
* Sanitize settings with show/hide as options
* Used in: search bar
*/
function ct_author_sanitize_all_show_hide_settings($input)
{
$valid = array(
'show' => __('Show', 'author'),
'hide' => __('Hide', 'author')
);
return array_key_exists($input, $valid) ? $input : '';
}
/*
* sanitize email address
* Used in: Social Media Icons
*/
function ct_author_sanitize_email($input)
{
return sanitize_email($input);
}
function ct_author_sanitize_comments_setting($input)
{
$valid = array(
'post' => __('Posts', 'author'),
'page' => __('Pages', 'author'),
'attachment' => __('Attachments', 'author'),
'none' => __('Do not show', 'author')
);
foreach ($input as $selection) {
return array_key_exists($selection, $valid) ? $input : '';
}
}
function ct_author_sanitize_avatar_method($input)
{
$valid = array(
'gravatar' => __('Gravatar', 'author'),
'upload' => __('Upload an image', 'author'),
'none' => __('Do not display avatar', 'author')
);
return array_key_exists($input, $valid) ? $input : '';
}
function ct_author_sanitize_yes_no_settings($input)
{
$valid = array(
'yes' => __('Yes', 'author'),
'no' => __('No', 'author'),
);
return array_key_exists($input, $valid) ? $input : '';
}
function ct_author_sanitize_text($input)
{
return wp_kses_post(force_balance_tags($input));
}
function ct_author_sanitize_skype($input)
{
return esc_url_raw($input, array( 'http', 'https', 'skype' ));
}
function ct_author_sanitize_signal($input)
{
return esc_url_raw($input, array( 'http', 'https', 'sgnl' ));
}
function ct_author_sanitize_checkbox($input)
{
return ((isset($input) && true == $input) ? true : false);
}
function ct_author_sanitize_css($css)
{
$css = wp_kses($css, array( '\'', '\"' ));
$css = str_replace('>', '>', $css);
return $css;
}
function ct_author_customize_preview_js()
{
if (!function_exists('ct_author_pro_init') && !(isset($_GET['mailoptin_optin_campaign_id']) || isset($_GET['mailoptin_email_campaign_id']))) {
$url = 'https://www.competethemes.com/author-pro/?utm_source=wp-dashboard&utm_medium=Customizer&utm_campaign=Author%20Pro%20-%20Customizer';
$content = "";
echo apply_filters('ct_author_customizer_ad', $content);
}
}
add_action('customize_controls_print_footer_scripts', 'ct_author_customize_preview_js');