add_setting(
$configuration['id'],
array(
'default' => $configuration['default'],
'transport' => $configuration['transport'],
)
);
}
call_user_func( array( $manager, $method ), $configuration['id'], $configuration );
}
}
if ( ! function_exists( 'is_block_editor_screen' ) ) {
/**
* Check is block editor screen
*
* @return boolean
*
* @since 1.0
*/
function is_block_editor_screen() {
if ( ! is_admin() ) {
return false;
}
$screen = get_current_screen();
if ( ! $screen->is_block_editor ) {
return false;
}
return true;
}
}
if ( ! function_exists( 'is_wc_installed' ) ) {
/**
* Check whether WC is installed
*
* @return boolean
*
* @since 1.0
*/
function is_wc_installed() {
return function_exists( 'WC' );
}
}
if ( ! function_exists( 'is_elementor_installed' ) ) {
/**
* Check whether Elementor is installed
*
* @return boolean
*
* @since 1.0
*/
function is_elementor_installed() {
return class_exists( 'Elementor\Plugin' );
}
}
if ( ! function_exists( 'brandy_is_starter_sites_installed' ) ) {
/**
* Check whether Brandy Starter Sites is installed
*
* @return boolean
*
* @since 1.0
*/
function brandy_is_starter_sites_installed() {
return defined( 'BRANDYSITES_VERSION' );
}
}
if ( ! function_exists( 'is_brandy_blocks_installed' ) ) {
/**
* Check whether Brandy Blocks plugin is installed
*
* @return boolean
*
* @since 1.0
*/
function is_brandy_blocks_installed() {
return defined( 'BRANDY_BLOCKS_VERSION' );
}
}
if ( ! function_exists( 'brandy_get_reading_time' ) ) {
/**
* Get reading time for given content.
* Calculate by minutes.
*
* @return string.
*
* @since 1.0
*/
function brandy_get_reading_time( $content = '' ) {
$WORDS_PER_MINUTE = 250;
$wordcount = str_word_count( wp_strip_all_tags( $content ) );
$reading_time = ceil( $wordcount / $WORDS_PER_MINUTE );
return sprintf( '%1$s %2$s', _n( 'minute', 'minutes', $reading_time, 'brandy' ), $reading_time );
}
}
if ( ! function_exists( 'brandy_current_niche' ) ) {
/**
* Get current site niche.
*
* @return string|boolean Current niche.
*
* @since 1.0
*/
function brandy_current_niche() {
return get_option( 'brandy_current_niche', 'default' );
}
}
if ( ! function_exists( 'brandy_is_current_niche' ) ) {
/**
* Check given niche is current site niche.
*
* @param string $niche Niche ID.
*
* @return string|boolean Result.
*
* @since 1.0
*/
function brandy_is_current_niche( $niche ) {
return brandy_current_niche() == $niche;
}
}
if ( ! function_exists( 'brandy_get_template_part' ) ) {
/**
* Get template part by niche.
* Allow developer to alter theme template part.
* Developer can alter part by function brandy_register_template_part.
*
* @param string $slug Part slug.
* @param string|null $name Template name.
* @param array $args Same as get_template_part args
*
* @since 1.0
*/
function brandy_get_template_part( $slug, $name = \null, $args = array() ) {
$template = $slug . ( ! empty( $name ) ? "-$name" : '' );
$template_file = apply_filters( "brandy/$template", '' );
if ( empty( $template_file ) || ! file_exists( $template_file ) ) {
return get_template_part( $slug, $name, $args );
}
require $template_file;
}
}
if ( ! function_exists( 'brandy_get_nav_menu_name' ) ) {
/**
* Returns menu name.
* If menu doesn't exist, find menu name based on where the menu is placing (Header/Footer).
*
* @param string $menu_name Menu name to check exists
* @param string $builder Header or Footer builder
* @return string Menu name
*
* @since 1.0
*/
function brandy_get_nav_menu_name( $menu_name, $builder = 'header' ) {
if ( wp_get_nav_menu_object( $menu_name ) ) {
return $menu_name;
}
$builder_locations = array();
if ( 'header' === $builder ) {
$builder_locations = MenuHelper::get_header_locations();
}
if ( 'footer' === $builder ) {
$builder_locations = MenuHelper::get_footer_locations();
}
$all_locations = array_merge(
array_keys( $builder_locations ),
array_keys( MenuHelper::get_main_locations() )
);
while ( ! empty( $all_locations ) ) {
$location = array_shift( $all_locations );
$menu_name_by_location = wp_get_nav_menu_name( $location );
if ( ! empty( $menu_name_by_location ) ) {
return $menu_name_by_location;
}
}
return $menu_name;
}
}
if ( ! function_exists( 'brandy_the_post_thumbnail' ) ) {
/**
* Print current post thumbnail.
* Show default thumbnail when post doesn't have featured image.
*
* @param int|WP_Post
*
* @since 1.0
*/
function brandy_the_post_thumbnail( $post = null ) {
$thumbnail = get_the_post_thumbnail( $post );
if ( empty( $thumbnail ) ) {
echo wp_kses_post( brandy_get_post_placeholder_thumbnail() );
} else {
echo wp_kses_post( $thumbnail );
}
}
}
if ( ! function_exists( 'brandy_get_post_placeholder_thumbnail' ) ) {
/**
* Returns placeholder feature image for post
* which doesn't have thumnbnail
*
* @return string Image tag
* @since 1.0
*/
function brandy_get_post_placeholder_thumbnail( $attr = array() ) {
$src = brandy_get_post_placeholder_thumbnail_url();
$default_attr = array(
'src' => esc_url( $src ),
'alt' => 'Thumbnail placeholder',
);
$attr = wp_parse_args( $default_attr, $attr );
$attr_string = '';
ob_start();
brandy_print_dom_attributes( $attr );
$attr_string = ob_get_contents();
ob_end_clean();
return sprintf( '', $attr_string );
}
}
if ( ! function_exists( 'brandy_get_post_placeholder_thumbnail_url' ) ) {
/**
* Returns placeholder feature image for post
* which doesn't have thumnbnail
*
* @return string Image tag
* @since 1.0
*/
function brandy_get_post_placeholder_thumbnail_url() {
return BRANDY_TEMPLATE_URL . '/assets/images/woocommerce-placeholder-gray.webp';
}
}
if ( ! function_exists( 'brandy_get_user_device' ) ) {
/**
* Get user device.
*
* @return string User device.
*/
function brandy_get_user_device() {
$user_agent = $_SERVER['HTTP_USER_AGENT'] ?? null;
if ( empty( $user_agent ) ) {
return null;
}
$mobile_devices = array( 'mobile', 'android', 'iphone', 'ipod', 'blackberry', 'opera mini', 'iemobile' );
$tablet_devices = array( 'tablet', 'ipad', 'playbook', 'kindle', 'nexus 7', 'nexus 10' );
$posible_mobile_devices = array_merge( $mobile_devices, $tablet_devices );
foreach ( $posible_mobile_devices as $device ) {
if ( strpos( $user_agent, $device ) !== false ) {
return 'mobile';
}
}
return 'desktop';
}
}
if ( ! function_exists( 'brandy_get_body_attributes' ) ) {
function brandy_get_body_attributes() {
global $post;
$current_niche = brandy_current_niche();
return apply_filters(
'brandy_body_attributes',
array_merge(
empty( $current_niche ) ? array() : array(
'data-current-niche' => $current_niche,
),
array(
'data-loop-product-layout' => ProductCatalogService::get_product_layout(),
'data-brandy-blocks-installed' => is_brandy_blocks_installed() ? 'true' : 'false',
)
)
);
}
}
if ( ! function_exists( 'brandy_get_editable_class' ) ) {
/**
* Returns class for wrapper when in customize mode
*/
function brandy_get_editable_class( $edit_type = 'section' ) {
if ( is_customize_preview() ) {
return 'row' === $edit_type ? 'editable-part editable-row-part' : 'editable-part editable-element-part';
}
return '';
}
}
if ( ! function_exists( 'brandy_get_editable_attributes' ) ) {
/**
* Returns attrubutes for wrapper when in customize mode
*
* @param string $section_id Section id.
*/
function brandy_get_editable_attributes( string $section_id ) {
return true ? "data-section-id=$section_id" : '';
}
}
if ( ! function_exists( 'brandy_print_dom_attributes' ) ) {
/**
* Print DOM element attributes from given array
*
* @param array $attributes
*
* @return void
*/
function brandy_print_dom_attributes( $attributes ) {
foreach ( $attributes as $attr_name => $attr_value ) {
echo esc_attr( $attr_name );
if ( ! empty( $attr_value ) ) {
echo '="' . esc_attr( $attr_value ) . '"';
}
}
}
}
if ( ! function_exists( 'brandy_get_devices' ) ) {
/**
* Returns all device of theme
*
* @return array
*/
function brandy_get_devices() {
return array( 'desktop', 'tablet', 'mobile' );
}
}
if ( ! function_exists( 'brandy_get_enabled_device_classes' ) ) {
/**
* Return classes which indicate which device is hidden
*
* @param array $enabled_devices List enabled devices.
*
* @return string
*/
function brandy_get_enabled_device_classes( $enabled_devices ) {
if ( ! is_array( $enabled_devices ) ) {
return '';
}
$hidden_devices = array_diff( array( 'desktop', 'mobile' ), $enabled_devices );
$classes = implode(
' ',
array_map(
function( $device ) {
if ( 'mobile' === $device ) {
return 'hidden-md hidden-sm';
}
return 'hidden-lg';
},
$hidden_devices
)
);
return $classes;
}
}
if ( ! function_exists( 'brandy_render_badge' ) ) {
/**
* Render Brandy badge
*
* @param string $number
* @param string $attrs
* @param string $class
*
* @return void
*/
function brandy_render_badge( $number, $attrs = '', $class = '' ) {
get_template_part(
'template-parts/common/badge',
'',
array(
'number' => $number,
'attrs' => $attrs,
'class' => $class,
)
);
}
}
if ( ! function_exists( 'brandy_render_icon' ) ) {
/**
* Render Brandy icon
*
* @param string $icon Icon source
* @param string $class
* @param string $attrs
*
* @return void
*/
function brandy_render_icon( $icon, $attrs = array() ) {
get_template_part(
'template-parts/common/icon',
'',
array(
'icon' => $icon,
'attrs' => $attrs,
)
);
}
}
if ( ! function_exists( 'brandy_render_wishlist' ) ) {
/**
* Render wishlist content template
*/
function brandy_render_wishlist( $settings ) {
get_template_part(
'template-parts/wishlist/wishlist-drawer',
'',
array(
'settings' => $settings,
)
);
}
}
if ( ! function_exists( 'brandy_get_rating_html' ) ) {
/**
* Display product ratings
*
* @param int $rating Rating for this product (overall or single)
* @param int $count Total reviews for this product
* @param boolean $only_stars Show only stars or not
* @param boolean $total_reviews .
*/
function brandy_get_rating_html( $product, $rating, $rating_count = 0, $show_only_stars = false, $show_overall = false, $review_count = 0 ) {
// if ( empty( $product ) ) {
// return;
// }
brandy_get_template_part(
'template-parts/rating',
null,
array(
// 'product' => $product,
'rating' => $rating,
'rating_count' => $rating_count,
'show_only_stars' => $show_only_stars,
'review_count' => $review_count,
'show_overall' => $show_overall,
)
);
}
}
if ( ! function_exists( 'brandy_get_current_page_id' ) ) {
/**
* Get current page ID
*/
function brandy_get_current_page_id() {
if ( is_front_page() ) {
return get_option( 'page_on_front' );
} elseif ( is_home() ) {
return get_option( 'page_for_posts' );
} elseif ( function_exists( 'is_woocommerce' ) && is_woocommerce() ) {
return wc_get_page_id( 'shop' );
} else {
return get_the_ID();
}
}
}
if ( ! function_exists( 'brandy_render_link_button' ) ) {
function brandy_render_link_button( $args ) {
$default_args = array(
'text' => __( 'Button', 'brandy' ),
'href' => '#',
'class' => '',
);
$args = wp_parse_args( $args, $default_args );
?>
get_queried_object_id();
return $page_id;
}
}
if ( ! function_exists( 'brandy_get_home_page_id' ) ) {
/**
* Get home page id.
* Returns null home page isn't assigned.
*
* @return int|null Id for home page
*
* @since 1.0
*/
function brandy_get_home_page_id() {
$show_on_front = get_option( 'show_on_front' );
if ( 'page' !== $show_on_front ) {
return null;
}
$home_page_id = get_option( 'page_on_front', null );
return $home_page_id;
}
}
if ( ! function_exists( 'brandy_is_home' ) ) {
/**
* Check is homepage
*
* @return bool
*
* @since 1.0
*/
function brandy_is_home() {
$home_page_id = brandy_get_home_page_id();
return is_home() || ( brandy_get_current_page_id() == $home_page_id );
}
}
if ( ! function_exists( 'brandy_is_thankyou_page' ) ) {
/**
* Check if current page is thank you page.
*
* @return boolean
*/
function brandy_is_thankyou_page() {
return \is_wc_installed() && function_exists( 'is_wc_endpoint_url' ) && \is_wc_endpoint_url( 'order-received' );
}
}
if ( ! function_exists( 'brandy_get_blog_page_id' ) ) {
/**
* Get blog page id.
* Returns null blog page isn't assigned.
*
* @return int|null Id for blog page
*
* @since 1.0
*/
function brandy_get_blog_page_id() {
$show_on_front = get_option( 'show_on_front' );
if ( 'page' !== $show_on_front ) {
return null;
}
$blog_page_id = get_option( 'page_for_posts', null );
return $blog_page_id;
}
}
if ( ! function_exists( 'brandy_get_blog_page_url' ) ) {
/**
* Get blog page url.
* Returns # blog page isn't assigned.
*
* @return string Url for blog page
*
* @since 1.0
*/
function brandy_get_blog_page_url() {
$blog_page_id = brandy_get_blog_page_id();
if ( empty( $blog_page_id ) ) {
return '#';
}
$url = add_query_arg( array( 'page_id' => $blog_page_id ), home_url() );
return $url;
}
}
if ( ! function_exists( 'brandy_get_shop_page_id' ) ) {
/**
* Get shop page ID.
*
* @return int|null Shop page ID.
*/
function brandy_get_shop_page_id() {
return function_exists( 'wc_get_page_id' ) ? \wc_get_page_id( 'shop' ) : null;
}
}
if ( ! function_exists( 'brandy_get_shop_page_url' ) ) {
/**
* Get shop page url.
* Returns # when WooCommerce is not installed.
*
* @return string Url for shop page
*
* @since 1.0
*/
function brandy_get_shop_page_url() {
return function_exists( 'wc_get_page_permalink' ) ? \wc_get_page_permalink( 'shop' ) : '#';
}
}
if ( ! function_exists( 'brandy_get_cart_page_id' ) ) {
/**
* Get cart page ID.
*
* @return int|null Cart page ID.
*/
function brandy_get_cart_page_id() {
return function_exists( 'wc_get_page_id' ) ? \wc_get_page_id( 'cart' ) : null;
}
}
if ( ! function_exists( 'brandy_get_cart_page_url' ) ) {
/**
* Get cart page url.
* Returns # when WooCommerce is not installed.
*
* @return string Url for cart page
*
* @since 1.0
*/
function brandy_get_cart_page_url() {
return function_exists( 'wc_get_cart_url' ) ? \wc_get_cart_url() : '#';
}
}
if ( ! function_exists( 'brandy_get_checkout_page_id' ) ) {
/**
* Get checkout page ID.
*
* @return int|null Checkout page ID.
*/
function brandy_get_checkout_page_id() {
return function_exists( 'wc_get_page_id' ) ? \wc_get_page_id( 'checkout' ) : null;
}
}
if ( ! function_exists( 'brandy_get_checkout_page_url' ) ) {
/**
* Get checkout page url.
* Returns # when WooCommerce is not installed.
*
* @return string Url for checkout page
*
* @since 1.0
*/
function brandy_get_checkout_page_url() {
return function_exists( 'wc_get_checkout_url' ) ? \wc_get_checkout_url() : '#';
}
}
if ( ! function_exists( 'brandy_get_contact_us_page_id' ) ) {
/**
* Get contact us page id.
* Returns null contact us page isn't assigned.
*
* @return int|null Id for contact us page
*
* @since 1.1.7
*/
function brandy_get_contact_us_page_id() {
$pages = get_posts(
array(
'post_type' => 'page',
'meta_key' => '_wp_page_template',
'meta_value' => 'contact-us',
'posts_per_page' => 1,
)
);
if ( ! empty( $pages ) ) {
return $pages[0]->ID;
}
return null;
}
}
if ( ! function_exists( 'brandy_get_contact_us_page_url' ) ) {
/**
* Get contact us page url.
* Returns null contact us page isn't assigned.
*
* @return string|null Url for contact us page
*
* @since 1.1.7
*/
function brandy_get_contact_us_page_url() {
$blog_page_id = brandy_get_contact_us_page_id();
if ( empty( $blog_page_id ) ) {
return '#';
}
$url = add_query_arg( array( 'page_id' => $blog_page_id ), home_url() );
return $url;
}
}
if ( ! function_exists( 'brandy_get_about_us_page_id' ) ) {
/**
* Get about us page id.
* Returns null about us page isn't assigned.
*
* @return int|null Id for about us page
*
* @since 1.1.7
*/
function brandy_get_about_us_page_id() {
$pages = get_posts(
array(
'post_type' => 'page',
'meta_key' => '_wp_page_template',
'meta_value' => 'about-us',
'posts_per_page' => 1,
)
);
if ( ! empty( $pages ) ) {
return $pages[0]->ID;
}
return null;
}
}
if ( ! function_exists( 'brandy_get_about_us_page_url' ) ) {
/**
* Get about us page url.
* Returns null about us page isn't assigned.
*
* @return string|null Url for about us page
*
* @since 1.1.7
*/
function brandy_get_about_us_page_url() {
$blog_page_id = brandy_get_about_us_page_id();
if ( empty( $blog_page_id ) ) {
return '#';
}
$url = add_query_arg( array( 'page_id' => $blog_page_id ), home_url() );
return $url;
}
}
if ( ! function_exists( 'brandy_get_login_url' ) ) {
/**
* Get login page url.
* Returns wp login page when WooCommerce is not installed.
*
* @return string Url for login page
*
* @deprecated 1.4
*
* @since 1.0
*/
function brandy_get_login_url() {
return function_exists( 'wc_get_account_endpoint_url' ) ? \wc_get_account_endpoint_url( 'dashboard' ) : wp_login_url();
}
}
if ( ! function_exists( 'brandy_get_my_account_page_url' ) ) {
/**
* Get my account page url.
* Returns wp account page when WooCommerce is not installed.
*
* @return string Url for account page
*
* @since 1.4
*/
function brandy_get_my_account_page_url( $section = 'dashboard' ) {
return function_exists( 'wc_get_account_endpoint_url' ) ? \wc_get_account_endpoint_url( $section ) : wp_login_url();
}
}
if ( ! function_exists( 'brandy_get_logout_url' ) ) {
/**
* Get logout page url.
* Returns wp logout page when WooCommerce is not installed.
*
* @return string Url for logout page
*
* @since 1.0
*/
function brandy_get_logout_url() {
return function_exists( 'wc_get_account_endpoint_url' ) ? \wc_get_account_endpoint_url( 'customer-logout' ) : wp_logout_url();
}
}
if ( ! function_exists( 'brandy_get_terms_and_conditions_page_id' ) ) {
/**
* Get terms and conditions page id.
* Returns null terms and conditions page isn't assigned.
*
* @return int|null Id for terms and conditions page
*
* @since 1.4
*/
function brandy_get_terms_and_conditions_page_id() {
return get_option( 'woocommerce_terms_page_id', null );
}
}
if ( ! function_exists( 'brandy_get_terms_and_conditions_page_url' ) ) {
/**
* Get logout page url.
* Returns wp logout page when WooCommerce is not installed.
*
* @return string Url for logout page
*
* @since 1.4
*/
function brandy_get_terms_and_conditions_page_url() {
$terms_page_id = brandy_get_terms_and_conditions_page_id();
if ( empty( $terms_page_id ) ) {
return '#';
}
$url = add_query_arg( array( 'page_id' => $terms_page_id ), home_url() );
return $url;
}
}
if ( ! function_exists( 'brandy_get_privacy_policy_page_id' ) ) {
/**
* Get privacy policy page id.
* Returns null privacy policy page isn't assigned.
*
* @return int|null Id for privacy policy page
*
* @since 1.4
*/
function brandy_get_privacy_policy_page_id() {
return get_option( 'wp_page_for_privacy_policy', null );
}
}
if ( ! function_exists( 'brandy_get_privacy_policy_page_url' ) ) {
/**
* Get privacy policy page url.
* Returns null privacy policy page isn't assigned.
*
* @return string|null Url for privacy policy page
*
* @since 1.4
*/
function brandy_get_privacy_policy_page_url() {
$privacy_page_id = brandy_get_privacy_policy_page_id();
if ( empty( $privacy_page_id ) ) {
return '#';
}
$url = add_query_arg( array( 'page_id' => $privacy_page_id ), home_url() );
return $url;
}
}
if ( ! function_exists( 'brandy_get_refund_returns_page_url' ) ) {
/**
* Get refund returns page url.
* Returns wp refund returns page when WooCommerce is not installed.
*
* @return string Url for refund returns page
*
* @since 1.4
*/
function brandy_get_refund_returns_page_url() {
$page = get_page_by_path( 'refund-returns' );
if ( empty( $page ) ) {
return '#';
}
$url = add_query_arg( array( 'page_id' => $page->ID ), home_url() );
return $url;
}
}
if ( ! function_exists( 'brandy_get_wc_add_to_cart_button' ) ) {
/**
* Get WC add to cart button
*
* @param \WC_Product $product Product object.
* @param array $args Button arguments.
* @return string Button HTML.
*/
function brandy_get_wc_add_to_cart_button( $product, $args = array() ) {
if ( ! \is_wc_installed() ) {
return;
}
if ( empty( $product ) ) {
return;
}
$tag = isset( $args['tag'] ) ? $args['tag'] : 'button';
if ( ! is_product() && in_array( $product->get_type(), array( 'variable', 'grouped' ), true ) ) {
$tag = 'a';
}
$is_ajax = isset( $args['is_ajax'] ) ? $args['is_ajax'] : false;
$default_classes = isset( $args['class'] ) ? explode( ' ', $args['class'] ) : array();
$target_classes = array(
esc_attr( wc_wp_theme_get_element_class_name( 'button' ) ?? '' ),
'add_to_cart_button',
'product_type_' . $product->get_type(),
$is_ajax && $product->supports( 'ajax_add_to_cart' ) && $product->is_purchasable() && $product->is_in_stock() ? 'ajax_add_to_cart' : '',
);
$final_class = implode( ' ', array_unique( array_merge( $default_classes, $target_classes ) ) );
$default_attributes = array_merge(
array(
'data-product_id' => $product->get_id(),
'data-product_sku' => $product->get_sku(),
'aria-label' => $product->add_to_cart_description(),
'aria-describedby' => $product->add_to_cart_aria_describedby(),
'rel' => 'nofollow',
),
'a' === $tag ? array(
'href' => $product->add_to_cart_url(),
) : array(),
( 'button' === $tag && ! $is_ajax ) ? array(
'type' => 'submit',
) : array()
);
$button_settings = array(
'quantity' => isset( $args['quantity'] ) ? $args['quantity'] : 1,
'class' => $final_class,
'attributes' => isset( $args['attributes'] ) ? array_merge( $default_attributes, $args['attributes'] ) : $default_attributes,
);
return sprintf(
'<%1$s data-quantity="%2$s" class="%3$s" %4$s>%6$s%1s>',
esc_attr( $tag ),
esc_attr( $button_settings['quantity'] ),
esc_attr( $button_settings['class'] ),
\wc_implode_html_attributes( $button_settings['attributes'] ),
! empty( $args['text'] ) ? esc_html( $args['text'] ) : esc_html( $product->add_to_cart_text() ),
isset( $args['icon'] ) ? $args['icon'] : ''
);
}
}
if ( ! function_exists( 'brandy_wc_loop_product_item' ) ) {
/**
* Render WC loop product item
*/
function brandy_wc_loop_product_item() {
$product_layout = ProductCatalogService::get_product_layout();
$layout = LayoutService::get_layout( 'loop-product-item' );
if ( ! isset( $layout ) ) {
return;
}
$path = $layout[ $product_layout ];
if ( ! isset( $path ) || ! file_exists( $path ) ) {
return;
}
require $path;
}
}
if ( ! function_exists( 'brandy_loop_product_item' ) ) {
/**
* Render loop product item
*
* @param \WC_Product $product Product object.
* @param array $display_settings Display settings.
* @return void
*/
function brandy_loop_product_item( $product, $display_settings = array() ) {
$product_layout = ProductCatalogService::get_product_layout();
$layout = LayoutService::get_layout( 'block-loop-product-item' );
if ( ! isset( $layout ) ) {
return;
}
$path = $layout[ $product_layout ];
if ( ! isset( $path ) || ! file_exists( $path ) ) {
return;
}
require $path;
}
}
if ( ! function_exists( 'brandy_wc_loop_product_item_attributes' ) ) {
/**
* Render WC loop product item attributes
*
* @param \WC_Product $product Product object.
* @return void
*/
function brandy_wc_loop_product_item_attributes( $product = null ) {
if ( ! is_wc_installed() ) {
return;
}
$attributes = array(
'class' => implode( ' ', \wc_get_product_class( 'brandy-loop-product', $product ) ),
'data-layout' => esc_attr( ProductCatalogService::get_product_layout() ),
);
brandy_print_dom_attributes( $attributes );
}
}
if ( ! function_exists( 'brandy_get_product_collection_block_content' ) ) {
/**
* Get product collection block content
*
* @param array $args Arguments.
* @return string Block content.
* @since 1.4
*/
function brandy_get_product_collection_block_content( $args = array() ) {
ob_start();
$type = $args['type'] ?? '';
$options = array(
'perPage' => $args['perPage'] ?? apply_filters( 'brandy_products_collection_per_page', 8 ),
'columns' => $args['columns'] ?? apply_filters( 'brandy_products_collection_column', 4 ),
'taxQuery' => $args['taxQuery'] ?? \brandy_get_products_collection_demo_tax_queries(),
'featured' => $args['featured'] ?? false,
'onSale' => $args['onSale'] ?? false,
'includeDemoOnly' => $args['includeDemoOnly'] ?? true,
'pagination' => $args['pagination'] ?? false,
'pages' => $args['pages'] ?? 1,
'inheritQuery' => $args['inheritQuery'] ?? false,
'relatedByTags' => $args['relatedByTags'] ?? false,
'relatedByCategories' => $args['relatedByCategories'] ?? false,
'heading' => $args['heading'] ?? '',
'templateLayout' => $args['templateLayout'] ?? apply_filters( 'brandy_sites_query_product_layout', BRANDY_TEMPLATE_DIR . '/template-parts/query-product-layout.php' ),
);
$block_options = array(
'queryId' => 10,
'query' => array(
'perPage' => $options['perPage'],
'pages' => $options['pages'],
'offset' => 0,
'postType' => 'product',
'search' => '',
'order' => 'asc',
'orderBy' => 'title',
'exclude' => array(),
'inherit' => $options['inheritQuery'],
'taxQuery' => array(),
'isProductCollectionBlock' => true,
'featured' => false,
'woocommerceOnSale' => false,
'woocommerceStockStatus' => array( 'instock', 'outofstock', 'onbackorder' ),
'woocommerceAttributes' => array(),
'woocommerceHandPickedProducts' => array(),
),
'tagName' => 'div',
'displayLayout' => array(
'type' => 'flex',
'columns' => $options['columns'],
'shrinkColumns' => true,
),
'collection' => 'woocommerce/product-collection/' . $type,
'hideControls' => array( 'inherit' ),
'queryContextIncludes' => array( 'collection' ),
'align' => 'wide',
);
if ( ! empty( $options['relatedByTags'] ) ) {
$block_options['query']['relatedBy']['tags'] = true;
}
if ( ! empty( $options['relatedByCategories'] ) ) {
$block_options['query']['relatedBy']['categories'] = true;
}
if ( ! empty( $options['includeDemoOnly'] ) ) {
$block_options['query']['taxQuery'] = $options['taxQuery'];
}
if ( 'new-arrivals' === $type ) {
$block_options['query']['orderBy'] = 'date';
$block_options['query']['order'] = 'desc';
$block_options['query']['timeFrame'] = array(
'operator' => 'in',
'value' => '-3 months',
);
$block_options['hideControls'] = array( 'inherit', 'order' );
}
if ( 'on-sale' === $type ) {
$block_options['query']['woocommerceOnSale'] = true;
$block_options['hideControls'] = array( 'inherit', 'on-sale' );
}
if ( 'featured' === $type ) {
$block_options['query']['featured'] = true;
}
if ( 'top-rated' === $type ) {
$block_options['query']['orderBy'] = 'rating';
$block_options['query']['order'] = 'desc';
$block_options['hideControls'] = array( 'inherit', 'order' );
}
if ( 'best-sellers' === $type ) {
$block_options['query']['orderBy'] = 'popularity';
$block_options['query']['order'] = 'desc';
$block_options['hideControls'] = array( 'inherit', 'order' );
}
if ( ! empty( $args['slider'] ) ) {
$slider_settings = array(
'enabled' => true,
'loop' => false,
'slides' => array(
'desktop' => $args['slider']['slides']['desktop'] ?? 4,
'tablet' => $args['slider']['slides']['tablet'] ?? 2,
'mobile' => $args['slider']['slides']['mobile'] ?? 2,
),
'gap' => '30px',
'speed' => 1000,
'autoplay' => false,
'pauseOnHover' => true,
'pauseOnFocus' => true,
'pauseOnInteraction' => true,
'buttonsOffsetBasedOnImage' => $args['slider']['buttonsOffsetBasedOnImage'] ?? true,
);
$options['sliderSettings'] = $slider_settings;
$block_options['sliderSettings'] = $slider_settings;
}
?>
', '', '', '' ); ?>