/**
* Split Product quantities in cart
* @param $cart_item_data
* @param $product_id
*
* @return mixed
*/
function wpp_only_one_product_per_row( $cart_item_data, $product_id ){
$cart_item_data['unique_key'] = uniqid();
return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data', 'wpp_only_one_product_per_row', 10, 2 );
add_filter( 'woocommerce_is_sold_individually', '__return_true' );
$customer_order = get_posts( array(
'numberposts' => 1,
'meta_key' => '_customer_user',
'meta_value' => $user_id,
'post_type' => wc_get_order_types( 'view-orders' ),
'post_status' => array_keys( wc_get_order_statuses() ),
'orderby' => 'ID',
'order' => 'DESC' // можно не указывать так ао умолчанию
) );
$order = wc_get_order( $customer_order );
$payment_method = $orde['payment_method']; // это крайний метод оплаты
/**
* Получает экстремальнве значения ценв в категории товара
* @param $term_id - id категории товара
*
* @return mixed
*/
function wpp_get_extremes_price_in_product_cat( $term_id ) {
global $wpdb;
$sql = "
SELECT MIN( meta_value ) as min_price , MAX( meta_value ) as max_price
FROM {$wpdb->posts}
INNER JOIN {$wpdb->term_relationships} ON ({$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id)
INNER JOIN {$wpdb->postmeta} ON ({$wpdb->posts}.ID = {$wpdb->postmeta}.post_id)
WHERE
( {$wpdb->term_relationships}.term_taxonomy_id IN (%d) )
AND {$wpdb->posts}.post_type = 'product'
AND {$wpdb->posts}.post_status = 'publish'
AND {$wpdb->postmeta}.meta_key = '_price'
";
$result = $wpdb->get_results( $wpdb->prepare( $sql, $term_id ) );
return $result[ 0 ];
}
add_action( 'after_setup_theme', 'woocommerce_support' );
function woocommerce_support() {
add_theme_support( 'woocommerce' );
}
foreach ( $attributes as $attribute ) :
$values = array();
if ( $attribute->is_taxonomy() ) {
$attribute_taxonomy = $attribute->get_taxonomy_object();
$attribute_values = wc_get_product_terms( $product->get_id(), $attribute->get_name(), array( 'fields' => 'all' ) );
foreach ( $attribute_values as $attribute_value ) {
$value_name = esc_html( $attribute_value->name );
if ( $attribute_taxonomy->attribute_public ) {
$values[] = '<a href="' . esc_url( get_term_link( $attribute_value->term_id, $attribute->get_name() ) ) . '" rel="tag">' . $value_name . '</a>';
} else {
$values[] = $value_name;
}
}
} else {
$values = $attribute->get_options();
foreach ( $values as $value ) {
$value = make_clickable( esc_html( $value ) );
}
}
echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
endforeach;
// Woocommerce Widget Toggle
(function(theme, $) {
theme = theme || {};
var instanceName = '__wooWidgetToggle';
var WooWidgetToggle = function($el, opts) {
return this.initialize($el, opts);
};
WooWidgetToggle.defaults = {
};
WooWidgetToggle.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, WooWidgetToggle.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
var self = this,
$el = this.options.wrapper;
$el.parent().removeClass('closed');
if (!$el.find('.toggle').length) {
$el.append('<span class="toggle"></span>');
}
$el.find('.toggle').click(function() {
if ($el.next().is(":visible")){
$el.parent().addClass('closed');
} else {
$el.parent().removeClass('closed');
}
$el.next().stop().slideToggle(200);
theme.refreshVCContent();
});
return this;
}
};
// expose to scope
$.extend(theme, {
WooWidgetToggle: WooWidgetToggle
});
// jquery plugin
$.fn.themeWooWidgetToggle = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new theme.WooWidgetToggle($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
/**
* Для термина - product_cat
*/
add_filter( 'request', 'change_requerst_vars_for_product_cat' );
add_filter( 'term_link', 'term_link_filter', 10, 3 );
/**
* Для типа постов - product
*/
add_filter( 'post_type_link', 'wpp_remove_slug', 10, 3 );
add_action( 'pre_get_posts', 'wpp_change_request' );
function change_requerst_vars_for_product_cat($vars) {
global $wpdb;
if ( ! empty( $vars[ 'pagename' ] ) || ! empty( $vars[ 'category_name' ] ) || ! empty( $vars[ 'name' ] ) || ! empty( $vars[ 'attachment' ] ) ) {
$slug = ! empty( $vars[ 'pagename' ] ) ? $vars[ 'pagename' ] : ( ! empty( $vars[ 'name' ] ) ? $vars[ 'name' ] : ( ! empty( $vars[ 'category_name' ] ) ? $vars[ 'category_name' ] : $vars[ 'attachment' ] ) );
$exists = $wpdb->get_var( $wpdb->prepare( "SELECT t.term_id FROM $wpdb->terms t LEFT JOIN $wpdb->term_taxonomy tt ON tt.term_id = t.term_id WHERE tt.taxonomy = 'product_cat' AND t.slug = %s", array( $slug ) ) );
if ( $exists ) {
$old_vars = $vars;
$vars = array( 'product_cat' => $slug );
if ( ! empty( $old_vars[ 'paged' ] ) || ! empty( $old_vars[ 'page' ] ) ) {
$vars[ 'paged' ] = ! empty( $old_vars[ 'paged' ] ) ? $old_vars[ 'paged' ] : $old_vars[ 'page' ];
}
if ( ! empty( $old_vars[ 'orderby' ] ) ) {
$vars[ 'orderby' ] = $old_vars[ 'orderby' ];
}
if ( ! empty( $old_vars[ 'order' ] ) ) {
$vars[ 'order' ] = $old_vars[ 'order' ];
}
}
}
return $vars;
}
function term_link_filter( $url, $term, $taxonomy ) {
$url = str_replace( "/product-category/", "/", $url );
return $url;
}
function wpp_remove_slug( $post_link, $post, $name ) {
if ( 'product' != $post->post_type || 'publish' != $post->post_status ) {
return $post_link;
}
$post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );
return $post_link;
}
function wpp_change_request( $query ) {
if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query[ 'page' ] ) ) {
return;
}
if ( ! empty( $query->query[ 'name' ] ) ) {
$query->set( 'post_type', array( 'post', 'product', 'page' ) );
}
}