Keine Beschreibung

functions.php 9.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <?php
  2. function brfr_adjust_brightness($hexCode, $adjustPercent) {
  3. $hexCode = ltrim($hexCode, '#');
  4. if (strlen($hexCode) == 3) {
  5. $hexCode = $hexCode[0] . $hexCode[0] . $hexCode[1] . $hexCode[1] . $hexCode[2] . $hexCode[2];
  6. }
  7. $hexCode = array_map('hexdec', str_split($hexCode, 2));
  8. foreach ($hexCode as & $color) {
  9. $adjustableLimit = $adjustPercent < 0 ? $color : 255 - $color;
  10. $adjustAmount = ceil($adjustableLimit * $adjustPercent);
  11. $color = str_pad(dechex($color + $adjustAmount), 2, '0', STR_PAD_LEFT);
  12. }
  13. return '#' . implode($hexCode);
  14. }
  15. /*
  16. args = array(
  17. 'name' => string
  18. 'label' => string
  19. 'align_options' => array
  20. 'defaults' => array
  21. 'class' => string, optional
  22. 'extra' => string, optional
  23. 'tr_class' => string, optional
  24. )
  25. */
  26. function brfr_image_options( $args ) {
  27. $args = array_merge( array( 'class' => '', 'extra' => '', 'tr_class' => '' ), $args );
  28. $image_name = $args['name'];
  29. $defaults = $args['defaults'];
  30. return array(
  31. "label" => $args['label'],
  32. "tr_class" => "br_nowrap_label br_image_options {$args['tr_class']}",
  33. "items" => array(
  34. "{$image_name}_display" => array(
  35. "label_be_for" => __('Display', 'brands-for-woocommerce'),
  36. "type" => "checkbox",
  37. "name" => "{$image_name}_display",
  38. "extra" => " id='br_brand_{$image_name}_display'",
  39. "class" => "{$args['class']} br_brands_display_options",
  40. "extra" => " {$args['extra']}",
  41. "value" => 1,
  42. ),
  43. "{$image_name}_width" => array(
  44. "label_be_for" => __('Width', 'brands-for-woocommerce'),
  45. "type" => "number",
  46. "class" => "br_brand_number",
  47. "name" => "{$image_name}_width",
  48. "value" => $defaults["{$image_name}_width"],
  49. ),
  50. brfr_select_units( "{$image_name}_width", $defaults["{$image_name}_width_units"] ),
  51. "{$image_name}_height" => array(
  52. "label_be_for" => __('Height', 'brands-for-woocommerce'),
  53. "type" => "number",
  54. "class" => "br_brand_number",
  55. "name" => "{$image_name}_height",
  56. "value" => $defaults["{$image_name}_height"],
  57. ),
  58. brfr_select_units( "{$image_name}_height", $defaults["{$image_name}_height_units"] ),
  59. "{$image_name}_fit" => array(
  60. "label_be_for" => __('Fit', 'brands-for-woocommerce'),
  61. "type" => "selectbox",
  62. "name" => "{$image_name}_fit",
  63. "value" => $defaults["{$image_name}_fit"],
  64. "options" => array(
  65. array("value" => "cover", "text" => __( 'Cover', 'brands-for-woocommerce' )),
  66. array("value" => "contain", "text" => __( 'Contain', 'brands-for-woocommerce' )),
  67. array("value" => "fill", "text" => __( 'Fill', 'brands-for-woocommerce' )),
  68. array("value" => "none", "text" => __( 'None', 'brands-for-woocommerce' )),
  69. ),
  70. ),
  71. "{$image_name}_align" => array(
  72. "label_be_for" => __('Align', 'brands-for-woocommerce'),
  73. "type" => "selectbox",
  74. "name" => "{$image_name}_align",
  75. "value" => $defaults["{$image_name}_align"],
  76. "options" => $args['align_options'],
  77. ),
  78. ),
  79. );
  80. }
  81. function brfr_select_units( $property, $default = 'px', $class = '', $extra = '' ) {
  82. $property_units = "{$property}_units";
  83. return array(
  84. "type" => "selectbox",
  85. "options" => array(
  86. array( 'value' => 'px', 'text' => 'px' ),
  87. array( 'value' => '%', 'text' => '%' ),
  88. ),
  89. "extra" => " $extra",
  90. "name" => $property_units,
  91. "class" => "br_brands_units $class",
  92. "value" => $default,
  93. );
  94. }
  95. function brfr_add_slider_script( $options, $class ) {
  96. if ( !wp_script_is( 'berocket_slick' ) ) {
  97. wp_enqueue_script( 'berocket_slick' );
  98. }
  99. if ( !wp_script_is( 'br_brands_slider' ) ) {
  100. wp_enqueue_script( 'br_brands_slider' );
  101. wp_localize_script( 'br_brands_slider', 'bdBrandSlider',
  102. array(
  103. 'slider_infinite' => $options['slider_infinite'],
  104. 'slider_autoplay' => $options['slider_autoplay'],
  105. 'slider_autoplay_speed' => $options['slider_autoplay_speed'],
  106. 'slider_change_speed' => $options['slider_change_speed'],
  107. 'slider_arrows' => $options['slider_arrows'],
  108. 'slider_stop_focus' => $options['slider_stop_focus'],
  109. 'slider_mode' => $options['slider_mode'],
  110. 'slider_ease' => $options['slider_ease'],
  111. 'slider_dots' => $options['slider_dots'],
  112. 'slider_slides_scroll' => $options['slider_slides_scroll'],
  113. 'slides_to_show' => $options['slides_to_show'],
  114. )
  115. );
  116. }
  117. if ( !wp_style_is( 'berocket_slick' ) ) {
  118. wp_enqueue_style( 'berocket_slick' );
  119. }
  120. if ( !wp_style_is( 'font-awesome' ) ) {
  121. wp_enqueue_style( 'font-awesome' );
  122. }
  123. $dots_color = $options['slider_dots_color'];
  124. $dots_darker_color = brfr_adjust_brightness( $dots_color, -0.5 );
  125. $dots_shadow_color = brfr_adjust_brightness( $dots_color, -0.8 );
  126. return "$class .slick-dots li.slick-active {
  127. background: linear-gradient($dots_color, $dots_darker_color);
  128. background: -webkit-gradient(linear, left top, left bottom, from($dots_color), to($dots_darker_color));
  129. background: -o-linear-gradient($dots_color, $dots_darker_color);
  130. box-shadow: inset 0 0 1px 1px $dots_shadow_color;
  131. -webkit-box-shadow: inset 0 0 1px 1px $dots_shadow_color;
  132. }";
  133. }
  134. function brfr_product_loop( $products, $atts ) {
  135. if ( empty( $products ) || empty( $products->products ) ) {
  136. do_action('woocommerce_no_products_found');
  137. return;
  138. }
  139. $loop_name = 'product_cat';
  140. $columns = empty( $atts['columns'] ) ? 3 : absint( $atts['columns'] );
  141. if ( empty( $atts['slider'] ) ) {
  142. $slider_class = '';
  143. echo '<nav class="woocommerce-pagination">' . paginate_links(
  144. apply_filters(
  145. 'woocommerce_pagination_args',
  146. array( // WPCS: XSS ok.
  147. // 'base' => $base,
  148. 'format' => "?{$atts['cache_key']}=%#%",
  149. 'current' => $atts['paged'],
  150. 'total' => $products->max_num_pages,
  151. 'prev_text' => is_rtl() ? '&rarr;' : '&larr;',
  152. 'next_text' => is_rtl() ? '&larr;' : '&rarr;',
  153. 'type' => 'list',
  154. // 'end_size' => 3,
  155. // 'mid_size' => 3,
  156. )
  157. )
  158. ) . '</nav>';
  159. // wc_set_loop_prop('current_page', $atts['paged']);
  160. // wc_set_loop_prop('is_paginated', wc_string_to_bool(true));
  161. // wc_set_loop_prop('page_template', get_page_template_slug());
  162. // wc_set_loop_prop('per_page', $atts['per_page']);
  163. wc_set_loop_prop('total', $products->total);
  164. $old_columns = wc_get_loop_prop('columns');
  165. wc_set_loop_prop('columns', $columns);
  166. // wc_set_loop_prop('total_pages', $products->max_num_pages);
  167. $woocommerce_loop['columns'] = $columns;
  168. $woocommerce_loop['name'] = $loop_name;
  169. $product_width = 100 / $columns - 5;
  170. echo
  171. "<style>
  172. .br-brands-product-list.columns-$columns ul.products li.product {
  173. width: {$product_width}%;
  174. }
  175. </style>";
  176. } else {
  177. $slider_class = 'br_product_list_slider';
  178. $BeRocket_product_brand = BeRocket_product_brand::getInstance();
  179. $options = $BeRocket_product_brand->get_option();
  180. // $options['slides_to_show'] = $columns;
  181. echo '<style>' . brfr_add_slider_script( $options, ".$slider_class" ) . '</style>';
  182. }
  183. $hide_brands = empty( $atts['hide_brands'] ) ? '' : 'br_brands_hide_brands';
  184. echo
  185. "<div class='brcs_slider_brands_container' data-columns='$columns'>
  186. <div class='woocommerce br-brands-product-list columns-$columns $slider_class $hide_brands'>";
  187. // do_action( 'woocommerce_before_shop_loop' );
  188. woocommerce_product_loop_start();
  189. foreach ( $products->products as $product ) {
  190. $post_object = get_post($product);
  191. setup_postdata( $GLOBALS['post'] =& $post_object );
  192. wc_get_template_part( 'content', 'product' );
  193. }
  194. wp_reset_postdata();
  195. if ( !empty( $old_columns ) ) wc_set_loop_prop('columns', $old_columns);
  196. woocommerce_product_loop_end();
  197. // do_action( 'woocommerce_after_shop_loop' );
  198. echo "</div></div>";
  199. }
  200. function brfr_language_prefix() {
  201. $language = '';
  202. if( function_exists( 'qtranxf_getLanguage' ) ) {
  203. $language = qtranxf_getLanguage();
  204. }
  205. if( defined('ICL_LANGUAGE_CODE') ) {
  206. $language = ICL_LANGUAGE_CODE;
  207. }
  208. if( ! empty($language) ) {
  209. $language = "_{$language}";
  210. }
  211. return $language;
  212. }
  213. function brfr_add_children_arrow( $term ) {
  214. return empty( $term->children ) ?
  215. array( 'class' => '', 'arrow' => '' ) :
  216. array( 'class' => 'br_brand_has_children', 'arrow' => '<i class="fas fa-chevron-down br_brand_children_arrow"></i>' );
  217. }