Получить список Webhooks от Woocommerce - PullRequest
0 голосов
/ 04 октября 2018

Я создал плагин для Wordpress, который, помимо прочего, создает несколько Woocommerce Webhooks после активации.Это делается с использованием внутренних классов API и функций, как показано ниже:

function createWebhook($userID,$topic,$secret,$deliveryURL,$status)
{
    $webhook = new WC_Webhook();
    $webhook->set_user_id($userID); // User ID used while generating the webhook payload.
    $webhook->set_topic( $topic ); // Event used to trigger a webhook.
    $webhook->set_secret( $secret ); // Secret to validate webhook when received.
    $webhook->set_delivery_url( $deliveryURL ); // URL where webhook should be sent.
    $webhook->set_status( $status ); // Webhook status.
    $save = $webhook->save();
    return $save;
}

Это хорошо работает.

Что я хочу сделать, это удалить эти веб-хуки после деактивации плагина,Есть ли какой-нибудь способ получить Woocommerce Webhooks через внутренний Wordpress или Woocommerce API, чтобы я мог просмотреть и удалить соответствующие?

Я бы просто удалил все Webhooks, где URL-адрес доставки имеет домен xyz.ком.Эта часть проста, я просто не знаю, как получить Webhooks.

Я не хочу использовать внешний API Woocommerce, для которого требуется ключ API и HTTP-запросы.

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вы можете получить массив всех идентификаторов webhook со следующими данными:

$data_store = WC_Data_Store::load( 'webhook' );
$webhooks   = $data_store->search_webhooks();

Вот что делает WooCommerce при построении списка таблиц:

https://github.com/woocommerce/woocommerce/blob/master/includes/admin/class-wc-admin-webhooks-table-list.php

0 голосов
/ 05 октября 2018

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

    global $wpdb;
    $results = $wpdb->get_results( "SELECT webhook_id, delivery_url FROM {$wpdb->prefix}wc_webhooks" );
    foreach($results as $result)
    {
        if(strpos($result->delivery_url, 'domain.com') !== false)
        {
            $wh = new WC_Webhook();
            $wh->set_id($result->webhook_id);
            $wh->delete();
        }
    }
...