Добавить класс к карточке товара

// Фильтр для добавления класса к карточке товара
function add_custom_class_to_product_card($classes) {
    global $product;

    $product_class_settings = get_option('product_class_settings');
    $product_ids = isset($product_class_settings['product_ids']) ? $product_class_settings['product_ids'] : '';

    if ($product_ids) {
        $product_ids = explode(',', $product_ids);
        $product_ids = array_map('trim', $product_ids);

        if (in_array($product->get_id(), $product_ids)) {
            $classes[] = 'hide-regular-price'; // Можно заменить 'hide-regular-price' на имя класса, которое вы хотите добавить к карточке товара
        }
    }

    return $classes;
}
add_filter('woocommerce_post_class', 'add_custom_class_to_product_card');

 

ubuntu закрыть порты

iptables -A INPUT -p tcp --dport {номер_порта} -j DROP — запретить полностью порт

iptables -A INPUT -s 127.0.0.0/8 -p tcp -m tcp --dport {номер_порта} -j ACCEPT — разрешить порт для локальных служб, используется с запретом порта на внешку, но это разрешение должно быть выше в правилах, чем запрет этого же порта

iptables --line-numbers -L -v -n — показывает правила с нумерацией строк, там же показываются счетчики что правило работает и что то фильтрует

iptables -D INPUT {номер_строки} — удаляет правило для указанной строки, если вдруг что то лишнее прописалось или не в том порядке

sudo iptables-save — обязательно сохранить после любых манипуляций P.S.: iptables работает по принципу, запрещаем все или что то, если не разрешено, поэтому сначала разрешения, а потом запреты, поэтому если разрешить порт, а потом его закрыть следом, то он будет разрешен, даже несмотря на запрет

Woocommerce terms and conditions in iframe

function design_woocommerce_checkout_terms_and_conditions()
{
	remove_action('woocommerce_checkout_terms_and_conditions', 'wc_terms_and_conditions_page_content', 30);
}

if ((!defined('MAIN_SITE') || !MAIN_SITE) && !in_array(COUNTRY_NAME, ['Switzerland'])) {
	add_action('wp', 'design_woocommerce_checkout_terms_and_conditions');
}

 

php скрипт сокращения ссылок

При sms рассылках важен размер ссылки, которая будет в тексте сообщения.

В базе данных создается отдельная таблица для хранения короткого урла, и соответствующего ему длинного.

В данную таблицу происходит запись по определенному событию:

function generateRandomString($length = 3) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[random_int(0, $charactersLength - 1)];
    }
    return $randomString;
}
$short_url = generateRandomString();	
global $wpdb;
$table_name = $wpdb->prefix.'urls';
$data = ['url' => $long_url, 'short_url' => $short_url];
$wpdb->insert($table_name, $data);

Читать далее «php скрипт сокращения ссылок»

Woocommerce получить список урлов товаров

Иногда необходимо быстро получить список адресов страниц всех опубликованных на сайте товаров. Для этого необходимо выполнить данный php скрипт, который можно разместить в корне сайта.

<?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 );	
	$permalink = $product->get_permalink();
	echo $permalink.'<br/>';	
endwhile; wp_reset_query(); // Remember to reset 

?>

Установить sku товару и вариациям

<?php
include( 'wp-load.php' );
$list = [];
$args = [
    'post_type' => ['product'/*, 'post', 'page'*/],
    'posts_per_page' => -1,
    'post_status' => 'publish'
];
$loop = new WP_Query( $args );
$list = array();
while ( $loop->have_posts() ) : $loop->the_post();
	global $post;	
	$product = wc_get_product( $post->ID );		
	$max_sku = '100000000'.time();
		if(empty($product->get_sku())){
			$product->set_sku($max_sku);
		}
		if( $product->is_type('variable')) {
			$children_ids = $product->get_children();
			foreach( $children_ids as $child_id ){
				$max_sku = '100000000'.generateRandomString().time();
				$variation = wc_get_product($child_id);
				if(get_post_meta($variation->get_id(), '_sku', true) === ''){
					$variation->set_sku( $max_sku );
					$variation->save();
				}
			}
		}
	 
endwhile; wp_reset_query(); // Remember to reset 
?>

Woocommerce округлить цены

<?php
include( 'wp-load.php' );
// id => sku from com domain
// Setup your custom query
$args = [
    'post_type' => ['product'/*, 'post', 'page'*/],
    'posts_per_page' => 200,
    'post_status' => 'publish'
];
function p($a, $d = 1) {
	echo '<pre>';
	var_dump($a);
	if($d) {
		die;
	}
}
$loop = new WP_Query( $args );
$list = array();
while ( $loop->have_posts() ) : $loop->the_post();
	global $post;	
	$product = wc_get_product( $post->ID );
	if ( $product->is_type( 'variable' ) ) {
		//$variations = $product->get_variations();
		$variations = $product->get_children();
		foreach($variations as $ir => $var) {
			$variation = new WC_Product_Variation( $var );
			$a = 0;
			if ($variation->get_sale_price() && (int) $variation->get_sale_price() != $variation->get_sale_price()) {
				$variation->set_sale_price(round($variation->get_sale_price()));
				$a = 1;
			}
			if ($variation->get_regular_price() && (int) $variation->get_regular_price() != $variation->get_regular_price()) {
				$variation->set_regular_price(round($variation->get_regular_price()));
				$a = 1;
			}
			if ($variation->get_price() && (int) $variation->get_price() != $variation->get_price()) {
				$variation->set_price(round($variation->get_price()));
				$a = 1;
			}
			if($a) {
				$variation->save();
			}
		}
	}
	elseif( $product->is_type( 'simple' )) {
		$a = 0;
		if ($product->get_sale_price() && (int) $product->get_sale_price() != $product->get_sale_price()) {
			$product->set_sale_price(round($product->get_sale_price()));
			$a = 1;
		}
		if ($product->get_regular_price() && (int) $product->get_regular_price() != $product->get_regular_price()) {
			$product->set_regular_price(round($product->get_regular_price()));
			$a = 1;
		}
		if ($product->get_price() && (int) $product->get_price() != $product->get_price()) {
			$product->set_price(round($product->get_price()));
			$a = 1;
		}
		if($a) {
			$product->save();
		}
	}
	 
endwhile; //wp_reset_query(); // Remember to reset
echo 'All product loop  done<br>';
/*foreach ($list as $key => $value){
    echo '"'.$key.'"'.' => '.'"'.$value.'"'.', ';
}*/
?>