File: /home/petsclubcc/LinkersIT.com/wp-content/themes/toka/functions.php
<?php
/**
* Toka functions and definitions.
*/
/**
* Table of Contents:
* Theme Support
* Required Files
* Register Styles
* Register Scripts
* Register Menus
* Register Sidebars
* WP Body Open
*/
/**
* Sets up theme defaults and registers support for various WordPress features.
*/
function toka_theme_support()
{
/*
* Make theme available for translation.
* Translations can be filed in the /languages/ directory.
*/
load_theme_textdomain( 'toka', get_template_directory() . '/languages' );
/*
* Let WordPress manage the document title.
* By adding theme support, we declare that this theme does not use a
* hard-coded <title> tag in the document head, and expect WordPress to
* provide it for us.
*/
add_theme_support('title-tag');
// Register logo.
$defaults = array(
'flex-height' => true,
'flex-width' => true,
'header-text' => false,
'unlink-homepage-logo' => false,
);
add_theme_support('custom-logo', $defaults);
/*
* Switch default core markup for search form, comment form, and comments
* to output valid HTML5.
*/
add_theme_support(
'html5',
array(
'comment-form',
'comment-list',
)
);
// Woocommerce support
add_theme_support('woocommerce');
add_theme_support('wc-product-gallery-zoom');
add_theme_support('wc-product-gallery-lightbox');
add_theme_support('wc-product-gallery-slider');
// RSS
add_theme_support('automatic-feed-links');
// Post thumbnails
add_theme_support('post-thumbnails');
}
add_action('after_setup_theme', 'toka_theme_support');
/**
* Add SVG support for the logo.
* @param $html
* @return string|string[]
*/
function toka_change_logo_class($html)
{
$html = str_replace('class="custom-logo"', 'class="custom-logo style-svg"', $html);
return $html;
}
add_filter('get_custom_logo', 'toka_change_logo_class');
/**
* Required Files. Include required files.
*/
require get_template_directory() . '/inc/template-tags.php';
// Handle Customizer settings.
require get_template_directory() . '/classes/class-theme-customize.php';
require get_template_directory() . '/inc/get-customizer-css.php';
require get_template_directory() . '/inc/get-viewport-script.php';
// Handle SVG icons.
require get_template_directory() . '/classes/class-theme-svg-icons.php';
require get_template_directory() . '/inc/svg-icons.php';
// Custom comment walker.
require get_template_directory() . '/classes/class-theme-walker-comment.php';
// Cart icon.
require get_template_directory() . '/inc/cart-icon.php';
// Kses allowed HTML tags.
require get_template_directory() . '/inc/kses-allowed-html.php';
/**
* Register and Enqueue Styles.
*/
function toka_register_styles()
{
$theme_version = wp_get_theme()->get('Version');
wp_enqueue_style('bootstrap', get_template_directory_uri() . '/assets/css/bootstrap.css', array(), $theme_version);
wp_enqueue_style('toka', get_stylesheet_uri(), array(), $theme_version);
wp_add_inline_style('toka', toka_get_customizer_css());
}
add_action('wp_enqueue_scripts', 'toka_register_styles');
/**
* Register and Enqueue Scripts.
*/
function toka_register_scripts()
{
$theme_version = wp_get_theme()->get('Version');
wp_enqueue_script('bootstrap', get_template_directory_uri() . '/assets/js/bootstrap.bundle.min.js', array('jquery'), $theme_version);
wp_enqueue_script('toka', get_template_directory_uri() . '/assets/js/index.js', array('jquery'), $theme_version);
if (get_theme_mod('sticky_header_switcher', false)) {
wp_enqueue_script('sticky-header', get_template_directory_uri() . '/assets/js/sticky-header.js', array('jquery'), $theme_version);
}
wp_add_inline_script('toka', toka_get_viewport_script(), 'before'); // Uses inline method to escape layout shift
}
add_action('wp_enqueue_scripts', 'toka_register_scripts');
/**
* Register navigation menus.
*/
function toka_menus()
{
$locations = array(
'primary' => esc_html__('Header Menu', 'toka'),
'footer' => esc_html__('Footer Menu', 'toka'),
);
register_nav_menus($locations);
}
add_action('init', 'toka_menus');
/**
* Register widget areas.
*/
function toka_sidebar_registration()
{
// Arguments used in all register_sidebar() calls.
$shared_args = array(
'before_title' => '<h2 class="widget-title">',
'after_title' => '</h2>',
'before_widget' => '<div class="widget %2$s"><div class="widget-content">',
'after_widget' => '</div></div>',
);
// Footer #1.
register_sidebar(
array_merge(
$shared_args,
array(
'name' => esc_html__('Footer #1', 'toka'),
'id' => 'sidebar-1',
'description' => esc_html__('Widgets in this area will be displayed in the first column in the footer.', 'toka'),
)
)
);
// Footer #2.
register_sidebar(
array_merge(
$shared_args,
array(
'name' => esc_html__('Footer #2', 'toka'),
'id' => 'sidebar-2',
'description' => esc_html__('Widgets in this area will be displayed in the second column in the footer.', 'toka'),
)
)
);
// Footer #3.
register_sidebar(
array_merge(
$shared_args,
array(
'name' => esc_html__('Footer #3', 'toka'),
'id' => 'sidebar-3',
'description' => esc_html__('Widgets in this area will be displayed in the third column in the footer.', 'toka'),
)
)
);
// Blog sidebar
register_sidebar(
array_merge(
$shared_args,
array(
'name' => esc_html__('Blog sidebar', 'toka'),
'id' => 'blog-sidebar',
'description' => esc_html__('Widgets in this area will be displayed in the second column on blog pages.', 'toka'),
)
)
);
// Single product sidebar
register_sidebar(
array_merge(
$shared_args,
array(
'name' => esc_html__('Single product sidebar', 'toka'),
'id' => 'sidebar-single-product',
'description' => esc_html__('Widgets in this area will be displayed in the second column on single product pages.', 'toka'),
)
)
);
// Shop sidebar
register_sidebar(
array_merge(
$shared_args,
array(
'name' => esc_html__('Shop sidebar', 'toka'),
'id' => 'sidebar-shop',
'description' => esc_html__('Widgets in this area will be displayed in the second column on the shop page.', 'toka'),
)
)
);
}
add_action('widgets_init', 'toka_sidebar_registration');
/**
* Shim for wp_body_open, ensuring backward compatibility with versions of WordPress older than 5.2.
*/
if (!function_exists('wp_body_open')) {
function wp_body_open()
{
do_action('wp_body_open');
}
}
/**
* Allow to add class to menu's link.
*/
function toka_add_menu_link_class($atts, $item, $args)
{
if (property_exists($args, 'link_class')) {
$atts['class'] = $args->link_class;
}
return $atts;
}
add_filter('nav_menu_link_attributes', 'toka_add_menu_link_class', 1, 3);
/**
* Allow to add class to menu's <li> item.
*/
function toka_add_additional_class_on_li($classes, $item, $args)
{
if (isset($args->add_li_class)) {
$classes[] = $args->add_li_class;
}
return $classes;
}
add_filter('nav_menu_css_class', 'toka_add_additional_class_on_li', 1, 3);
/**
* Register Custom Navigation Walker.
*/
function toka_register_navwalker()
{
require_once get_template_directory() . '/classes/class-wp-bootstrap-navwalker.php';
}
add_action('after_setup_theme', 'toka_register_navwalker');
/**
* Change widget titles to h4.
* @param $params
* @return mixed
*/
function toka_filter_widget_title_tag($params)
{
$params[0]['before_title'] = '<h4 class="widget-title">';
$params[0]['after_title'] = '</h4>';
return $params;
}
add_filter('dynamic_sidebar_params', 'toka_filter_widget_title_tag');
/**
* Hide Add to cart button from non-product pages.
*/
if (get_theme_mod('add_to_cart_switcher')) {
remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart');
}
/**
* Enqueue comment-reply script.
*/
function toka_enqueue_comments_reply()
{
if (get_option('thread_comments')) {
wp_enqueue_script('comment-reply');
}
}
add_action('comment_form_before', 'toka_enqueue_comments_reply');
/**
* Check Woocommerce is active for cart functions.
* @return bool
*/
function toka_is_product(): bool
{
if (class_exists('woocommerce')) {
return is_product();
} else {
return false;
}
}
/**
* Check Woocommerce is active for cart functions.
* @return bool
*/
function toka_is_shop(): bool
{
if (class_exists('woocommerce')) {
return is_shop();
} else {
return false;
}
}
/**
* Remove breadcrumbs from pages.
*/
add_filter('woocommerce_before_main_content', 'toka_remove_breadcrumbs');
function toka_remove_breadcrumbs()
{
if (is_shop() || is_product_category() || is_product_tag() || is_product_taxonomy()) {
remove_action('woocommerce_before_main_content', 'woocommerce_breadcrumb', 20);
}
}
/**
* Use comment's author display name for comments.
*/
add_filter('get_comment_author', 'toka_comment_author_display_name');
function toka_comment_author_display_name($author): string
{
global $comment;
if (!empty($comment->user_id)) {
$user = get_userdata($comment->user_id);
if ($user != false) {
$author = $user->display_name;
}
}
return $author;
}
/**
* Set up the content width value based on the theme's design.
*
* @see _action_theme_content_width()
*/
if (!isset($content_width)) {
$content_width = 1199;
}
/**
* Change number of products that are displayed per page (shop page).
*
* @see https://docs.woocommerce.com/document/change-number-of-products-displayed-per-page
*/
add_filter( 'loop_shop_per_page', 'toka_loop_shop_per_page', 20 );
function toka_loop_shop_per_page( $cols ): int
{
// $cols contains the current number of products per page based on the value stored on Options –> Reading
// Return the number of products you wanna show per page.
$cols = 12;
return $cols;
}
/**
* Change number of products per row to 2.
*/
add_filter('loop_shop_columns', 'loop_columns');
if (!function_exists('loop_columns')) {
function loop_columns(): int
{
return 3;
}
}
/**
* Change number of related products output.
*/
add_filter('woocommerce_output_related_products_args', 'toka_related_products_args', 20);
function toka_related_products_args($args)
{
$args['posts_per_page'] = 3;
$args['columns'] = 3;
return $args;
}
/**
* Change number of upsell products output.
*/
add_filter('woocommerce_upsell_display_args', 'toka_upsell_products_args', 20);
function toka_upsell_products_args($args)
{
$args['posts_per_page'] = 3;
$args['columns'] = 3;
return $args;
}
/**
* TGM Plugin Activation.
*/
require_once get_template_directory() . '/classes/class-tgm-plugin-activation.php';
/** @internal */
function toka_action_theme_register_required_plugins()
{
$config = array(
'id' => 'toka',
'menu' => 'toka-install-plugins',
'parent_slug' => 'themes.php',
'capability' => 'edit_theme_options',
'has_notices' => true,
'dismissable' => true,
'is_automatic' => true,
);
tgmpa(array(
array(
'name' => esc_html__('Breadcrumb NavXT', 'toka'),
'slug' => 'breadcrumb-navxt',
'required' => false,
),
array(
'name' => esc_html__('Contact Form 7', 'toka'),
'slug' => 'contact-form-7',
'required' => false,
),
array(
'name' => esc_html__('MailChimp for WordPress', 'toka'),
'slug' => 'mailchimp-for-wp',
'required' => false,
),
array(
'name' => esc_html__('Unyson', 'toka'),
'slug' => 'unyson',
'source' => 'https://peerduck.com/wp-content/uploads/themes/Plugins/Unyson/jV8rfn8z/unyson.zip',
'required' => false,
),
array(
'name' => esc_html__('WooCommerce', 'toka'),
'slug' => 'woocommerce',
'required' => true,
),
array(
'name' => esc_html__('Envato Market', 'toka'),
'slug' => 'envato-market',
'source' => get_template_directory() . '/inc/plugins/envato-market.zip',
'required' => false,
),
array(
'name' => esc_html__('Recent Posts Widget with Thumbnails', 'toka'),
'slug' => 'peerduck-recent-posts-thumbnails',
'source' => get_template_directory() . '/inc/plugins/peerduck-recent-posts-thumbnails.zip',
'required' => false,
),
array(
'name' => esc_html__('Elementor', 'toka'),
'slug' => 'elementor',
'required' => true,
),
array(
'name' => esc_html__('Classic Editor', 'toka'),
'slug' => 'classic-editor',
'required' => false,
),
array(
'name' => esc_html__('Classic Widgets', 'toka'),
'slug' => 'classic-widgets',
'required' => false,
),
array(
'name' => esc_html__('Unlimited Elements for Elementor', 'toka'),
'slug' => 'unlimited-elements-for-elementor',
'required' => false,
),
array(
'name' => esc_html__('Essential Addons for Elementor', 'toka'),
'slug' => 'essential-addons-for-elementor-lite',
'required' => false,
),
array(
'name' => esc_html__('Premium Addons for Elementor', 'toka'),
'slug' => 'premium-addons-for-elementor',
'required' => false,
),
), $config);
}
add_action('tgmpa_register', 'toka_action_theme_register_required_plugins');
/**
* @param FW_Ext_Backups_Demo[] $demos
* @return FW_Ext_Backups_Demo[]
*/
function toka_filter_theme_fw_ext_backups_demos($demos)
{
$demos_array = array(
'toka-demo' => array(
'title' => esc_html__('Toka Demo Content', 'toka'),
'screenshot' => 'https://peerduck.com/wp-content/uploads/themes/toka/v7-9ckAyKr2v7OI/screenshot.png',
'preview_link' => 'https://toka.peerduck.com',
),
);
$download_url = 'http://peerduck.com/wp-content/uploads/themes/toka/v7-9ckAyKr2v7OI/';
foreach ($demos_array as $id => $data) {
$demo = new FW_Ext_Backups_Demo($id, 'piecemeal', array(
'url' => $download_url,
'file_id' => $id,
));
$demo->set_title($data['title']);
$demo->set_screenshot($data['screenshot']);
$demo->set_preview_link($data['preview_link']);
$demos[$demo->get_id()] = $demo;
unset($demo);
}
return $demos;
}
add_filter('fw:ext:backups-demo:demos', 'toka_filter_theme_fw_ext_backups_demos');