Вадим Фоминов | Создаю сайты на Wordpress
1.53K subscribers
233 photos
5 videos
15 files
112 links
Про сайты со сложной структурой: интернет-магазин, сайт-каталог, блог, сайт-портфолио или личный кабинет любой сложности.

Для связи: @vadimfominov
Download Telegram
get_template_directory() - получает полный путь от корня сайта до текущей темы (родительской, не дочерней). Без слэша на конце.

Вместо этой функции, можно использовать константу TEMPLATEPATH

echo TEMPLATEPATH;
/home/example.com/public_html/wp-content/themes/theme_name

echo get_template_directory();
/home/example.com/public_html/wp-content/themes/theme_name
load_template() - подключает указанный файл в PHP, с помощью require_once.

Используется, чтобы быть уверенным, что среда WordPress уже установлена в момент подключения файла. Функция также устанавливает глобальные переменные: 
✓ $posts, 
✓ $post, 
✓ $wp_did_header, 
✓ $wp_query, 
✓ $wp_rewrite, 
✓ $wpdb, 
✓ $wp_version, 
✓ $wp, $id, 
✓ $comment, 
✓ $user_ID.
locate_template() - находит наиболее подходящий серверный путь к указанному файлу шаблона. При поиске учитывается дочерняя тема. Можно указать, чтобы файл сразу подключался в PHP.

В функцию можно передать массив названий файлов. Тогда она будет проверять по очереди наличие файлов и при первом найденном файле, сразу вернет путь до него (следующие обрабатываться не будут). Если указать второй параметр, этот файл будет подключен в PHP.
register_post_type() — создает новый тип записи или изменяет имеющийся.

❗ После создания нового типа записи. Обязательно нужно зайти на страницу  Настройки → Постоянные ссылки. Нужно это для того, чтобы правила ЧПУ были пересозданы и туда были добавлены правила нового типа записи.
Существует короткий синтаксис массива, который заменяет array() на [].

Пример:
<?php
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// Использование синтаксиса короткого массива
$array = [
    "foo" => "bar",
    "bar" => "foo",
];
?>
💡 Как настроить передачу чекбоксов из Contact Form 7 в Битрикс24 (Bitrix24). Для этого необходимо передать значение чекбокса в скрытый input CF7 и уже это поле передать в Bitrix24.

Эту задачу можно решить различными способами, в данном примере делаем это через js + с помощью плагина.
в function.php
// Подключение WooCommerce
if (class_exists("WooCommerce")) {
    require get_template_directory() . "/functions/woocommerce.php";
}

в functions/woocommerce.php
function theme_name_woocommerce_setup()
{
    add_theme_support(
        "woocommerce",
        [
// размер thumbnail
            "thumbnail_image_width" => 150,
// размер изображений товара 
            "single_image_width"    => 300,
// параметры вывода товаров на страницах архивов 
            "product_grid"          => [
                "default_rows"      => 3,
                "min_rows"          => 1,
                "default_columns"   => 4,
                "min_columns"       => 1,
                "max_columns"       => 6,
            ],
        ]
    );
    add_theme_support("wc-product-gallery-zoom");
    add_theme_support("wc-product-gallery-lightbox");
    add_theme_support("wc-product-gallery-slider");
}
add_action("after_setup_theme", "theme_name_woocommerce_setup");
💡 Отключение стилей WooCommerce по умолчанию

add_filter("woocommerce_enqueue_styles", "__return_empty_array");
⚡ Отключим стили и скрипты с помощью wp_dequeue_script() на всех страницах, кроме страниц магазина.

add_action("wp_enqueue_scripts", "wc_styles_scripts", 99);
function wc_styles_scripts()
{
    if (function_exists("is_woocommerce")) {
        if (!is_woocommerce()
&& !is_cart()
&& !is_checkout()
&& !is_account_page()) {
            wp_dequeue_style("woocommerce-general");
            wp_dequeue_style("evolution-woostyles");
            wp_dequeue_script("wc_price_slider");
            wp_dequeue_script("wc-single-product");
            wp_dequeue_script("wc-add-to-cart");
            wp_dequeue_script("wc-cart-fragments");
            wp_dequeue_script("wc-checkout");
        }
    }
}
if (is_woocommerce() && (is_single() || is_page())) {
    # Товар
}

if (is_tax("product_cat")) {
    # Категория / Подкатегория
}

if (is_tax("product_tag")) {
    # Метка
}

if (is_account_page()) {
    # Личный кабинет
}

if (is_cart()) {
    # Корзина
}

if (is_checkout()) {
    # Оформление заказа
}
👉 single_term_title(); - вывод заголовка
👉 $cat_id = get_queried_object()->term_id; - получаем id текущей категории
👉 $categories = get_the_terms($post->ID, "product_cat"); - получаем категории текущего товара
⚡ По умолчанию список категорий текущего товара выводится через запятую.

echo wc_get_product_category_list($product->get_id());
# вывод категорий товара
Тут написано как создать новый тип записи, а какой файл отвечает за отображения каждой записи напишу ниже 👇👇

single-{post_type}.php
single.php
singular.php
index.php

и в исключительных случаях можно создать
single-{post_type}-{post_name}.php, но это прям если очень индивидуально подходить к каждому посту, что бывает редко.
Чтобы скрыть необходимый пункт меню в админке, добавьте следующий код в functions.php

add_action("admin_menu", "remove_menus");
function remove_menus() {
    remove_menu_page("index.php");  
# Консоль
    remove_menu_page("edit.php");  
# Записи
    remove_menu_page("edit-comments.php");
# Комментарии
    remove_menu_page("edit.php?post_type=page");  
# Страницы
    remove_menu_page("upload.php");              
# Медиафайлы
    remove_menu_page("themes.php");              
# Внешний вид
    remove_menu_page("plugins.php");              
# Плагины
    remove_menu_page("users.php");                
# Пользователи
    remove_menu_page("tools.php");                
# Инструменты
    remove_menu_page("options-general.php");      
# Параметры
}
👍1
Чтобы изменить стандартный порядок пунктов меню в админке на произвольный, необходимо лишь переставить пункты местами в следующем коде.

if (is_admin()) {
    add_filter("custom_menu_order", "__return_true");
# включаем ручную сортировку
    add_filter("menu_order", "custom_menu_order");
# ручная сортировка
    function custom_menu_order($menu_order)
    {
        if (!$menu_order) return true;
        return array(
            "index.php",                    
# Консоль
            "edit.php",                      
# Записи
            "edit-comments.php",              
# Комментарии
            "separator1",                    
# ~ Отступ ~
            "edit.php?post_type=page",        
# Страницы
            "edit.php?post_type=reviews",    
# Отзывы
            "edit.php?post_type=stocks",    
# Акции
            "edit.php?post_type=works",      
# Работы клиники
        );
    }
}
Убираем поле "Очистить" на странице вариативного товара 😎 

В functions.php прописываем:
add_filter( 'woocommerce_reset_variations_link', '__return_empty_string', 9999 );
💡 Добавляем шорткод прямо в верстке в произвольном месте <?php echo do_shortcode('[YOUR-SHORTCODE-NAME/TAG]'); ?>
👍 Чтобы в вариативных товарах не выводилось количество оставшихся товаров, в functions.php прописываем:
add_filter( 'woocommerce_reset_variations_link', '__return_empty_string', 9999 );
В .htaccess после строки # END WordPress, дописываем:

php_value upload_max_filesize 999M
php_value post_max_size 999M
php_value memory_limit 999M
php_value max_execution_time 300
php_value max_input_time 300
🔥1
В functions.php прописываем:
add_filter( 'avatar_defaults', 'setnew_gravatar' );
 
function setnew_gravatar ($avatar_defaults) {
$myavatar = 'ссылка на аватар';
$avatar_defaults[$myavatar] = "Новый аватар";
return $avatar_defaults;
}    

Настройки => обсуждение => аватар по умолчанию.