Задать вопрос
  • Как при помощи telethon добавить пользователя в контакты?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Комментировать
  • Как в map сделать отрицание в аргументе?

    @dodo512
    Мне необходимо написать так, что если метод не POST (GET, HEAD), то выдавать не 0.

    Т.е. если метод POST, то выдать 0. Иначе выдать 1.
    map $request_method $cache_hit {
      "~*post" 0;
      default 1;
    }


    В $request_method строка всегда в верхнем регистре, так что регулярка не нужна.
    map $request_method $cache_hit {
      POST    0;
      default 1;
    }


    Как выяснилось, исходная задача заключалась в переводе на map таких условий:
    set $cache_hit 1;
    
      # POST requests and urls with a query string should always go to PHP.
      if ($request_method = POST) {
        set $cache_hit 0;
      }
    
      if ($query_string != "") {
        set $cache_hit 0;
      }
       
      # Don't cache uris containing the following segments.
      if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
        set $cache_hit 0;
      }
       
      # Don't use the cache for logged-in users or recent commenters.
      if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") {
        set $cache_hit 0;
      }

    На map это можно сделать так:
    map $query_string $check_query_string {
      ""       0;
      default  1;
    }
    
    map $request_uri $check_request_uri {
      "~*(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)"  1;
      default  0;
    }
    
    map $http_cookie  $check_cookie {
      "~*comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in"  1;
      default  0;
    }
    
    
    map "$request_method:$check_query_string:$check_request_uri:$check_cookie"  $cache_hit {
      "~^POST"    0;
      "~1"        0;
      default     1;
    }
    Ответ написан
  • Как вывести атрибуты товаров woocommerce?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Что бы не получать таких ошибок, нужно делать проверку, а не пуста ли переменная $subheadingvalues. Но это так. А вообще в самом плагине все до вас написано. Атрибуты выводятся в товаре в табе "доп информация", посмотрим код этой табы. plugins/woocommerce/templates/single-product/tabs/additional-information.php
    Код там такой <?php $product->list_attributes(); ?> используется метот list_attributes(); Можно на этом остановиться и в своем шаблоне написать
    global $product;
    $product->list_attributes();

    Но получим готовую разметку в виде таблицы. Посмотрим, что делает функция list_attributes();
    public function list_attributes() {
    		wc_get_template( 'single-product/product-attributes.php', array(
    			'product'    => $this
    		) );
    	}

    Идем в папку за нужным файлом plugins/woocommerce/templates/single-product/product-attributes.php
    Помимо прочего в нем видим
    $attributes = $product->get_attributes();
    .........
    <?php foreach ( $attributes as $attribute ) :
    		if ( empty( $attribute['is_visible'] ) || ( $attribute['is_taxonomy'] && ! taxonomy_exists( $attribute['name'] ) ) ) {
    			continue;
    		} else {
    			$has_row = true;
    		}
    		?>
    		<tr class="<?php if ( ( $alt = $alt * -1 ) == 1 ) echo 'alt'; ?>">
    			<th><?php echo wc_attribute_label( $attribute['name'] ); ?></th>
    			<td><?php
    				if ( $attribute['is_taxonomy'] ) {
    
    					$values = wc_get_product_terms( $product->id, $attribute['name'], array( 'fields' => 'names' ) );
    					echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
    
    				} else {
    
    					// Convert pipes to commas and display values
    					$values = array_map( 'trim', explode( WC_DELIMITER, $attribute['value'] ) );
    					echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
    
    				}
    			?></td>
    		</tr>
    	<?php endforeach; ?>

    Адаптируйте под свои нужды. Я думаю, должно работать)

    P.S. Не забываем поглядывать в документацию. Вот полный список того, что можно сделать с $product https://docs.woocommerce.com/wc-apidocs/class-WC_P...
    Ответ написан
    Комментировать
  • Как настроить модули в Nginx, limit_zone, limit_req и limit_conn?

    benbor
    @benbor
    Помог ответ - не забудь лайкнуть
    Ну, в unix-like есть такой принцип - молчит, значит работает. Либо уточните, что Вы хотите, чтобы "Происходило".
    UDP:
    давайте вместе почитаем документацию: nginx.org/ru/docs/http/ngx_http_limit_req_module.html
    1. Можно подключить лог limit_req_log_level info и посмотреть, быть может nginx сам все расскажет
    2. >Синтаксис: limit_req zone=название [burst=число] [nodelay];
    >Умолчание: —
    >Контекст: http, server, location
    >Задаёт зону разделяемой памяти (zone) и максимальный размер всплеска запросов (burst). Если >скорость поступления запросов превышает описанную в зоне, то их обработка задерживается так, чтобы >запросы обрабатывались с заданной скоростью. Избыточные запросы задерживаются до тех пор, пока >их число не превысит максимальный размер всплеска. При превышении запрос завершается с ошибкой >503 (Service Temporarily Unavailable). По умолчанию максимальный размер всплеска равен нулю. >Например, директивы
    >
    >limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    >
    >server {
    > location /search/ {
    > limit_req zone=one burst=5;
    > }
    >позволяют в среднем не более 1 запроса в секунду со всплесками не более 5 запросов.
    >
    >Если же избыточные запросы в пределах лимита всплесков задерживать не требуется, то следует >использовать параметр nodelay:
    >
    >limit_req zone=one burst=5 nodelay;
    Откуда напрашивается вывод поиграться с burst, ибо по умолчанию он 0(обычно 0 - это бесконечно много).
    Поставте burst=1
    3. Так же Нужно посмотреть. что Вы используете limit_req_zone, а она, походу, лишь описывает зону, а не юзает. Попробуйте заменить на limit_req
    ps Если бы нужно было подключить модули, nginx бы ругался, что не знает таких директив, а раз молчит - то все норм. Если это не поможет - логи в студию
    Ответ написан
    Комментировать
  • Как вывести в EAV структуре количество товаров с несколькими атрибутами?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    SELECT ...
      FROM `products` AS `p`
      JOIN `product_attributes` AS `pa1` ON `pa1`.`attribute_id` = :attr1
        AND `pa1`.`attribute_value` = :val1 AND `pa1`.`product_id` = `p`.`id`
      JOIN `product_attributes` AS `pa2` ON `pa2`.`attribute_id` = :attr2
        AND `pa2`.`attribute_value` = :val2 AND `pa2`.`product_id` = `p`.`id`
    Ответ написан
    2 комментария
  • Как скрыть отзыв на Upwork?

    Athari
    @Athari
    программист
    Чтобы отзыв исчез вместе со всей историей, можно вернуть все деньги за проект. Если проект небольшой, и деньги не стоят нервов, можно просто плюнуть и расстаться с заработанной копейкой. Конечно, если проект большой, то просто так всё не вернёшь, однако при долгом сотрудничестве отрицательные отзывы — этот скорее исключение из правил: зачем было столько сотрудничать, если фрилансер не удовлетворяет?

    Как вариант, можно написать ответ на отзыв, и аргументированно объяснить, в чём была проблема с проектом, и почему всё так плохо.

    В те времена, когда средний балл ещё не был заменён на JSS, моя встреча с неадекватным клиентом завершилась отзывом с оценкой 1.0, плюс он ещё в поддержку на меня нажаловался, правда безрезультатно. Так как средний балл заметно портился, то я вернул почти все деньги (вес оценки равен оплате). Так как отзыв был абсолютно бессодержательный, то я написал и свой отзыв, и ответ на его отзыв. А чтобы вечно мозолить клиенту глаза, не вернул последний бакс. Мой-то отзыв он скрыл, но вот пунктик с "10 часов, $1, скрытый комментарий" со ссылкой на мой профиль, где проблемы разобраны по косточкам, — будет висеть в проектах этого клиента вечно. При этом его отзыв на моей странице меня совершенно не пугает.
    Ответ написан
    1 комментарий