来自外部php的Woocommerce订阅访问

时间:2017-12-12 07:57:38

标签: php wordpress woocommerce subscription

我有一个带有Woocommerce和Woocommerce订阅插件的Wordpress网站。

我需要编写一些PHP脚本来检查用户是否具有有效的订阅状态。

从数据库中,我想获取信息:用户ID,状态(如果它已激活 - 如果付款并且订阅已续订),订阅的结束日期......

问题是我甚至不知道订阅信息的保存位置?

有人可以给我写一个代码片段,其中包含一个查询,它会给我一份订阅的用户列表,以及前面提到的必要信息吗?

我稍后会发布一个包含代码的更新,现在,我只需要查询和指导数据库表中的搜索帮助。

3 个答案:

答案 0 :(得分:0)

我认为您的意思是想要从Wordpress安装中的PHP文件访问Wordpress / Woocommerce订阅API。要做到这一点,我认为以下内容将有所帮助:

  1. 在wp-content / plugins中创建一个名为woocommerce-subscriptions-status-checker的文件夹

  2. 在上面的新文件夹中创建一个名为woocommerce-subscriptions-status-checker.php的文件。

  3. 将此代码添加到文件中:

  4. /* 
    Plugin Name: Woocommerce Subscriptions Status Checker
    Plugin URI: http://www.XXXXXX.com
    Description: XXXXXXXXX
    Author: XXXXXX
    Version: 2.0 
    Author URI: http://www.XXXXX.com
    */
    
    if ( ! defined( 'ABSPATH' ) ) {
      exit;
    }
    
    class WC_Subscriptions_Status_Checker {
    
      function __construct() {
    
        // Avoids the function firing if we are in wp-admin backend
        if ( !is_admin() ) {
          // Fires on every page load after WordPress, all plugins, and the theme are fully loaded and instantiated
          add_action( 'wp-loaded', array( $this, 'check_current_user' ) );
        }
      }
    
    
      function check_current_user() {
    
        // Check if user is even logged in, if not exit
        if ( !is_user_logged_in() ) return;
    
        $current_user   = wp_get_current_user(); // get current WP_User
        $user_id    = $current_user->ID; // get user id
    
        $is_subscription = wcs_user_has_subscription( $user_id ); // check if user has subscription
        if ( $is_subscription )
        {
          $subscriptions = wcs_get_users_subscriptions( $user_id ); // get array of all subscriptions
    
          // Check if there is one subscription or multiple subscriptions per user
          if ( count( $subscriptions ) > 1 ) {
    
            // Example if you wanted to loop through all subscriptions, in the case of the user having multiple subscriptions
            foreach ( $subscriptions as $sub_id => $subscription ) {
              if ( $subscription->get_status() == 'active' ) {
                // Do something
              }
            }
          } else { // Only 1 subscription
    
            $subscription  = reset( $subscriptions ); // gets first and only value
            if ( $subscription->get_status() == 'active' ) {
                // Do something
              }
          }
        }
    
      }
    }
    new WC_Subscriptions_Status_Checker();
    

    访问wp-admin的插件部分并激活您的新插件。

答案 1 :(得分:0)

您可以尝试使用Woocommerce REST API。

https://docs.woocommerce.com/document/woocommerce-rest-api/

基本上,Woocommerce提供了一个安静的API来访问数据并与传统的woocommerce工作流程之外的电子商务系统进行交互。

答案 2 :(得分:0)

这是我的解决方案(不是说它是最好的,但对我来说,它解决了我遇到的问题)。

function.php中的代码(WP子主题)

add_action('init','getWPuser');
function getWPuser(){
$current_user = wp_get_current_user();
return $current_user;
}

自定义网站

我的自定义网站中需要有关用户信息的代码。

require_once '../wp-load.php';
require_once '../wp-content/themes/h-code-child/functions.php';
require_once '../wp-includes/pluggable.php';
require_once '../wp-blog-header.php';
$current_user = getWPuser();

保存用户ID信息。

$logged_user_id = $current_user->ID;

检查特定订阅是否为活动

$has_free = wcs_user_has_subscription( $logged_user_id, $product_id, 'active' );