4

文档非常稀缺。我正在尝试创建一些使用 WooCommerce 订阅(WooCommerce 插件)API 的代码来获取订阅列表和每个订阅的所有详细信息。那里的文档和示例是如此稀缺和薄弱,我无法做到正确。以下代码没有产生任何错误,但没有输出任何订阅(只是一个空白页)。如何列出所有订阅的所有详细信息?

<?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

2 回答 2

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";
}
于 2014-10-08T01:55:36.707 回答
2

借助@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";
    }
}
于 2014-10-14T14:44:21.417 回答