Когда я добавил этот $product->get_id(), у меня появился HTTP Error 500
и получил это сообщение в журнале ошибок:
[13-Mar-2018 08:47:07 UTC] PHP Fatal error: Call to a member function get_id() on null in /home/healthnwellness/public_html/wp-content/themes/betheme-child/functions.php on line 926
Моя функция находится в functions.php:
//Function return price (commission based) as per their purchase count
function return_custom_price($price, $product) {
global $product;
$current_user = wp_get_current_user();
$count_purchase = wc_product_sold_count();
if ( wc_customer_bought_product( $current_user->user_email, $current_user->ID, $product->get_id() ) )
{
if ($count_purchase == 1){
$price = get_post_meta( $product->get_id(), '_comm_1_kit');
$post_id = $product->get_id();
$price = ($price[0]);
return $price;
}
elseif ($count_purchase == 2){
$price = get_post_meta( $product->get_id(), '_comm_2_kit');
$post_id = $product->get_id();
$price = ($price[0]);
return $price;
}
elseif ($count_purchase >= 3){
$price = get_post_meta($product->get_id(), '_comm_3_kit');
$post_id = $product->get_id();
$price = ($price[0]);
return $price;
}
}
else
{
$price = get_post_meta($product->get_id(), '_discounted_price');
$post_id = $product->get_id();
$price = ($price[0]);
return $price;
}
}
Как я могу решить эту ошибку? что я делаю не так?
Любая помощь приветствуется.
Примечание. Функция wc_product_sold_count() имеет значение из этого ответа и была изменена, чтобы возвращать только счетчик.






$product->get_id() = $_SESSION["iddd"];
Это ошибочное задание. get_id() возвращает int, и вы пытаетесь установить его с другим значением.
Теперь он также появляется перед global $product;, поэтому он будет нулевым.
Вы можете разместить свой крючок return_custom_price? потому что $ product не передается в эту функцию или имеет значение null
'add_filter (' woocommerce_get_price ',' return_custom_price ', 10, 2);' вот крючок
@Mukhyyar, что произойдет, если вы удалите global $product?, я не думаю, что это здесь, так как procuct передается в качестве аргумента
В вашем коде есть некоторые недостающие части и много ошибок.
Вам нужно ласо внести изменения в функцию немного wc_product_sold_count()из этого ответа.
Так что попробуйте вместо этого:
function wc_product_sold_count_for_user( $product, $user_id ) {
global $wpdb;
$product_id = $product->get_id(); // Current Product ID
// The SQL request
return $wpdb->get_var( "
SELECT SUM(woim2.meta_value)
FROM {$wpdb->prefix}woocommerce_order_items AS woi
INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta woim ON woi.order_item_id = woim.order_item_id
INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta woim2 ON woi.order_item_id = woim2.order_item_id
INNER JOIN {$wpdb->prefix}postmeta pm ON woi.order_id = pm.post_id
INNER JOIN {$wpdb->prefix}posts AS p ON woi.order_id = p.ID
WHERE woi.order_item_type LIKE 'line_item'
AND p.post_type LIKE 'shop_order'
AND p.post_status IN ('wc-completed','wc-processing')
AND pm.meta_key = '_customer_user'
AND pm.meta_value = '$user_id'
AND woim.meta_key = '_product_id'
AND woim.meta_value = '$product_id'
AND woim2.meta_key = '_qty'
");
}
//Function return price (commission based) as per their purchase count
add_filter('woocommerce_product_get_price','return_custom_price', 10, 2);
function return_custom_price( $price, $product ) {
// If user is not logged in return the default price
if ( ! is_user_logged_in() ) return $price;
$customer = wp_get_current_user();
$count_purchase = wc_product_sold_count_for_user( $product, $customer->ID );
if ( wc_customer_bought_product( $customer->user_email, $customer->ID, $product->get_id() ) ){
if ( $count_purchase == 1 )
$price = get_post_meta( $product->get_id(), '_comm_1_kit', true );
elseif ( $count_purchase == 2 )
$price = get_post_meta( $product->get_id(), '_comm_2_kit', true );
elseif ( $count_purchase >= 3 )
$price = get_post_meta($product->get_id(), '_comm_3_kit', true );
} else {
$price = get_post_meta($product->get_id(), '_discounted_price', true );
}
return $price;
}
Этот код находится в файле function.php вашей активной дочерней темы (или темы). Проверено и работает.
Я удалил это, как сейчас, пожалуйста, просмотрите и решите, спасибо