php - 如何从移动后端获取 wordpress woocommerce 的到期日期?
问题描述
我有 wordpress woocommerce 网站。我正在尝试从该站点获取移动后端的数据。当用户通过后端登录时,我想使用我的后端从站点获取到期日期。但是我遇到了错误。
我想知道的是,为了运行 wc_memberships_get_user_memberships() 函数,我应该包含哪些 woocommerce 文件。
这是我的后端源代码。
<?php
// required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
// include database and object files
include_once 'db_connect.php';
include_once '../wp-content/plugins/woocommerce/includes/class_woocommerce.php';
include_once '../wp-content/plugins/woocommerce-memberships/woocommerce-memberships.php';
include_once '../wp-content/plugins/woocommerce-memberships/includes/functions/wc-memberships-functions-user-memberships.php';
class FetchData {
public function logIn() {
if( isset($_POST['user_name']) && isset($_POST['password']) ){
$password = $_POST['password'];
$sql = "SELECT * FROM `wprl_users` WHERE `user_email` = '".$_POST['user_name']."' limit 1";
$query = mysqli_query(DBOpen(), $sql);
$user_info = mysqli_fetch_assoc($query);
if (count($user_info) > 0) {
require_once( '../wp-includes/class-phpass.php' );
$hasher = new PasswordHash(8, TRUE);
$pass_match = $hasher->CheckPassword( $password, $user_info['user_pass'] );
if($pass_match == TRUE) {
// Get memberships for the current user.
$memberships = wc_memberships_get_user_memberships($user_info['ID']);
// Verify that they have some memberships.
if ( $memberships ) {
foreach( $memberships as $memberships ) {
// Print the expiration date in mysql format.
$end_date = $membership->get_end_date();
}
}
echo json_encode(array('result'=>'success', 'member_name'=>$user_info['display_name'], 'member_num'=>
$user_info['ID'], 'expiry_date'=>$end_date));
}
else {
echo json_encode(array('result'=>'failed', 'message'=>'User name or password incorrect!'));
}
}
else {
echo json_encode(array('result'=>'failed', 'message'=>'User name or password incorrect!'));
}
}
else {
echo json_encode(array('result'=>'failed', 'message'=>'Wrong parameter'));
}
}
}
$option = new Fetchdata();
$options = (isset($_POST['options'])) ? $_POST['options'] : 1;
switch ($options){
case "login":
$option->logIn();
break;
}
?>
解决方案
Wordpress 有某种方式来引导他们的代码、连接到数据库、初始化插件等。你这样做的方式是,你尝试手动包含这些文件,即使你是手动使用 check pass。有https://codex.wordpress.org/Function_Reference/wp_check_password
本身。所以你所做的有点不遵循他们的模式。如果你真的想这样做,你可以从 /index.php 回溯引导代码
但是,对您来说最好的解决方案是您应该创建一个 wordpress 插件。您可以按照本指南 https://codex.wordpress.org/Writing_a_Plugin
或者https://www.smashingmagazine.com/2011/09/how-to-create-a-wordpress-plugin/
或者您可以尝试使用这样的框架:
https://framework.themosis.com
推荐阅读
- angular - 选择动画不适用于 Angular (7) 材质选项卡
- mongo-cxx-driver - 如何通过mongocxx比较mongodb中的“_id”?
- java - 如何使用opencv在代理后面捕获视频
- android - Kivy:在android上播放声音,没有延迟
- java - 在 SOAPUI 工具的密钥库中找不到私钥
- highcharts - highchart tooltip hover - 在繁忙的图表上,工具提示在点之间跳转
- c# - 为单个控件定制 Mahapps.Metro CustomValidationPopup 的样式(不适用于整个应用程序/窗口)
- php - 自定义 ocmod 修改在 opencart 版本 3.0.2.0 中不起作用
- java - Apache Nifi 属性描述符的动态修改类路径()的 Hello World 程序不起作用
- java - 如何在 SpringBoot WebFlux 中使用 GET 请求注销