Сайт находится в разработке

WooCommerce $product Object

У вас есть доступ к $product

Получить всю информацию о товаре имея доступ к переменной $product, так же вы можете вызвать global $product внутри вашей функции

// Получить ID товара
 
$product->get_id(); //id товара
 
// Получить информацию товара
 
$product->get_type(); //тип товара
$product->get_name(); //наименование товара
$product->get_slug(); //slug товара
$product->get_date_created();
$product->get_date_modified();
$product->get_status();
$product->get_featured();
$product->get_catalog_visibility();
$product->get_description(); // Описание товара
$product->get_short_description(); // Короткое описание товара
$product->get_sku(); // артикул
$product->get_menu_order();
$product->get_virtual();
get_permalink( $product->get_id() );
 
// Получить цену товара 
 
$product->get_price(); // Цена покупки
$product->get_regular_price(); // Цена 
$product->get_sale_price(); // Цена распродажи
$product->get_date_on_sale_from(); // Старая цена
$product->get_date_on_sale_to();
$product->get_total_sales();
 
// Получить остатки, статус товара
 
$product->get_tax_status();
$product->get_tax_class();
$product->get_manage_stock(); // доступен к покупке, значения 0 и 1
$product->get_stock_quantity();
$product->get_stock_status(); // статус доступности текстом
$product->get_backorders();
$product->get_sold_individually();
$product->get_purchase_note();
$product->get_shipping_class_id();
 
// Получить размеры товара
 
$product->get_weight();
$product->get_length();
$product->get_width();
$product->get_height();
$product->get_dimensions();
 
// Получить связанные товары
 
$product->get_upsell_ids();
$product->get_cross_sell_ids();
$product->get_parent_id();
 
// Получить вариации товара
 
$product->get_attributes();
$product->get_default_attributes();
 
// Получить таксаномию товара
 
$product->get_categories();
$product->get_category_ids();
$product->get_tag_ids();
 
// Получить загрузки товара
 
$product->get_downloads();
$product->get_download_expiry();
$product->get_downloadable();
$product->get_download_limit();
 
// Получить изображения товара
 
$product->get_image_id();
$product->get_image();
$product->get_gallery_image_ids();
 
// Получить обзоры товара
 
$product->get_reviews_allowed();
$product->get_rating_counts();
$product->get_average_rating(); // Рейтинг товара
$product->get_review_count();

Убираем «мусор» из WordPress

Из-за отключения тех или иных элементов WordPress может перестать работать нужный вам функционал или вообще работоспособность плагинов. Отключение всех элементов производите если вам это действительно не нужно и вы понимаете для чего это делаете.

После каждого отключения проводите проверку на работоспособность необходимых вам элементов сайта.

Добавляете данные коды в файл function.php и все. Функционал будет отключен.

Отключаем ленты RSS

Отключение всех лент rss

// Отключение rss-ленты
function fb_disable_feed() {
wp_redirect(get_option('siteurl'));
}

add_action('do_feed', 'fb_disable_feed', 1);
add_action('do_feed_rdf', 'fb_disable_feed', 1);
add_action('do_feed_rss', 'fb_disable_feed', 1);
add_action('do_feed_rss2', 'fb_disable_feed', 1);
add_action('do_feed_atom', 'fb_disable_feed', 1);

remove_action( 'wp_head', 'feed_links_extra', 3 );
remove_action( 'wp_head', 'feed_links', 2 );
remove_action( 'wp_head', 'rsd_link' );

Выборочное отключение rss

// Удаляет ссылки RSS-лент записи и комментариев
remove_action( 'wp_head', 'feed_links', 2 ); 
// Удаляет ссылки RSS-лент категорий и архивов
remove_action( 'wp_head', 'feed_links_extra', 3 ); 

Удалить RSD ссылку (xmlrpc.php)

remove_action( 'wp_head', 'rsd_link' ); 

Удалить ссылку Windows для Live Writer (wlwmanifest)

remove_action( 'wp_head', 'wlwmanifest_link' ); 

Отключить Rest API

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

/*
 * Отключаем REST API
 */
// Отключаем сам REST API
add_filter('rest_enabled', '__return_false');

// Отключаем фильтры REST API
remove_action( 'xmlrpc_rsd_apis',            'rest_output_rsd' );
remove_action( 'wp_head',                    'rest_output_link_wp_head', 10, 0 );
remove_action( 'template_redirect',          'rest_output_link_header', 11, 0 );
remove_action( 'auth_cookie_malformed',      'rest_cookie_collect_status' );
remove_action( 'auth_cookie_expired',        'rest_cookie_collect_status' );
remove_action( 'auth_cookie_bad_username',   'rest_cookie_collect_status' );
remove_action( 'auth_cookie_bad_hash',       'rest_cookie_collect_status' );
remove_action( 'auth_cookie_valid',          'rest_cookie_collect_status' );
remove_filter( 'rest_authentication_errors', 'rest_cookie_check_errors', 100 );

// Отключаем события REST API
remove_action( 'init','rest_api_init' );
remove_action( 'rest_api_init', 'rest_api_default_filters', 10, 1 );
remove_action( 'parse_request', 'rest_api_loaded' );

// Отключаем Embeds связанные с REST API
remove_action( 'rest_api_init','wp_oembed_register_route');
remove_filter( 'rest_pre_serve_request', '_oembed_rest_pre_serve_request', 10, 4 );

remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
remove_action( 'template_redirect', 'rest_output_link_header', 11, 0 );
remove_action( 'wp_head', 'rest_output_link_wp_head' );
// если собираетесь выводить вставки из других сайтов на своем, то закомментируйте след. строку.
remove_action( 'wp_head','wp_oembed_add_host_js');

Удалить короткую ссылку

remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0); 

Удалить информацию о версии WordPress

remove_action( 'wp_head', 'wp_generator' );

Удалить ссылки на предыдущую и следующую статьи

remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );

Отключить поддержку Emoji

/*
 * Отключаем Emojii
 */
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
remove_action( 'admin_print_styles', 'print_emoji_styles' ); 
remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
remove_filter( 'comment_text_rss', 'wp_staticize_emoji' ); 
remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
add_filter( 'tiny_mce_plugins', 'disable_wp_emojis_in_tinymce' );
function disable_wp_emojis_in_tinymce( $plugins ) {
    if ( is_array( $plugins ) ) {
        return array_diff( $plugins, array( 'wpemoji' ) );
    } else {
        return array();
    }
}

Отключить dns-prefetch

remove_action( 'wp_head', 'wp_resource_hints', 2 );

Отключить .recentcomments

function wpplugins_remove_recentcomments() {
    global $wp_widget_factory;
    remove_action( 'wp_head', array( $wp_widget_factory->widgets['WP_Widget_Recent_Comments'], 'recent_comments_style' ) );
}
add_action('widgets_init', 'wpplugins_remove_recentcomments');

Yoast

При формировании xml карты сайта, плагин yoast создаёт теги картинок image:image. Данный тег не понимает yandex и вывод данного тега нужно отключить

/**
 * Удаление картинок из xml-карты Yoast
*/
add_filter( 'wpseo_xml_sitemap_img', '__return_false' );

Отключить / удалить схему JSON + LD

В случае если вам не нужно формируемое плагином json shema.org то её можно отключить

add_filter( 'wpseo_json_ld_output', '__return_empty_array' );

При необходимости отключить OpenGraph через хуки

add_action('wp_head', 'remove_all_wpseo_og', 1);
function remove_all_wpseo_og() {
   remove_action( 'wpseo_head', array( $GLOBALS['wpseo_og'], 'opengraph' ), 30 );
}

По элементное отключение OpenGraph

add_filter('wpseo_opengraph_url' , '__return_false' );
add_filter('wpseo_opengraph_desc', '__return_false' );
add_filter('wpseo_opengraph_title', '__return_false' );
add_filter('wpseo_opengraph_type', '__return_false' );
add_filter('wpseo_opengraph_site_name', '__return_false' );

Если вы не хотите или не умеете работать с кодом

Существует большое количество плагинов которые отключают разные элементы по отдельности и все разом, если вы все таки решили воспользоваться плагином, то все действия описанные выше можно выполнить с помощью плагина Clearfy

WooCommerce создание заказа

В WooCommerce для создания заказа есть функция wc_create_order(), она создаёт новый заказ и возвращает его в виде объекта в который возможно добавить нужные свойства.
Примеры использования данной функции с расшифровкой.

<?php
global $woocommerce; //для работы функций woocommerce не в шаблонах woocommerce
$order=wc_create_order(); //создаём новый заказ
//Записываем в массив данные о доставке заказа и данные клиента
$address = array(
    'first_name' => $first_name,
    'last_name'  => $last_name,
    'company'    => '',
    'email'      => $email,
    'phone'      => '',
    'address_1'  => $adress_one,
    'address_2'  => $adress_two, 
    'city'       => $city,
    'state'      => '',
    'postcode'   => $postcode,
    'country'    => ''
); 

    
$order->add_product( get_product( '99' ), 1 );//Добавляем в заказ товары: 99-ID товара, 1-количество

$order->set_address( $address, 'billing' ); //Добавляем данные о доставке
$order->set_address( $address, 'shipping' ); // и оплате

$payment_gateways = WC()->payment_gateways->payment_gateways();
$payment = $order->set_payment_method( $payment_gateways['cod'] ); // Установливаем способ оплаты (в переменной $payment_gateways хрянятся все доступные способы оплаты)

$order->calculate_totals(); //подбиваем сумму и видим что наш заказ появился в админке
$order->add_order_note($comment); //добавляет комментарий к заказу (можно указывать в подряд сколько угодно)
$order->update_status('processing', true); //устанавливает статус заказа "В обработке" (в этом случае WooCommerce отправляет уведомление администратору сайта и клиенту) и записываем информацию об оплате

в случае если нам нужно изменить стоимость товара

<?php
global $woocommerce;//для работы функций woocommerce не в шаблонах woocommerce
$order=wc_create_order(); //создаём новый заказ
//Записываем в массив данные о доставке заказа и данные клиента
$address = array(
    'first_name' => $first_name,
    'last_name'  => $last_name,
    'company'    => '',
    'email'      => $email,
    'phone'      => '',
    'address_1'  => $adress_one,
    'address_2'  => $adress_two, 
    'city'       => $city,
    'state'      => '',
    'postcode'   => $postcode,
    'country'    => ''
); 

$product_id = 99; // ID товара или вариации
$new_product_price = $new_price; // новая стоимость товара
$quantity = 1; // количество товаров
$product = wc_get_product( $product_id ); // получаем данные товара WC_Product object
$product->set_price( $new_product_price ); // Изменяем стоимость товара

$order->add_product( $product, $quantity); //Добавляем в заказ товар

$order->set_address( $address, 'billing' ); //Добавляем данные о доставке
$order->set_address( $address, 'shipping' ); // и оплате

$payment_gateways = WC()->payment_gateways->payment_gateways();
$payment = $order->set_payment_method( $payment_gateways['cod'] ); // Установливаем способ оплаты (в переменной $payment_gateways хрянятся все доступные способы оплаты)

$order->calculate_totals(); //подбиваем сумму и видим что наш заказ появился в админке
$order->add_order_note($comment); //добавляет комментарий к заказу(можно указывать в подряд сколько угодно)
$order->update_status('processing', true); //устанавливает статус заказа "В обработке" (в этом случае WooCommerce отправляет уведомление администратору сайта и клиенту) и записываем информацию об оплате

статус заказа назначается последовательно, если вам нужно установить статус Выполнен то вызываем $order->update_status ещё раз но уже в новом статусе.

<?php
$order->update_status('completed', true);

Возможные статусы

pending — В ожидании оплаты
processing — Обработка
on-hold — На удержании
completed — Выполнен
cancelled — Отменен
refunded — Возвращён
failed — Не удался

WooCommerce кастомизация поля поиска

Вывод поиска товаров wooxommerce в произвольном месте и со своим дизайном.
За вывод формы поиска отвечает функция get_product_search_form()

get_product_search_form()

Изменение дизайна и расположения элементов благодоря возможности переопределить содержимое формы. Разместите данный код в ваш functions.php изменить классы под ваши нужды в соответствии с вашим дизайн проектом

<?php
/**
 * Filter WooCommerce  Search Field
 *
 */
add_filter( 'get_product_search_form' , 'me_custom_product_searchform' );
function me_custom_product_searchform( $form ) {
	
        $form = '<form role="search" method="get" id="searchform" action="' . esc_url( home_url( '/'  ) ) . '">
                        <div class="new_search_form">
                                <label class="screen-reader-text" for="s">' . __( 'Search for:', 'woocommerce' ) . '</label>
                                <input type="text" value="' . get_search_query() . '" name="s" id="s" placeholder="' . __( 'My Search form', 'woocommerce' ) . '" />
                                <input type="submit" id="searchsubmit" value="'. esc_attr__( 'Search', 'woocommerce' ) .'" />
                                <input type="hidden" name="post_type" value="product" />
                        </div>
                </form>';

return $form;


}

Вот пример

<?php
/**
 * Filter WooCommerce  Search Field
 *
 */
add_filter( 'get_product_search_form' , 'me_custom_product_searchform' );
function me_custom_product_searchform( $form ) {
	
	$form = '<form role="search" method="get" id="searchform" action="' . esc_url( home_url( '/'  ) ) . '">
			<div class="search_box">
				<label class="screen-reader-text" for="s">' . __( 'Search for:', 'woocommerce' ) . '</label>
				<button type="submit"><i class="ion-ios-search-strong"></i></button>
				<input type="text" value="' . get_search_query() . '" name="s" id="s" placeholder="' . __( 'Search products...', 'woocommerce' ) . '" />                           
					<input type="hidden" name="post_type" value="product" />
			</div>
	</form>';
	return $form;
}

WooCommerce получить все заказы сайта или пользователя

Иногда может потребоваться получить все заказы сайта или конкретного пользователя, для этого нам понадобится функция WC_Order_Query()

для получения id заказов сайта

<?php
    $query = new WC_Order_Query(
        array(
            'limit' => 10, // указываем количество выводимых заказов, -1 вывести все
            'orderby' => 'date',
            'order' => 'DESC', // Возможные значения 'DESC', 'ASC'  и rand'
            'date_created' => '<' . ( time() - HOUR_IN_SECONDS ),// получить заказы до нужной даты
            'return' => 'ids', // получаем только id заказов так же можно получить объект заказа возможные значения 'ids' и 'objects
            'status' => 'completed',// нужный нам статус заказов. Возможные статусы заказа, pending || processing || on-hold || completed || cancelled || refunded || failed
            'currency' => 'USD',//нужная валюта 
        )
    );
    print_r($query);

возвращаемое значение

Array
(
    [0] => 296
    [1] => 294
    [2] => 292
)

получаем id всех заказов пользователя

<?php
    $query = new WC_Order_Query(
        array(
            'limit' => -1, //указываем количество выводимых заказов, -1 вывести все
            'orderby' => 'date',
            'order' => 'DESC',
            'return' => 'ids', //получаем только id заказов
            'status' => 'completed',// нужный нам статус заказов. Возможные статусы заказа, pending || processing || on-hold || completed || cancelled || refunded || failed
            'customer_id' => $user_id, // id пользователя
            'customer' => 'woocommerce@woocommerce.com',// так же можно получать заказы по почте пользователя
        )
    );
    print_r($query);