/* STEP1: parent = 0
find top-level categories
знаходимо теки на верхнього рівня
*/
$cats0 = get_terms( 'product_cat',
array( 'hide_empty' => false,
'fields' => 'ids',
'parent' => '0',
'orderby' => 'term_id',
'order' => 'ASC'
));
foreach ( $cats0 as $cat0_id ) {
$cat0 = get_term( $cat0_id, 'product_cat' );
echo $cat0->name;
echo $cat0->slug;
echo $cat0->description;
/* рибимо те, що потрібно з категорією */
/* STEP1: parent = $cat0_id
find next-level categories
знаходимо теки на рівень нижче
*/
$cars1 = get_terms( 'product_cat',
array( 'hide_empty' => false,
'fields' => 'ids',
'parent' => $cat0_id,
'orderby' => 'term_id',
'order' => 'ASC'
));
foreach ( $cats1 as $cat1_id ) {
$cat1 = get_term( $cat1_id, 'product_cat' );
echo $cat1->name;
echo $cat1->slug;
echo $cat1->description;
/* рибимо те, що потрібно з під-категорією */
/* STEP3: products
find products in this category
знаходимо товари в цій категорії
*/
if( $_SERVER['REQUEST_URI'] == '/shop/' ){
$args = array( 'post_type' => 'product',
'posts_per_page' => 6,
'product_cat' => $cat1->slug,
'orderby' => 'name',
'order' => 'ASC'
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
global $product;
/* id */
echo get_permalink( $loop->post->ID );
/* title */
echo $loop->post->post_title;
/* sale! */
woocommerce_show_product_sale_flash(
$post, $product);
/* image */
if (has_post_thumbnail( $loop->post->ID ))
echo get_the_post_thumbnail(
$loop->post->ID, 'shop_catalog');
else
echo '<img src="'
.woocommerce_placeholder_img_src()
.'" alt="Placeholder"
width="300px" height="300px" />';
/* description */
echo strip_tags( $loop->post->post_content );
/* price */
echo $product->get_price_html();
/* add to cart */
woocommerce_template_loop_add_to_cart(
$loop->post, $product );
endwhile;
wp_reset_query();
} /* if $_SERVER['REQUEST_URI'] */
} /* foreach $terms1 */
} /* foreach $terms */
субота, 8 квітня 2017 р.
WooCommerce category (categories) and product's
Документація з WooCommerce не надихає на код, а чомусь, відсилає в адмінку Wordpress-у.
середа, 8 березня 2017 р.
SSH-тунель з Windows-клієнта через Mikrotik
Задача: зробити віддалений доступ до Windows-сервера з Windows-клаєнта через Mikrotik.
1. Завантажити й встановити PuTTY (наприклад,
2. Згенерувати ключі - puttygen.exe
2.1. Просто натисніть
й рухайте мишкою поки не заповниться синій бігунок.
2.2. Згенеровані ключі потрібно зберегти: public.key та private.key.
2.3.АЛЕ, записаний нами приватний ключ не буде прийнятий Mikrotik-ом. Тому потрібно виділити все у віконці
зкопіювати й записати у файл public.key.
3. Сам файл public.ket потрібно перенести на Mikrotik:
5. Завантажуємо ключ в ssh-agent-а:
6. Тепер робимо тунель командою plink.exe:
1. Завантажити й встановити PuTTY (наприклад,
putty-0.68-installer.msi)2. Згенерувати ключі - puttygen.exe

й рухайте мишкою поки не заповниться синій бігунок.2.2. Згенеровані ключі потрібно зберегти: public.key та private.key.

зкопіювати й записати у файл public.key.
3. Сам файл public.ket потрібно перенести на Mikrotik:
4. Імпортуємо (прив’язуємо) ключ до користувача:
pscp.exe -scp -P 22 -pw userpass public.key username@mikrotik:/userkey.pub
5. Завантажуємо ключ в ssh-agent-а:
pageant.exe C:\Program Files\putty\keys\private.ppk
6. Тепер робимо тунель командою plink.exe:
plink -batch -ssh -N username@mikrotik -P 22 -pw userpass -L 15110:server:3389
понеділок, 6 березня 2017 р.
Mikrotik з OpenVPN
Файл налаштування клієнта:
clientФайл pass.txt:
dev tap
port 1194
proto tcp
remote 192.168.88.1 1194 # VPN server IP : PORT
nobind
ca ca.crt
cert clientname.crt
key clientname.key
#comp-lzo
persist-key
persist-tun
verb 3
auth-user-pass pass.txt
route-method exe
route-delay 2
route 192.168.1.0 255.255.255.255 192.168.88.1
clientname
clientpass
понеділок, 27 лютого 2017 р.
Debian 7 та MySQL server 5.6+
Видалити попередню версію (5.5):
Встановити mysql 5.6:
sudo apt-get purge mysql*Додати репозіторій (взяти з https://dev.mysql.com/downloads/repo/apt/)
sudo apt-get autoremove
sudo apt-get autoclean
sudo rm -rf /var/log/mysql
sudo rm -rf /var/log/mysql.*
sudo rm -rf /var/lib/mysql
wget http://repo.mysql.com/mysql-apt-config_0.8.2-1_all.debПісля цих дій буде створений файл /etc/apt/sources.list.d/mysql.list з такими рядками:
sudo dpkg -i mysql-apt-config_0.8.2-1_all.deb
deb http://repo.mysql.com/apt/debian/ wheezy mysql-5.6Оновити ключі:
deb-src http://repo.mysql.com/apt/debian/ wheezy mysql-5.6
sudo apt-key adv --keyserver pgp.mit.edu \
--recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5
Встановити mysql 5.6:
sudo apt-get update
sudo apt-get install mysql-server-5.6
пʼятниця, 10 лютого 2017 р.
Міграція з VPS Debian 7 на VPS Debian 8
Переношу свій хостинг на новий Debian:
1. $ ssh root@vps-new
2. apt-get update
3. apt-get upgrade
4. dpkg-reconfigure locales
4.1. Locales to be generated: uk_UA.UTF-8 UTF-8 - Ok
4.2. Default locale for the system environment: uk_UA.UTF-8 - Ok
5. Ctrl+D
6. $ ssh root@vps-new
7. groupadd -r wheel
8. useradd -m -g wheel -s /bin/bash superuser
9. passwd superuser
10. додати рядок у /etc/sudoers:
%wheel ALL=(ALL) NOPASSWD: ALL
11. $ sudo mcedit /etc/hostname - srv170210
12. $ sudo hostname -F /etc/hostname
13. $ wget http://vestacp.com/pub/vst-install.sh
14. $ sudo bash vst-install.sh --nginx yes --apache yes --phpfpm no --vsftpd yes --proftpd no --exim yes --dovecot yes --spamassassin yes --clamav no --named yes --iptables yes --fail2ban yes --mysql yes --postgresql no --remi no --quota no --hostname srv170210 --email superuser@email.com --force
15. Згадав, що планував змінити php на 7.х
15.1. $ dpkg --list | grep php | awk '/^ii/{ print $2}'
15.2. $ x="$(dpkg --list | grep php | awk '/^ii/{ print $2}')"
15.3. $ sudo apt-get --purge remove $x
16. Видалив php5, встановлюю php7
16.1. $ wget https://www.dotdeb.org/dotdeb.gpg
16.2. $ sudo apt-key add dotdeb.gpg
16.3. $ echo -e "deb http://packages.dotdeb.org jessie all\ndeb-src http://packages.dotdeb.org jessie all" > dotdeb.list
16.4. $ sudo cp dotdeb.list /etc/apt/sources.list.d/
16.5. $ sudo apt-get update
16.6. $ sudo apt-get install php7.0 php7.0-common php-pear
16.7. $ sudo apt-get -f install
16.8. $ sudo apt-get install libapache2-mod-php7.0
17. Перенесення бекапів
17.1. root@vps-old:# scp /home/backup/admin.2017-02-10.tar superuser@vps-new:~/home/backup/
18. Відновлення бекапів
18.1. v-restore-user admin admin.2017-02-10.tar
19. Власне, все.
1. $ ssh root@vps-new
2. apt-get update
3. apt-get upgrade
4. dpkg-reconfigure locales
4.1. Locales to be generated: uk_UA.UTF-8 UTF-8 - Ok
4.2. Default locale for the system environment: uk_UA.UTF-8 - Ok
5. Ctrl+D
6. $ ssh root@vps-new
7. groupadd -r wheel
8. useradd -m -g wheel -s /bin/bash superuser
9. passwd superuser
10. додати рядок у /etc/sudoers:
%wheel ALL=(ALL) NOPASSWD: ALL
11. $ sudo mcedit /etc/hostname - srv170210
12. $ sudo hostname -F /etc/hostname
13. $ wget http://vestacp.com/pub/vst-install.sh
14. $ sudo bash vst-install.sh --nginx yes --apache yes --phpfpm no --vsftpd yes --proftpd no --exim yes --dovecot yes --spamassassin yes --clamav no --named yes --iptables yes --fail2ban yes --mysql yes --postgresql no --remi no --quota no --hostname srv170210 --email superuser@email.com --force
15. Згадав, що планував змінити php на 7.х
15.1. $ dpkg --list | grep php | awk '/^ii/{ print $2}'
15.2. $ x="$(dpkg --list | grep php | awk '/^ii/{ print $2}')"
15.3. $ sudo apt-get --purge remove $x
16. Видалив php5, встановлюю php7
16.1. $ wget https://www.dotdeb.org/dotdeb.gpg
16.2. $ sudo apt-key add dotdeb.gpg
16.3. $ echo -e "deb http://packages.dotdeb.org jessie all\ndeb-src http://packages.dotdeb.org jessie all" > dotdeb.list
16.4. $ sudo cp dotdeb.list /etc/apt/sources.list.d/
16.5. $ sudo apt-get update
16.6. $ sudo apt-get install php7.0 php7.0-common php-pear
16.7. $ sudo apt-get -f install
16.8. $ sudo apt-get install libapache2-mod-php7.0
17. Перенесення бекапів
17.1. root@vps-old:# scp /home/backup/admin.2017-02-10.tar superuser@vps-new:~/home/backup/
18. Відновлення бекапів
18.1. v-restore-user admin admin.2017-02-10.tar
19. Власне, все.
четвер, 17 листопада 2016 р.
MikroTik доступ до внутрішнього сервера
Проблема
Є внутрішня мережа з сервером приєднаним до інтернету через MikroTik.
Зовнішня IP-адреса: AAA.BBB.CCC.DDD.
Внутрішня мережа: 192.168.88.0/24.
ІР-адреса серверу: 192.168.88.10.
Потрібно надати доступ ззовні до певних портів внутрішнього сервера.
Зовнішня IP-адреса: AAA.BBB.CCC.DDD.
Внутрішня мережа: 192.168.88.0/24.
ІР-адреса серверу: 192.168.88.10.
Потрібно надати доступ ззовні до певних портів внутрішнього сервера.
Рішення
1) Надаємо доступ до внутрішніх портів іззовні:
General
1) Надаємо доступ до внутрішніх портів іззовні:
General
- Chain: dstnat
- Protocol: 6 (tcp)
- Dst. Port: 80,8083
- Int. Interface: ether1
- Action: netmap
- To Addresses: 192.168.88.10
2) Перенаправляємо запити з внутрішньої мережі до зовнішньої адреси на внутрішнью адресу:

General
- Chain: dstnat
- Src. Address: 192.168.88.0/24
- Dst. Address: AAA.BBB.CCC.DDD
- Protocol: 6 (tcp)
- Dst. Port: 80,8083
- Action: dst-nat
- To Addresses: 192.168.88.10
3) Підмінюємо адресу внутрішніх запитів на адресу роутера:

General
- Chain: srcnat
- Src. Address: 192.168.88.0/24
- Dst. Address: 192.168.88.10
- Protocol: 6 (tcp)
- Dst. Port: 80,8083
- Action: src-nat
- To Addresses: 192.168.88.1
Доступ для SSH з внутрішньої мережі не забезпечуємо:

General
- Chain: dstnat
- Protocol: 6 (tcp)
- Dst. Port:2222
- In. Interface: ether1
- Action:netmap
- To Addresses: 192.168.88.10
- To Ports: 22
неділя, 21 серпня 2016 р.
Підписатися на:
Дописи (Atom)
