WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Древовидные метки продуктов в woocommerce

Задача изменить теги товаров в woocommerce, чтобы они отображались как иерархические.

Heirarchical_WC_Tag::init();

/**
 * Makes woocommerce product tags tree-like.
 *
 * Also, allows you to specify the same prefix for cat
 * and tags taxonomies of product.
 *
 * @author Kama (wp-kama.com)
 * @version 0.1
 */
class Heirarchical_WC_Tag {

	public static function init(): void{

		//add_action( 'wp', [ __CLASS__, 'debug' ] );

		add_action( 'init', [ __CLASS__, 'modify_product_tag_taxonomy' ], 20 );
	}

	public static function debug( $wp ){
		print_r( get_queried_object() );
		print_r( $wp );
		print_r( $GLOBALS['wp_rewrite'] );
		exit;
	}

	public static function modify_product_tag_taxonomy(): void{
		global $wp_taxonomies;

		$cat = &$wp_taxonomies['product_cat'];
		$tag = &$wp_taxonomies['product_tag'];

		$tag->rewrite['hierarchical'] = true; // for term_link
		$tag->hierarchical = true;
		$tag->meta_box_cb = 'post_categories_meta_box';

		// Fix query vars, if friendly-URL prefix of cats and tags idential.
		if( $tag->rewrite['slug'] === $cat->rewrite['slug'] ){

			add_filter( 'request', [ __CLASS__, 'fix_product_tag_request_var' ] );
		}
	}

	public static function fix_product_tag_request_var( $vars ){

		if( ! empty( $vars['product_cat'] ) ){

			$_cat_patrs = explode( '/', $vars['product_cat'] );
			$_patrs_end = end( $_cat_patrs );

			$tag_exists = get_term_by( 'slug', $_patrs_end, 'product_tag' );

			if( $tag_exists ){
				$vars['product_tag'] = $vars['product_cat'];
				unset( $vars['product_cat'] );
			}
		}

		return $vars;
	}

}
Комментариев нет
    Войти