Можно ли расширить конечную точку отдыха продуктов woocommerce? - PullRequest
5 голосов
/ 20 сентября 2019

Есть ли способ расширить продукт-объект в woocommerce rest api /wp-json/wc/v3/products неразрушающим способом, чтобы плагины, использующие эту конечную точку, не ломались.

в настоящее время пытался создать свою собственную конечную точку покоя для репликации объекта, но сейчас отсутствует много данных.

Я также пробовал что-то подобное, но, похоже, это не сработало.

add_filter( 'woocommerce_rest_prepare_product', 'wc_rest_api_add_custom_data_to_product', 90, 2 );
function wc_rest_api_add_custom_data_to_product( $response, $post ) {

  // retrieve a custom field and add it to API response
  $response->data['your_new_key'] = get_post_meta( $post->ID, '_your_custom_filed_key', true );

  return $response;

}

Источник: https://francescocarlucci.com/woocommerce/woocommerce-api-custom-data-default-endpoints/

Любая помощь в этом отношении будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Я нашел способ расширения конечной точки с помощью register_rest_field.

Таким образом, я могу как расширить (добавить), так и / или перезаписать (обновить) объект.

function register_images_field() {
        register_rest_field(
            'product',
            'images',
            array(
                'get_callback'    => function ( $object ) {
                    $medium_large     = wp_get_attachment_image_src( get_post_thumbnail_id( $object['id'] ), 'medium_large' );
                    $medium_large_url = $medium_large['0'];
                    $large            = wp_get_attachment_image_src( get_post_thumbnail_id( $object['id'] ), 'large' );
                    $large_url        = $large['0'];
​
                    return array(
                        'medium_large' => $medium_large_url,
                        'large'        => $large_url,
                    );
                },
                'update_callback' => null,
                'schema'          => null,
            )
        );
    }

Источник:https://developer.wordpress.org/reference/functions/register_rest_field/

1 голос
/ 23 сентября 2019

Вот способ изменить цены.Может быть, вы можете использовать тот же процесс?

## The following goes inside the constructor ##

// Simple, grouped and external products
add_filter('woocommerce_product_get_price', array( $this, 'custom_price' ), 99, 2 );
add_filter('woocommerce_product_get_regular_price', array( $this, 'custom_price' ), 99, 2 );
// Variations 
add_filter('woocommerce_product_variation_get_regular_price', array( $this, 'custom_price' ), 99, 2 );
add_filter('woocommerce_product_variation_get_price', array( $this, 'custom_price' ), 99, 2 );

// Variable (price range)
add_filter('woocommerce_variation_prices_price', array( $this, 'custom_variable_price' ), 99, 3 );
add_filter('woocommerce_variation_prices_regular_price', array( $this, 'custom_variable_price' ), 99, 3 );

// Handling price caching (see explanations at the end)
add_filter( 'woocommerce_get_variation_prices_hash', array( $this, 'add_price_multiplier_to_variation_prices_hash' ), 99, 1 );


## This goes outside the constructor ##

// Utility function to change the prices with a multiplier (number)
public function get_price_multiplier() {
    return 2; // x2 for testing
}

public function custom_price( $price, $product ) {
    return $price * get_price_multiplier();
}

public function custom_variable_price( $price, $variation, $product ) {
    return $price * get_price_multiplier();
}

public function add_price_multiplier_to_variation_prices_hash( $hash ) {
    $hash[] = get_price_multiplier();
    return $hash;
}

Источник: Измените цены на продукты через хук в WooCommerce 3

...