select
pm.meta_value
/*max( CASE WHEN im.meta_key = '_product_id' and i.order_item_id = im.order_item_id THEN im.meta_value END ) as Prod_ID*/
from
wp_posts as p
inner join
wp_postmeta as pm
on p.id = pm.post_id
inner join
wp_woocommerce_order_items as i
on p.id = i.order_id
inner join
wp_woocommerce_order_itemmeta as im
on i.order_item_id = im.order_item_id
where
p.post_type = 'shop_order'
AND pm.meta_key = '_billing_email'
and p.post_date BETWEEN '2023-03-19 00:00:00' AND '2023-03-19 23:59:59'
and p.post_status = 'wc-completed'
AND i.order_item_name LIKE '%Double Chin%'
group BY pm.meta_value
woocommerce выбрать вариацию через jQuery
jQuery( "ul[aria-label='Shoe Size'] li[data-value='39']" ).click()
Buy now for woocommerce
/* Dynamic Button for Simple & Variable Product */
/**
* Main Functions
*/
function sbw_wc_add_buy_now_button_single()
{
global $product;
printf( '<button id="sbw_wc-adding-button" type="submit" name="sbw-wc-buy-now" value="%d" class="single_add_to_cart_button buy_now_button button alt">%s</button>', $product->get_ID(), esc_html__( 'Buy Now', 'sbw-wc' ) );
}
add_action( 'woocommerce_after_add_to_cart_button', 'sbw_wc_add_buy_now_button_single' );
/*** Handle for click on buy now ***/
function sbw_wc_handle_buy_now()
{
if ( !isset( $_REQUEST['sbw-wc-buy-now'] ) )
{
return false;
}
WC()->cart->empty_cart();
$product_id = absint( $_REQUEST['sbw-wc-buy-now'] );
$quantity = absint( $_REQUEST['quantity'] );
if ( isset( $_REQUEST['variation_id'] ) ) {
$variation_id = absint( $_REQUEST['variation_id'] );
WC()->cart->add_to_cart( $product_id, $quantity, $variation_id );
}else{
WC()->cart->add_to_cart( $product_id, $quantity );
}
wp_safe_redirect( wc_get_checkout_url() );
exit;
}
add_action( 'wp_loaded', 'sbw_wc_handle_buy_now' );
/* Dynamic Button for Simple & Variable Product Closed */
Задать helo_data в EXIM4
Некоторые почтовые сервисы проверяют данный параметр почты. Также при некорректной настройке данного параметра сервер может попасть под фильтр, например, spamhaus.
По умолчанию EXIM4 подставляет в данный параметр $primary_hostname. Что не совсем правильно, если на сервере много доменов.
Для правильной настройки helo_data необходимо в секцию transports в remote_smtp добавить строку:
helo_data = mail.$sender_address_domain
Файл конфига EXIM располагается в etc/exim4/exim4.conf.template. Также если при установке exim была выбрана опция разбить файл на множество мелких — конфиг может быть в файлах и папках в директории.
После изменения файла нужно выполнить команду service exim4 restart
Проверить, что сервис работает service exim4 status
Safari не работает оптимайз тест
Если в браузере сафари не отображаются изменения оптимайз теста, то необходимо снять галочку

Базовые команды linux
ls -la /var/www/www-root/data/logs — показать содержимое папки
sudo less /var/www/www-root/data/logs/primdog.ie.error.log — посмотреть содержимое файла
df -i — посмотреть занятые айноды
df -h — посмотреть свободное место
Это просто удаление файлов или директорий на сервере, каждый считается за одну
айноду. Например, это можно сделать при подключении к консоли сервера по SSH
командой:
rm ПУТЬ_ДО_ФАЙЛА
Если вам нужно удалить несколько файлов с похожими названиями, можно сделать,
например, так (приведу пример с архивами логов панели):
rm /usr/local/mgr5/var/logs/ispmgr.log.*
Удалить сразу, без запрашивания подтверждения:
rm /usr/local/mgr5/var/logs/ispmgr.log.* -f
Сами ненужные файлы и директории вам надо искать самостоятельно. Архивов логов
панели, как вы можете увидеть, всего два:
root@ortorex:~# ls -la /usr/local/mgr5/var/logs
total 18060
drwxr-xr-x 2 root root 4096 Feb 3 20:04 .
drwxr-x— 16 root root 4096 Feb 11 13:32 ..
-rw——- 1 root root 9072063 Dec 5 10:47 ispmgr.log.2022_12_05_10_47_02.0.gz
-rw——- 1 root root 9410837 Feb 3 20:03 ispmgr.log.2023_02_03_20_03_01.0.gz
Можно, например, очистить кэш Nginx:
rm /var/cache/nginx/* -rf
Эта команда удалит содержимое директории, куда складывается кэш Nginx.
Возможно, там появились файлы, которые сам веб-сервер не удалил. Но надо
понимать, что кэш Nginx — это временные файлы, которые должны очищаться
самостоятельно, поэтому такая очистка может и не помочь вам.
В директории с архивами логов пользовательских сайтов тоже файлов не так много,
просмотреть можно командой:
ls -la /var/www/www-root/data/logs
Если хотите удалить архивы логов сайтов пользователя www-root, можно выполнить:
rm /var/www/www-root/data/logs/*.gz -f
Повторюсь, каждый файл или директория считается как одна айнода.
Код ответа 410 для nginx
Вне server{} прописываем список страниц, для которых нужно добавить данный код ответа
map $uri $gone {
default 0;
~^/sample-page 1;
# consider an included file for these
}
А внутри server{}
if ($gone) {
return 410;
}
ispmanager заканчивается место
По умолчанию в ispmanager для сервера баз данных mysql 5.4 параметр expire-log-days равен 0. То есть будут храниться неограниченное количество логов mysql. В конечном итоге это засоряет всю свободную память сервера. Необходимо изменить этот параметр на другое значение, например 5 дней.
Директория где хранятся логи mysql /var/lib/mysql/
Параметр меняется в настройках mysql сервера.
В случае использования сервера баз данных mysql8 (идет по умолчанию начиная с ubuntu 20.04) нужно изменять значение параметра binlog-expire-logs-seconds на значение 86400
Поиск встречается ли на сайте фраза
Чтобы проверить наличие на сайте определенных слов(фраз) можно выполнить поиск в google по следующему синтаксису
site:site.name text
Show list out of stock products
<?php
include( 'wp-load.php' );
// Setup your custom query
$args = [
'post_type' => ['product'/*, 'post', 'page'*/],
'posts_per_page' => -1,
'post_status' => 'publish'
];
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
global $post;
$product = wc_get_product( $post->ID );
if($product->get_stock_status() == 'outofstock'){
echo 'Out of stock simple product ID: '.$post->ID.' link: '.get_permalink( $product->ID ).' Title: '.$product->get_title().'<br>';
}
if ($product->get_type() == "variable" && $post->post_name != 'bra') {
$variations = $product->get_available_variations();
foreach($variations as $variation){
$variation_id = $variation['variation_id'];
$variation_obj = new WC_Product_variation($variation_id);
if($product->get_stock_status() == 'outofstock'){
echo 'Out of stock variation product ID: '.$variation_id .' link: '.get_permalink( $product->ID ).' Title: '.$variation_obj->get_title().'<br>';
}
}
}
endwhile; wp_reset_query(); // Remember to reset
echo 'stock update done';
?>
