• ', esc_attr_e('Set Up Your Menu', 'boatseller') . '
  • '; } define('boatsellerURL', get_theme_file_uri()); define('boatsellerimgURL', boatsellerURL . '/images/'); //define('boatsellerPATH', get_theme_file_path() ); define('boatsellerPATH', get_template_directory()); $theme = wp_get_theme(); define('boatsellerVERSION', $theme->version); define('SITEURL', esc_url(get_site_url())); if (!function_exists('boatseller_setup')): /** * Sets up theme defaults and registers support for various WordPress features. * * Note that this function is hooked into the after_setup_theme hook, which * runs before the init hook. The init hook is too late for some features, such * as indicating support for post thumbnails. * * Create your own boatseller_setup() function to override in a child theme. * * @since boat seller 1.0 */ function boatseller_setup() { /* * Make theme available for translation. * Translations can be filed at WordPress.org. See: https://translate.wordpress.org/projects/wp-themes/boatseller * If you're building a theme based on boat seller, use a find and replace * to change 'boatseller' to the name of your theme in all the template files */ load_theme_textdomain('boatseller'); // Add default posts and comments RSS feed links to head. add_theme_support('automatic-feed-links'); /* * Let WordPress manage the document title. * By adding theme support, we declare that this theme does not use a * hard-coded tag in the document head, and expect WordPress to * provide it for us. */ add_theme_support('title-tag'); /* * Enable support for custom logo. * * @since boat seller 1.2 */ add_theme_support('custom-logo', array( 'height' => 240, 'width' => 240, 'flex-height' => true, )); /* * Enable support for Post Thumbnails on posts and pages. * * @link http://codex.wordpress.org/Function_Reference/add_theme_support#Post_Thumbnails */ add_theme_support('post-thumbnails'); set_post_thumbnail_size(1200, 9999); // This theme uses wp_nav_menu() in two locations. register_nav_menus(array( 'primary' => esc_attr__('Primary Menu', 'boatseller'), 'social' => esc_attr__('Social Links Menu', 'boatseller'), )); /* * Switch default core markup for search form, comment form, and comments * to output valid HTML5. */ add_theme_support('html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption', )); /* * Enable support for Post Formats. * * See: https://codex.wordpress.org/Post_Formats */ add_theme_support('post-formats', array( 'aside', 'image', 'video', 'quote', 'link', 'gallery', 'status', 'audio', 'chat', )); /* * This theme styles the visual editor to resemble the theme style, * specifically font, colors, icons, and column width. */ add_editor_style(array('css/editor-style.css', boatseller_fonts_url())); // Indicate widget sidebars can use selective refresh in the Customizer. add_theme_support('customize-selective-refresh-widgets'); } endif; // boatseller_setup add_action('after_setup_theme', 'boatseller_setup'); /** * Sets the content width in pixels, based on the theme's design and stylesheet. * * Priority 0 to make it available to lower priority callbacks. * * @global int $content_width * * @since boat seller 1.0 */ function boatseller_content_width() { $GLOBALS['content_width'] = apply_filters('boatseller_content_width', 840); } add_action('after_setup_theme', 'boatseller_content_width', 0); /** * Registers a widget area. * * @link https://developer.wordpress.org/reference/functions/register_sidebar/ * * @since boat seller 1.0 */ function boatseller_widgets_init() { register_sidebar(array( 'name' => esc_attr__('Sidebar', 'boatseller'), 'id' => 'sidebar-1', 'description' => esc_attr__('Add widgets here to appear in your sidebar.', 'boatseller'), 'before_widget' => '<section id="%1$s" class="widget %2$s">', 'after_widget' => '</section>', 'before_title' => '<h2 class="widget-title">', 'after_title' => '</h2>', )); register_sidebar(array( 'name' => esc_attr__('First Footer Widget', 'boatseller'), 'id' => '1-footer', 'description' => esc_attr__('Add widgets here to appear in your left footer.', 'boatseller'), 'before_widget' => '<div>', 'after_widget' => '</div>', 'before_title' => '<h2>', 'after_title' => '</h2>', )); register_sidebar(array( 'name' => esc_attr__('Second Footer Widget', 'boatseller'), 'id' => '2-footer', 'description' => esc_attr__('Add widgets here to appear in your center footer.', 'boatseller'), 'before_widget' => '<div>', 'after_widget' => '</div>', 'before_title' => '<h2>', 'after_title' => '</h2>', )); register_sidebar(array( 'name' => esc_attr__('Third Footer Widget', 'boatseller'), 'id' => '3-footer', 'description' => esc_attr__('Add widgets here to appear in your right footer.', 'boatseller'), 'before_widget' => '<div>', 'after_widget' => '</div>', 'before_title' => '<h2>', 'after_title' => '</h2>', )); } add_action('widgets_init', 'boatseller_widgets_init'); if (!function_exists('boatseller_fonts_url')): /** * Register Google fonts for boat seller. * * Create your own boatseller_fonts_url() function to override in a child theme. * * @since boat seller 1.0 * * @return string Google fonts URL for the theme. */ function boatseller_fonts_url() { $fonts_url = ''; $fonts = array(); $subsets = 'latin,latin-ext'; /* translators: If there are characters in your language that are not supported by Merriweather, translate this to 'off'. Do not translate into your own language. */ if ('off' !== esc_attr_x('on', 'Merriweather font: on or off', 'boatseller')) { $fonts[] = 'Merriweather:400,700,900,400italic,700italic,900italic'; } /* translators: If there are characters in your language that are not supported by Montserrat, translate this to 'off'. Do not translate into your own language. */ if ('off' !== esc_attr_x('on', 'Montserrat font: on or off', 'boatseller')) { $fonts[] = 'Montserrat:400,700'; } /* translators: If there are characters in your language that are not supported by Inconsolata, translate this to 'off'. Do not translate into your own language. */ if ('off' !== esc_attr_x('on', 'Inconsolata font: on or off', 'boatseller')) { $fonts[] = 'Inconsolata:400'; } if ($fonts) { $fonts_url = add_query_arg(array( 'family' => urlencode(implode('|', $fonts)), 'subset' => urlencode($subsets), ), 'https://fonts.googleapis.com/css'); } return $fonts_url; } endif; /** * Handles JavaScript detection. * * Adds a `js` class to the root `<html>` element when JavaScript is detected. * * @since boat seller 1.0 */ function boatseller_javascript_detection() { echo "<script>(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script>\n"; } add_action('wp_head', 'boatseller_javascript_detection', 0); /** * Enqueues scripts and styles. * * @since boat seller 1.0 */ function boatseller_scripts() { // Add custom fonts, used in the main stylesheet. wp_enqueue_style('boatseller-fonts', boatseller_fonts_url(), array(), boatsellerVERSION); // Add Genericons, used in the main stylesheet. wp_enqueue_style('genericons', get_template_directory_uri() . '/genericons/genericons.css', array(), boatsellerVERSION); // Theme stylesheet. wp_enqueue_style('boatseller-style', get_stylesheet_uri(), array(), boatsellerVERSION); // Load the Internet Explorer specific stylesheet. wp_enqueue_style('boatseller-ie', get_template_directory_uri() . '/css/ie.css', array('boatseller-style'), boatsellerVERSION); wp_style_add_data('boatseller-ie', 'conditional', 'lt IE 10'); // Load the Internet Explorer 8 specific stylesheet. wp_enqueue_style('boatseller-ie8', get_template_directory_uri() . '/css/ie8.css', array('boatseller-style'), boatsellerVERSION); wp_style_add_data('boatseller-ie8', 'conditional', 'lt IE 9'); // Load the Internet Explorer 7 specific stylesheet. wp_enqueue_style('boatseller-ie7', get_template_directory_uri() . '/css/ie7.css', array('boatseller-style'), boatsellerVERSION); wp_style_add_data('boatseller-ie7', 'conditional', 'lt IE 8'); // Load the html5 shiv. wp_enqueue_script('boatseller-html5', get_template_directory_uri() . '/js/html5.js', array(), boatsellerVERSION); wp_script_add_data('boatseller-html5', 'conditional', 'lt IE 9'); wp_enqueue_script('boatseller-skip-link-focus-fix', get_template_directory_uri() . '/js/skip-link-focus-fix.js', array(), boatsellerVERSION, true); if (is_singular() && comments_open() && get_option('thread_comments')) { wp_enqueue_script('comment-reply'); } if (is_singular() && wp_attachment_is_image()) { wp_enqueue_script('boatseller-keyboard-image-navigation', get_template_directory_uri() . '/js/keyboard-image-navigation.js', array('jquery'), boatsellerVERSION); } if (get_theme_mod('boatseller_preloader', '1') == '1') { wp_register_script('preloading', get_template_directory_uri() . '/js/preloader.js', boatsellerVERSION, false); // shows at the header scripts wp_enqueue_script('preloading'); } wp_enqueue_script('boatseller-script', get_template_directory_uri() . '/js/functions.js', array('jquery'), boatsellerVERSION, true); $boatseller_search_icon = get_theme_mod('boatseller_search_icon', '1'); $boatseller_search_icon = array('boatseller_search_icon' => $boatseller_search_icon); wp_localize_script('boatseller-customize-preview', 'boatseller_php_vars', $boatseller_search_icon); global $template; $boatseller_page_theme = wp_basename($template); $boatseller_pg_theme = array('boatseller_page_theme' => $boatseller_page_theme); wp_localize_script('boatseller-script', 'boatseller_php_vars', $boatseller_pg_theme); wp_enqueue_style('boatseller-header3', get_template_directory_uri() . '/css/header.css', array('boatseller-style'), boatsellerVERSION); wp_localize_script('boatseller-script', 'boatseller_screenReaderText', array( 'expand' => esc_attr__('expand child menu', 'boatseller'), 'collapse' => esc_attr__('collapse child menu', 'boatseller'), )); $boatseller_blog_style = trim(get_theme_mod('boatseller_blog_style', '3')); $boatseller_blog_style = esc_attr($boatseller_blog_style); if ($boatseller_blog_style == '3') wp_enqueue_script('boatseller-masonry', get_template_directory_uri() . '/js/masonry.pkgd.js', array('jquery'), boatsellerVERSION, true); } add_action('wp_enqueue_scripts', 'boatseller_scripts'); /** * Tiny MCE Extra Buttons * * @since boatseller 1.0 * */ if (!function_exists('boatseller_wp_mce_buttons')) { function boatseller_wp_mce_buttons($buttons) { array_unshift($buttons, 'fontselect'); // Add Font Select array_unshift($buttons, 'fontsizeselect'); // Add Font Size Select array_unshift($buttons, 6, 0, 'backcolor'); return $buttons; } } add_filter('mce_buttons_2', 'boatseller_wp_mce_buttons'); /** * Adds custom classes to the array of body classes. * * @since boat seller 1.0 * * @param array $classes Classes for the body element. * @return array (Maybe) filtered body classes. */ function boatseller_body_classes($classes) { // Adds a class of custom-background-image to sites with a custom background image. if (get_background_image()) { $classes[] = 'custom-background-image'; } // Adds a class of group-blog to sites with more than 1 published author. if (is_multi_author()) { $classes[] = 'group-blog'; } // Adds a class of no-sidebar to sites without active sidebar. if (!is_active_sidebar('sidebar-1')) { $classes[] = 'no-sidebar'; } // Adds a class of hfeed to non-singular pages. if (!is_singular()) { $classes[] = 'hfeed'; } return $classes; } add_filter('body_class', 'boatseller_body_classes'); /** * Converts a HEX value to RGB. * * @since boat seller 1.0 * * @param string $color The original color, in 3- or 6-digit hexadecimal form. * @return array Array containing RGB (red, green, and blue) values for the given * HEX code, empty array otherwise. */ function boatseller_hex2rgb($color) { $color = trim($color, '#'); if (strlen($color) === 3) { $r = hexdec(substr($color, 0, 1) . substr($color, 0, 1)); $g = hexdec(substr($color, 1, 1) . substr($color, 1, 1)); $b = hexdec(substr($color, 2, 1) . substr($color, 2, 1)); } else if (strlen($color) === 6) { $r = hexdec(substr($color, 0, 2)); $g = hexdec(substr($color, 2, 2)); $b = hexdec(substr($color, 4, 2)); } else { return array(); } return array( 'red' => $r, 'green' => $g, 'blue' => $b); } /** * Custom template tags for this theme. */ require get_template_directory() . '/inc/template-tags.php'; /** * Customizer additions. */ require get_template_directory() . '/inc/customizer.php'; /** * Add custom image sizes attribute to enhance responsive image functionality * for content images * * @since boat seller 1.0 * * @param string $sizes A source size value for use in a 'sizes' attribute. * @param array $size Image size. Accepts an array of width and height * values in pixels (in that order). * @return string A source size value for use in a content image 'sizes' attribute. */ function boatseller_content_image_sizes_attr($sizes, $size) { $width = $size[0]; 840 <= $width && $sizes = '(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px'; if ('page' === get_post_type()) { 840 > $width && $sizes = '(max-width: ' . $width . 'px) 85vw, ' . $width . 'px'; } else { 840 > $width && 600 <= $width && $sizes = '(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px'; 600 > $width && $sizes = '(max-width: ' . $width . 'px) 85vw, ' . $width . 'px'; } return $sizes; } add_filter('wp_calculate_image_sizes', 'boatseller_content_image_sizes_attr', 10, 2); /** * Add custom image sizes attribute to enhance responsive image functionality * for post thumbnails * * @since boat seller 1.0 * * @param array $attr Attributes for the image markup. * @param int $attachment Image attachment ID. * @param array $size Registered image size or flat array of height and width dimensions. * @return string A source size value for use in a post thumbnail 'sizes' attribute. */ function boatseller_post_thumbnail_sizes_attr($attr, $attachment, $size) { if ('post-thumbnail' === $size) { is_active_sidebar('sidebar-1') && $attr['sizes'] = '(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 60vw, (max-width: 1362px) 62vw, 840px'; !is_active_sidebar('sidebar-1') && $attr['sizes'] = '(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 88vw, 1200px'; } return $attr; } add_filter('wp_get_attachment_image_attributes', 'boatseller_post_thumbnail_sizes_attr', 10, 3); /** * Modifies tag cloud widget arguments to have all tags in the widget same font size. * * @since boat seller 1.1 * * @param array $args Arguments for tag cloud widget. * @return array A new modified arguments. */ function boatseller_widget_tag_cloud_args($args) { $args['largest'] = 1; $args['smallest'] = 1; $args['unit'] = 'em'; return $args; } add_filter('widget_tag_cloud_args', 'boatseller_widget_tag_cloud_args'); function boatseller_sanitizehtml($str) { $allowed_html = array( 'a' => array( 'href' => true, 'title' => true, ), 'abbr' => array('title' => true, ), 'acronym' => array('title' => true, ), 'b' => array(), 'blockquote' => array('cite' => true, ), 'cite' => array(), 'code' => array(), 'del' => array('datetime' => true, ), 'em' => array(), 'i' => array(), 'q' => array('cite' => true, ), 'strike' => array(), 'strong' => array(), ); wp_kses($str, $allowed_html); return trim($str); } /** * Add support to WooCommerce * * @since boatseller 1.0 * */ function boatseller_wrapper_start() { echo '<section id="main">'; } function boatseller_wrapper_end() { echo '</section>'; } remove_action('woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10); remove_action('woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10); add_action('woocommerce_before_main_content', 'boatseller_wrapper_start', 10); add_action('woocommerce_after_main_content', 'boatseller_wrapper_end', 10); add_action('woocommerce_before_main_content', 'boatseller_remove_sidebar'); function boatseller_remove_sidebar() { if (is_shop()) { remove_action('woocommerce_sidebar', 'woocommerce_get_sidebar', 10); } } add_action('after_setup_theme', 'boatseller_woocommerce_support'); function boatseller_woocommerce_support() { add_theme_support('woocommerce'); } // End WooCommerce function boatseller_customize_control_js() { wp_enqueue_script('boatseller_customizer_control', boatsellerURL . '/js/customizer-control.js', array('customize-controls', 'jquery'), boatsellerVERSION, true); } add_action('customize_controls_enqueue_scripts', 'boatseller_customize_control_js'); function boatseller_remove_header() { remove_theme_support('custom-header'); } add_action('after_setup_theme', 'boatseller_remove_header'); function boatseller_custom_active_item_classes($classes = array(), $menu_item = false) { global $post; if (is_object($menu_item->url)) $classes[] = ($menu_item->url == get_post_type_archive_link($post->post_type)) ? 'current-menu-item' : ''; return $classes; } add_filter('nav_menu_css_class', 'boatseller_custom_active_item_classes', 10, 2); if (get_theme_mod('boatseller_search_icon', '1') == '1' or is_customize_preview ()) add_filter('wp_nav_menu_items', 'boatseller_add_to_menu', 10, 2); function boatseller_add_to_menu($items, $args) { if ($args->theme_location == 'primary') { $loginlink = "#"; $items .= '<li class="search-toggle"><a id="search-toggle" class="menu-item-search" href="#"><i class="fa fa-search search-toggle"></i></a></li>'; } return $items; }