Вопрос заключается в следующем. Настряпал код который перемножает цену товара на определенный курс, по заданному признаку и записывает новую цену в произвольное поле 'rrp_price':
function my_woocommerce_get_price($price, $_product) {
$rooms2 = get_post_meta(get_the_ID(), 'rooms2', true );
$kurs = 1;
$kurs2 = 10;
$kurs3 = 100;
if ($rooms2 == 1) {
$new_price = $price * $kurs2;
update_post_meta(get_the_ID(), "rrp_price", $new_price );
return $new_price;
} elseif ($rooms2 == 2) {
$new_price = $price * $kurs3;
update_post_meta(get_the_ID(), "rrp_price", $price );
return $new_price;
} else {
update_post_meta(get_the_ID(), "rrp_price", $price ); // в последствии произвольное поле используется для сортировки по возрастанию/убыванию
}
return $price;
}
add_filter('woocommerce_get_price', 'my_woocommerce_get_price',100,2);
add_filter('woocommerce_product_variation_get_price', 'my_woocommerce_get_price',100,2);
add_filter('woocommerce_get_regular_price', 'my_woocommerce_get_price',100,2);
add_filter('woocommerce_product_variation_get_regular_price', 'my_woocommerce_get_price',100,2);
add_filter('woocommerce_get_variation_price', 'my_woocommerce_get_price',100,2);
add_filter('woocommerce_get_variation_regular_price', 'my_woocommerce_get_price',100, 2);
add_filter( 'filter_woocommerce_variation_prices', 'my_woocommerce_get_price', 10, 3 );
Где rooms2 - это еще одно произвольное поле куда заносится признак (1,2,3 и т.д) Все работает как для простого так и для вариативного товара (за исключекнием того что в вариациях, в произвольных полях 'rrp_price' (в админке) показана новая цена только одной вариации, хотя на сайте у каждой своя). Вопрос стоит в том чтобы отправить цену из произвольного поля в корзину (так как там отображается старая)?
Добавьте такой код в functions.php вашей темы. Ваш код уберите - все эти хуки лишние.
function get_rrp_price( $price, $product_id ) {
$rooms2 = get_post_meta( $product_id, 'rooms2', true );
if ( '' === $rooms2) {
$rooms2 = 1; // значение по умолчанию, если нет мета-поля
}
$kurs = 1;
$kurs2 = 10;
$kurs3 = 100;
// Впоследствии произвольное поле rrp_price используется для сортировки по возрастанию/убыванию
switch ( $rooms2 ) {
case 1:
$rrp_price = $price * $kurs2;
break;
case 2:
$rrp_price = $price * $kurs3;
break;
default:
$rrp_price = $price * $kurs;
break;
}
return $rrp_price;
}
function filter_woocommerce_get_price( $price, $_this ) {
$product_id = $_this->id;
$rrp_price = get_rrp_price( $price, $product_id );
update_post_meta( $product_id, 'rrp_price', $rrp_price );
return $rrp_price;
}
function filter_736700_woocommerce_product_variation_get_price( $price, $_this) {
if ( 'product_variation' === $_this->post_type ) {
$data = (object) $_this->get_data();
$variation_price = $data->price;
$product_id = $data->parent_id;
$variation_rrp_price = get_rrp_price( $variation_price, $product_id );
$price = $variation_rrp_price;
}
return $price;
}
add_filter( 'woocommerce_product_variation_get_price', 'filter_736700_woocommerce_product_variation_get_price', 10, 2);
function filter_736700_woocommerce_variation_prices( $prices_array, $product, $include_taxes ) {
// Смените значения в $prices_array
$product_id = $product->id;
foreach ( $prices_array['price'] as $key => $price ) {
$prices_array['price'][ $key ] = get_rrp_price( $price, $product_id );
}
foreach ( $prices_array['regular_price'] as $key => $price ) {
$prices_array['price'][ $key ] = get_rrp_price( $price, $product_id );
}
foreach ( $prices_array['sale_price'] as $key => $price ) {
$prices_array['price'][ $key ] = get_rrp_price( $price, $product_id );
}
return $prices_array;
}
add_filter( 'woocommerce_variation_prices', 'filter_736700_woocommerce_variation_prices', 10, 3 );
Код работает везде - и для простого товара, и для вариативного. Работает как на странице товара, так и в корзине. В поле rrp2 пишется только одна цена для любого товара.
Вот снимок корзины
Цена обоих товаров умножена на 10 ($kurs2).
как сделать, чтобы Post id выводился не testru/city/28 , хотелось бы test
ЗдравствуйтеСделала http аутентификациюю Она работает, но почему-то при переходе на url другого вида выбивается ошибка о том, что $_SERVER['PHP_AUTH_USER']...