Поддержка Проблемы и решения Большое количество таксономий (загрузка)

  • Здравствуйте, столкнулся с проблемой в Woocommerce (проблема не конкретно woo, а wordpress в целом) — атрибуты создаются отдельными таксономиями pa_* и затем на каждой страницы сайта (на хуке init) происходит их регистрация в цикле (у меня их больше 1000) и загрузка сайта замедляется на ~3 секунды.
    foreach ( $attribute_taxonomies as $tax ) { .... register_taxonomy(...); ... }
    Т.е. если в системе большое количество таксономий, происходит существенное замедление сайта. Решением могло быть кэширование объектов таксономий (в объектный кэш, например, memcached). но во-первых, это нужно изменять файлы wp, во-вторых, не получается победить строчку $wp_taxonomies[ $taxonomy ] = $taxonomy_object; из-за неё происходит задержка и вся оптимизация сходит на нет. Кто-нибудь сталкивался с аналогичной проблемой, может быть у вас есть мысли по этому поводу? Спасибо.

    function register_taxonomy( $taxonomy, $object_type, $args = array() ) {
    	global $wp_taxonomies;
    
    	if ( ! is_array( $wp_taxonomies ) ) {
    		$wp_taxonomies = array();
    	}
    	/* br added */
    	$cache_key = 'br_cache_tax_' . md5($taxonomy);
    	$is_attribute = stristr( $taxonomy,"pa_");
    
    	if($is_attribute) {
    	   $cache = wp_cache_get( $cache_key );
    		if( false !== $cache ) {
    			$taxonomy_object = unserialize( $cache );
    			$wp_taxonomies[ $taxonomy ] = $taxonomy_object;
    			return $taxonomy_object;
    		}
            }
            /* ./ br added */
    
    	/* оригинальный код функции */
    
    	/* br added */
    	if( $is_attribute ) {
    		 $taxonomy_object_str = serialize ( $taxonomy_object );
    		 wp_cache_set( $cache_key,  $taxonomy_object_str); 
    	}
    	/* ./ br added */
    
    	return $taxonomy_object;
    
Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Я делал произвольные таблицы в БД для атрибутов, но это сложнее чем следующий вариант.

    Есть вариант использовать для атрибутов только 2 таксономии. Одна для названий, вторая для значений атрибутов. Только тогда в админке все значения атрибутов будут в куче, и цвета и размеры, но их можно фильтровать по названиям атрибутов, которые должны были указаны при добавлении значения атрибута.

    • Ответ изменён 3 года, 2 месяца назад пользователем qwert555.

    @qwert555 Спасибо, думал еще можно использовать одну свою таксономию с иерархической структурой:
    Категория Цвет и подкатегории Зеленый, Желтый и т.п., но тоже тогда нуны переделки фильтров магазина. А две таксономии вы имеете в виду не связывать? т.е. у товара нужно выбирать и атрибуты отдельно и значения? При произвольных таблицах в БД фильтры тоже сами делали или какими-то наработками пользовались?

    А две таксономии вы имеете в виду не связывать?

    Связь по parent, тость в поле parent значения атрибута, записывается term_id названия атрибута.

    т.е. у товара нужно выбирать и атрибуты отдельно и значения

    Для товара указываются только значения атрибута, а название само подтянется, через parent.

    При произвольных таблицах в БД фильтры тоже сами делали или какими-то наработками пользовались?

    Сам

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Тема «Большое количество таксономий (загрузка)» закрыта для новых ответов.