Восстановление WooCommerce Скачать Разрешения на старые заказы - PullRequest
0 голосов
/ 30 ноября 2018

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

function update_download_permissions(){

  $orders = get_posts( array(
    'post_type'      => 'shop_order',
    'post_status'    => 'wc-completed',
    'posts_per_page' => -1
  ) );

  foreach ( $orders as $order ) {
    wc_downloadable_product_permissions( $order->ID, true );
  }

}

Проблема в том, что функция wc_downloadable_product_permissions создает дублирующиеся записи в таблице wp_woocommerce_downloadable_product_permissions.

Я пытался установить для второго аргумента значение false (по умолчанию), но этов результате не было создано никаких разрешений.

Кто-нибудь имеет какие-либо идеи относительно того, почему устанавливаются дублирующие разрешения на загрузку?

Приветствия!

1 Ответ

0 голосов
/ 18 декабря 2018

Я наткнулся на ваш вопрос после того, как покопался в некотором исходном коде WooCommerce, пытаясь добавить элемент в существующий заказ и затем восстановить права доступа.

Причина wc_downloadable_product_permissions() создаст дублирующиеся записи разрешенийпотому что он не проверяет какие-либо существующие разрешения.Он просто вставляет другую запись в таблицу разрешений для каждого элемента в заказе, что не годится, потому что это затем будет отображаться как еще одна загрузка как в интерфейсе администратора, так и в пользовательском аккаунте.

Второй параметр force(плохо документировано), связано с логическим флагом, который указывает, выполнялся ли wc_downloadable_product_permissions() ранее.Логическое значение устанавливается в true в конце функции с помощью метода set_download_permissions_granted.Если force истинно, он будет игнорировать логическое значение.Если force равно false, а логическое значение true, функция вернется в начале.

Я создал эту функцию, которая использует те же функции, что и действие администратора Порядок «Восстановить разрешения на загрузку»:

/**
 * Regenerate the WooCommerce download permissions for an order
 * @param  Integer $order_id
 */
function regen_woo_downloadable_product_permissions( $order_id ){

    // Remove all existing download permissions for this order.
    // This uses the same code as the "regenerate download permissions" action in the WP admin (https://github.com/woocommerce/woocommerce/blob/3.5.2/includes/admin/meta-boxes/class-wc-meta-box-order-actions.php#L129-L131)
    // An instance of the download's Data Store (WC_Customer_Download_Data_Store) is created and
    // uses its method to delete a download permission from the database by order ID.
    $data_store = WC_Data_Store::load( 'customer-download' );
    $data_store->delete_by_order_id( $order_id );

    // Run WooCommerce's built in function to create the permissions for an order (https://docs.woocommerce.com/wc-apidocs/function-wc_downloadable_product_permissions.html)
    // Setting the second "force" argument to true makes sure that this ignores the fact that permissions
    // have already been generated on the order.
    wc_downloadable_product_permissions( $order_id, true );

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