WordPress — Как я могу правильно использовать API подписок WooCommerce в PHP?

Документация очень скудная. Я пытаюсь создать некоторый код, который использует API подписки WooCommerce (плагин для WooCommerce), чтобы получить список подписок и все детали каждой подписки. Документы и примеры там настолько скудны и слабы, что я не могу понять это правильно. Следующий код не выдает никаких ошибок, но не выводит никаких подписок (только пустая страница). Как я могу перечислить все детали всех подписок?

<?php

if(isset($_REQUEST['Action']))
{
$Action = $_REQUEST['Action'];
switch($Action)
{
case "ValidateSubscription":
chdir("../wp-content/plugins/woocommerce-subscriptions/classes");
include '../../woocommerce/woocommerce.php';
//include '../woo-includes/woo-functions.php';
//include '../woo-includes/class-wc-dependencies.php';
include 'class-wc-subscriptions-manager.php';

$Subscriptions = WC_Subscriptions_Manager::get_all_users_subscriptions();
print_r($Subscriptions);
break;
default:
echo "invalid action";
}
}else
{
echo "no action specified";
}

4

Решение

Это не то, как вы включаете функции WordPress во внешний код. Попробуй это.

if(isset($_REQUEST['Action']))
{
$Action = $_REQUEST['Action'];
switch($Action)
{
case "ValidateSubscription":

include('../wp-load.php'); //Guessing this path based on your code sample... should be wp root

$Subscriptions = WC_Subscriptions_Manager::get_all_users_subscriptions();
print_r($Subscriptions);
break;
default:
echo "invalid action";
}
}else
{
echo "no action specified";
}
4

Другие решения

В ответ на ответ @ ChuckMac, я думаю, что это может быть улучшено, если уважать WordPress API плагинов и зная, в какой момент различные части WordPress работают и работают. Практически все WP загружены init крюк, так что это безопасное место для запуска функций, которые «слушают» для $_REQUEST переменная. Вы можете быть в состоянии сойти с рук plugins_loaded в зависимости от вашего варианта использования.

add_action( 'init', 'so_26193801_event_listener' );

function so_26193801_event_listener(){

if(isset($_REQUEST['Action'])){
$Action = $_REQUEST['Action'];
switch($Action){
case "ValidateSubscription":

$Subscriptions = WC_Subscriptions_Manager::get_all_users_subscriptions();
print_r($Subscriptions);
break;
default:
echo "invalid action";
}
} else {
echo "no action specified";
}
}
2

По вопросам рекламы [email protected]