Управлять stock_quantity перед выводом @ WooCommerce Product edit Page - PullRequest
0 голосов
/ 02 июня 2019

Я создал новый плагин для WooCommerce, предоставляющий API для синхронизации внешних данных продукта от поставщика. Весь набор данных составляет около 140 000 строк. Лично для меня важно поддерживать чистоту базы данных, поэтому я решил хранить все эти данные в 3 разных таблицах. Впрыскивание количества в таблицу внешнего и внутреннего списков работает нормально, на странице редактирования продукта, на вкладке инвентаря это не работает!

image edit page">

// Количество впрыскивания на странице редактирования продукта

Внедрение количества продукта из одной из трех таблиц с данными о поставщике хорошо работает во внешнем интерфейсе и таблицах списков при перехвате внутреннего ... ... 1010 *

add_filter( 'woocommerce_product_get_stock_quantity','inject_quantity', 10, 2 );

перехватывает данные из базы данных и возвращает их с помощью этой функции

function inject_quantity($value,$product) {
  $new_value = '5';
  return $new_value;
}

Как уже упоминалось ранее, это хорошо работает в веб-интерфейсе и бэк-энде в таблице списка или при быстром редактировании.

Дальнейший взгляд на woocommerce / includes / admin / meta-box / views / html-product-data-inventory.php

   woocommerce_wp_text_input(
    array(
        'id'                => '_stock',
        'value'             => wc_stock_amount( $product_object->get_stock_quantity( 'edit' ) ),
        'label'             => __( 'Stock quantity', 'woocommerce' ),
        'desc_tip'          => true,
        'description'       => __( 'Stock quantity. If this is a variable product this value will be used to control stock for all variations, unless you define stock at variation level.', 'woocommerce' ),
        'type'              => 'number',
        'custom_attributes' => array('step' => 'any',),
        'data_type'         => 'stock',
        )
    ); 

Значение в поле ввода указывается ..

$product_object->get_stock_quantity( 'edit' );

Эта функция, которую мы подключили ранее, находится в class WC_Product -> WooCommerce / Abstracts предоставляет количество для $context = 'view'

  /**
     * Returns number of items available for sale.
     *
     * @param  string $context What the value is for. Valid values are view and edit.
     * @return int|null
     */
    public function get_stock_quantity( $context = 'view' ) {
        return $this->get_prop( 'stock_quantity', $context );
    }

https://docs.woocommerce.com/wc-apidocs/source-class-WC_Product.html#354-362

следуя корням, на которых я остановился class WC_DATA

  /**
     * Prefix for action and filter hooks on data.
     *
     * @since  3.0.0
     * @return string
     */
    protected function get_hook_prefix() {
        return 'woocommerce_' . $this->object_type . '_get_';
    }

    /**
     * Gets a prop for a getter method.
     *
     * Gets the value from either current pending changes, or the data itself.
     * Context controls what happens to the value before it's returned.
     *
     * @since  3.0.0
     * @param  string $prop Name of prop to get.
     * @param  string $context What the value is for. Valid values are view and edit.
     * @return mixed
     */
    protected function get_prop( $prop, $context = 'view' ) {
        $value = null;

        if ( array_key_exists( $prop, $this->data ) ) {
            $value = array_key_exists( $prop, $this->changes ) ? $this->changes[ $prop ] : $this->data[ $prop ];

            if ( 'view' === $context ) {
                $value = apply_filters( $this->get_hook_prefix() . $prop, $value, $this );
            }
        }

        return $value;
    }

https://docs.woocommerce.com/wc-apidocs/source-class-WC_Data.html#717-740

// Нет способа подключиться к $ context = 'edit'?

Похоже, что нет никакого способа подключить $context = 'edit' и сбросить значение в поле ввода на вкладке инвентаризации страницы редактирования продукта?

Может быть, есть другой способ, например. на запрос продукта сам вводит количество?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...