false, 'query_var' => true, 'rewrite' => false, 'public' => false, 'capabilities' => array( 'manage_terms' => 'manage_wiaas_package_price_terms', 'edit_terms' => 'edit_wiaas_package_price_terms', 'delete_terms' => 'delete_wiaas_package_price_terms', 'assign_terms' => 'assign_wiaas_package_price_terms', ), ); register_taxonomy( '_wiaas_shop_prices', array( 'product' ), $args ); } /** * Relate pricing search terms to package so customer can retrieve packages with default or * their own specific prices. * (ex: Package which will be hidden fro Customer 1 because default price * is hidden can be visible for Customer 2 because specific prices are set for that customer) * * @param int $owner_id * @param int $package_id * @param array $cl_extras { * $extra_price_payment_type => { * @type bool visible Indicates if payment type is visible to customer * } * } * @param array $old_cl_extras { * $extra_price_payment_type => { * @type bool visible Indicates if payment type is visible to customer * } * } */ public static function update_package_prices_search_terms($owner_id, $package_id, $cl_extras, $old_cl_extras) { // remove pricing terms for previous prices if (! empty($old_cl_extras)) { $old_terms = self::_get_search_terms_from_cl_extras($owner_id, $old_cl_extras); wp_remove_object_terms($package_id, $old_terms, '_wiaas_shop_prices'); } $new_terms = self::_get_search_terms_from_cl_extras($owner_id, $cl_extras); // create term for every visible pricing type and link them to package so package can be queried wp_add_object_terms($package_id, $new_terms, '_wiaas_shop_prices'); } // PRIVATE /** * Generate search terms from cl extras * * For default prices search term * `_{owner_id}_default` will be generated if all set prices are visible * * For every customer entry search term * `_{owner_id}_customer_{customer_id}_visible` will be generated if any of the prices is visible or * `_{owner_id}_customer_{customer_id}_hidden` if all prices are hidden` * * @param int $owner_id * @param array $cl_extras * * @return array */ private static function _get_search_terms_from_cl_extras($owner_id, $cl_extras) { // determine if extras are visible grouped by customer and default settings $cl_extras_per_customer = array(); $cl_extra_default = false; foreach ($cl_extras as $cl_extra_type => $cl_extra) { // is default if (strpos($cl_extra_type, '_default') !== false) { // determine if default cl extra is visible $cl_extra_default = $cl_extra_default || $cl_extra['visible']; } // is customer specific if (strpos($cl_extra_type, '_customer_') !== false) { $customer_id = absint(explode('_customer_', $cl_extra_type)[1]); // determine if customer cl extra is visible $cl_extras_per_customer[$customer_id] = $cl_extras_per_customer[$customer_id] || $cl_extra['visible']; } } $terms = array(); if ($cl_extra_default) { $terms[] = '_' . $owner_id . '_default'; } foreach ($cl_extras_per_customer as $customer_id => $visible) { $terms[] = '_' . $owner_id . '_customer_' . $customer_id . '_' . ($visible ? 'visible' : 'hidden'); } return $terms; } } Wiaas_Shop::init();