Получить email заказов по дате woocommerce

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	

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

Базовые команды 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

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';
?>