/**
* Уточняем количество столбцов на странице ахивов товаров
* Для woo и для storefront
*/
add_filter( 'storefront_loop_columns', function() { return 4; } );
add_filter( 'loop_shop_columns', function() { return 4; } );
add_action('wp', 'b2b_wp_handler', 1000);
function b2b_wp_handler(){
remove_action( 'storefront_header', 'storefront_product_search', 40 );
add_action( 'storefront_header', 'get_search_form', 40 );
}
wc_get_template( 'myaccount/form-login.php' );
do_action( 'woocommerce_register_form' );
по которому Вы можете добавить в форму свой html код списка ролей.$menu_item = apply_filters ('wpmenucart_menu_item_a', $menu_item, ...
add_filter ('wpmenucart_menu_item_a', function($menu_item){
// $menu_item - содержит полный html код элемента
// Здесь делаете поиск и подмену
// ...
// Возврат ОБЯЗАТЕЛЕН!!!
return $menu_item;
});
MSXML2.ServerXMLHTTP
. Информации о нем в интернете достаточно' Вставьте код в пустой модуль новой книги и запустите на выполнение
' Результат отобразится в первой колонке активного листа.
Public Sub Send()
Dim oXMLHTTP As Object
Dim vItem, v As Variant
Dim psUrl As String
Dim psParams As String
psUrl = "http://samples.openweathermap.org/data/2.5/weather"
psParams = "q=London,uk&appid=b6907d289e10d714a6e88b30761fae22"
Set oXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
With oXMLHTTP
Select Case 1
Case 1 'Method Get
If Len(psParams) > 0 Then psParams = "?" & psParams
.Open "GET", psUrl & psParams, False
psParams = ""
Case 2 'Method Post
.Open "POST", psUrl, False
End Select
'On Error Resume Next
.Send psParams
ActiveSheet.Range("A1") = .Status
ActiveSheet.Range("A2") = .getAllResponseHeaders
ActiveSheet.Range("A3") = .ResponseText
End With
Set oXMLHTTP = Nothing
End Sub
woocommerce_quantity_input()
.woocommerce_after_shop_loop_item
. И кнопку запроса, по нажатии которой выполняется ajax и с сервера возвращается полный html таблицы.woocommerce_after_single_product_summary
/**
* Множественное добавление в корзину
* Вызывается по Ajax
*
* @hook-handle qop_add_to_cart
*/
public function ajax_add_to_cart() {
$product_items = isset( $_POST['products'] ) && is_array( $_POST['products'] ) ? $_POST['products'] : false;
$errors = array();
$added_products_count = 0;
foreach ( $product_items as $item ) {
$product_id = $item['product_id'];
$quantity = $item['quantity'];
$variation_id = $item['variation_id'];
$title = $item['product_title'];
$sku = $item['sku']; // для простого товара здесь тоже его sku
$passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity );
$product_status = get_post_status( $product_id );
if ( $passed_validation && WC()->cart->add_to_cart( $product_id, $quantity, $variation_id ) && 'publish' === $product_status ) {
do_action( 'woocommerce_ajax_added_to_cart', $product_id );
$added_products_count ++;
} else {
$notices = WC()->session->get( 'wc_notices', array() );
if ( isset( $notices['error'] ) ) {
$error = array_pop( $notices['error'] );
$err_msg = preg_replace( '/<a.*?href.*?=(.*)>(.*?)<\/a>/', '', $error );
$errors[] = array(
'variationId' => $variation_id,
'title' => $title,
'sku' => $sku,
'msg' => $err_msg,
);
}
wc_clear_notices();
}
}
$response = array(
'added' => $added_products_count,
'errors' => $errors,
'popup' => $this->template_errors_formating( $errors ),
'cart' => $this->get_refreshed_fragments(),
);
wp_send_json( $response );
}