class-auxels-admin-assets.php
1 year ago
class-auxels-archive-menu-links.php
1 year ago
class-auxels-envato-elements.php
1 year ago
class-auxels-import-parser.php
3 years ago
class-auxels-import.php
3 years ago
class-auxels-search-post-type.php
6 months ago
class-auxels-wc-attribute-nav-menu.php
1 year ago
class-auxin-admin-dashboard.php
1 year ago
class-auxin-demo-importer.php
6 months ago
class-auxin-dependency-sorting.php
3 years ago
class-auxin-import.php
1 year ago
class-auxin-install.php
1 year ago
class-auxin-master-nav-menu-admin.php
1 year ago
class-auxin-page-template.php
1 year ago
class-auxin-permalink.php
1 year ago
class-auxin-plugin-requirements.php
3 years ago
class-auxin-post-type-base.php
1 year ago
class-auxin-svg-support-allowedattributes.php
7 years ago
class-auxin-svg-support-allowedtags.php
7 years ago
class-auxin-svg-support.php
1 year ago
class-auxin-walker-nav-menu-back.php
1 year ago
class-auxin-welcome-sections.php
1 year ago
class-auxin-welcome.php
6 months ago
class-auxin-whitelabel.php
3 years ago
class-auxin-widget-indie.php
1 year ago
class-auxin-widget-shortcode-map.php
11 months ago
class-auxin-widget.php
1 year ago
class-auxels-wc-attribute-nav-menu.php
176 lines
| 1 | <?php |
| 2 | /** |
| 3 | * Woocommerce attributes nav menu Class. |
| 4 | * |
| 5 | * |
| 6 | * @package Auxin |
| 7 | * @license LICENSE.txt |
| 8 | * @author averta |
| 9 | * @link http://phlox.pro/ |
| 10 | * @copyright (c) 2010-2025 averta |
| 11 | */ |
| 12 | |
| 13 | // no direct access allowed |
| 14 | if ( ! defined('ABSPATH') ) { |
| 15 | die(); |
| 16 | } |
| 17 | |
| 18 | /** |
| 19 | * Class to add woocommerce attributes filter as nav menu item |
| 20 | */ |
| 21 | class Auxels_WC_Attribute_Nav_Menu { |
| 22 | |
| 23 | /** |
| 24 | * Instance of this class. |
| 25 | * |
| 26 | * @var object |
| 27 | */ |
| 28 | protected static $instance = null; |
| 29 | |
| 30 | /** |
| 31 | * Return an instance of this class. |
| 32 | * |
| 33 | * @return object A single instance of this class. |
| 34 | */ |
| 35 | public static function get_instance() { |
| 36 | |
| 37 | // If the single instance hasn't been set, set it now. |
| 38 | if ( null == self::$instance ) { |
| 39 | self::$instance = new self; |
| 40 | } |
| 41 | return self::$instance; |
| 42 | } |
| 43 | |
| 44 | /** |
| 45 | * __construct |
| 46 | */ |
| 47 | public function __construct() { |
| 48 | |
| 49 | if ( ! class_exists( 'WooCommerce') ) { |
| 50 | return; |
| 51 | } |
| 52 | |
| 53 | add_filter( 'customize_nav_menu_available_item_types', [ $this, 'register_customize_nav_menu_item_types'] ); |
| 54 | add_filter( 'customize_nav_menu_available_items', [ $this, 'register_customize_nav_menu_items' ], 11, 4 ); |
| 55 | add_action( 'admin_head-nav-menus.php', [ $this, 'add_nav_menu_meta_boxes' ] ); |
| 56 | } |
| 57 | |
| 58 | /** |
| 59 | * Register customize new nav menu item types. |
| 60 | * |
| 61 | * @param array $item_types Menu item types. |
| 62 | * @return array |
| 63 | */ |
| 64 | public function register_customize_nav_menu_item_types( $item_types ) { |
| 65 | $item_types[] = array( |
| 66 | 'title' => __( 'WooCommerce Attributes', 'auxin-elements' ), |
| 67 | 'type_label' => __( 'WooCommerce Attributes', 'auxin-elements' ), |
| 68 | 'type' => 'aux_woocommerce_attribute', |
| 69 | 'object' => 'aux_woocommerce_attribute', |
| 70 | ); |
| 71 | |
| 72 | return $item_types; |
| 73 | } |
| 74 | |
| 75 | |
| 76 | /** |
| 77 | * Register woocommerce attributes to customize nav menu items. |
| 78 | * |
| 79 | * @param array $items List of nav menu items. |
| 80 | * @param string $type Nav menu type. |
| 81 | * @param string $object Nav menu object. |
| 82 | * @param integer $page Page number. |
| 83 | * @return array |
| 84 | */ |
| 85 | public function register_customize_nav_menu_items( $items = array(), $type = '', $object = '', $page = 0 ) { |
| 86 | if ( 'aux_woocommerce_attribute' !== $object ) { |
| 87 | return $items; |
| 88 | } |
| 89 | |
| 90 | // Don't allow pagination since all items are loaded at once. |
| 91 | if ( 0 < $page ) { |
| 92 | return $items; |
| 93 | } |
| 94 | |
| 95 | $taxonomies = []; |
| 96 | $attr_tax = wc_get_attribute_taxonomies(); |
| 97 | |
| 98 | foreach( $attr_tax as $tax ) { |
| 99 | $taxonomies[ $tax->attribute_name ] = $tax->attribute_label; |
| 100 | } |
| 101 | |
| 102 | foreach ( $taxonomies as $slug => $label ) { |
| 103 | $terms = get_terms( array( |
| 104 | 'taxonomy' => 'pa_' . $slug, |
| 105 | 'hide_empty' => false, |
| 106 | ) ); |
| 107 | |
| 108 | foreach ( $terms as $term ) { |
| 109 | $items[] = array( |
| 110 | 'id' => $term->slug, |
| 111 | 'title' => $term->name, |
| 112 | 'type_label' => __( 'Attribute', 'auxin-elements' ), |
| 113 | 'url' => esc_url( get_permalink( woocommerce_get_page_id( 'shop' ) ) . '?filter_' . $slug . '=' . $term->slug ), |
| 114 | ); |
| 115 | } |
| 116 | } |
| 117 | |
| 118 | return $items; |
| 119 | } |
| 120 | |
| 121 | public function add_nav_menu_meta_boxes() { |
| 122 | add_meta_box( 'aux_woocommerce_attribute_nav_link', __( 'WooCommerce attributes', 'auxin-elements' ), [ $this, 'woocommerce_attr_nav_menu_links' ], 'nav-menus', 'side', 'low' ); |
| 123 | } |
| 124 | |
| 125 | public function woocommerce_attr_nav_menu_links() { |
| 126 | |
| 127 | $taxonomies = []; |
| 128 | $attr_tax = wc_get_attribute_taxonomies(); |
| 129 | |
| 130 | foreach( $attr_tax as $tax ) { |
| 131 | $taxonomies[ $tax->attribute_name ] = $tax->attribute_label; |
| 132 | } |
| 133 | |
| 134 | ?> |
| 135 | <div id="posttype-woocommerce-attr" class="posttypediv"> |
| 136 | <div id="tabs-panel-woocommerce-attr" class="tabs-panel tabs-panel-active"> |
| 137 | <ul id="woocommerce-attr-checklist" class="categorychecklist form-no-clear"> |
| 138 | <?php |
| 139 | $i = -1; |
| 140 | foreach ( $taxonomies as $slug => $label ) : |
| 141 | $terms = get_terms( array( |
| 142 | 'taxonomy' => 'pa_' . $slug, |
| 143 | 'hide_empty' => false, |
| 144 | ) ); |
| 145 | foreach ( $terms as $term ) { |
| 146 | ?> |
| 147 | <li> |
| 148 | <label class="menu-item-title"> |
| 149 | <input type="checkbox" class="menu-item-checkbox" name="menu-item[<?php echo esc_attr( $i ); ?>][menu-item-object-id]" value="<?php echo esc_attr( $i ); ?>" /> <?php echo esc_html( $term->name ); ?> |
| 150 | </label> |
| 151 | <input type="hidden" class="menu-item-type" name="menu-item[<?php echo esc_attr( $i ); ?>][menu-item-type]" value="custom" /> |
| 152 | <input type="hidden" class="menu-item-title" name="menu-item[<?php echo esc_attr( $i ); ?>][menu-item-title]" value="<?php echo esc_attr( $term->name ); ?>" /> |
| 153 | <input type="hidden" class="menu-item-url" name="menu-item[<?php echo esc_attr( $i ); ?>][menu-item-url]" value="<?php echo esc_url( get_permalink( woocommerce_get_page_id( 'shop' ) ) . '?filter_' . $slug . '=' . $term->slug ); ?>" /> |
| 154 | <input type="hidden" class="menu-item-classes" name="menu-item[<?php echo esc_attr( $i ); ?>][menu-item-classes]" /> |
| 155 | </li> |
| 156 | <?php |
| 157 | } |
| 158 | $i--; |
| 159 | endforeach; |
| 160 | ?> |
| 161 | </ul> |
| 162 | </div> |
| 163 | <p class="button-controls"> |
| 164 | <span class="list-controls"> |
| 165 | <a href="<?php echo esc_url( admin_url( 'nav-menus.php?page-tab=all&selectall=1#posttype-woocommerce-attr' ) ); ?>" class="select-all"><?php esc_html_e( 'Select all', 'auxin-elements' ); ?></a> |
| 166 | </span> |
| 167 | <span class="add-to-menu"> |
| 168 | <button type="submit" class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e( 'Add to menu', 'auxin-elements' ); ?>" name="add-post-type-menu-item" id="submit-posttype-woocommerce-attr"><?php esc_html_e( 'Add to menu', 'auxin-elements' ); ?></button> |
| 169 | <span class="spinner"></span> |
| 170 | </span> |
| 171 | </p> |
| 172 | </div> |
| 173 | <?php |
| 174 | } |
| 175 | } |
| 176 | ?> |