WordPress -- WooCommerce的3个常用操作

1,015 阅读7分钟

这是我参与8月更文挑战的第26天,活动详情查看:8月更文挑战

前言

首先开发使用的是其中之一的woocommerce。其实相当于是二次开发,本人也是第一次上手。所以就对其中的三个操作比较印象深刻。然后就此记录分享一哈。也算是个新手的总结吧,大佬们多多担待,有错可以直接弄我,哈哈哈。

注:以下是基于个人的项目,可能每个人的项目不同其中的使用方式也有不同

通用api文档:developer.wordpress.org/apis/

do_action

1、do_action()函数声明(定义)作用 do_action()函数是WordPress的内部函数,作用是创建一个行为钩子,它没有返回值,单纯的就是在特定的地方执行插件或者主题开发者挂载的函数,一般存在于某个特殊的节点或者事件上(比如开始加载主题模板的时候或者发布一篇文章的时候),该函数让wordpress变得更加强大,扩展性更加好。例如wp_head()函数中只有一句代码就是:do_action( ‘wp_head’ ),他的意思就是执行挂载到wp_head这个动作钩子上的所有函数。

do_action($tag, $arg); 
// $tag是必须的,为我们创建的动作名称; 
// $arg为我们要执行的"动作";

2、do_action()参数 这个函数可以包含两个或者多个变量,但是第一个$tag变量(动作钩子)是必须的,而且这个函数不会返回值。 $tag (字符串)(必须)要执行的动作的名字。 $arg (混合)(可选)额外的参数,会被传到调用的函数里,可以添加无限个,比如保存文章的时候触发 save_post 动作,就可以把保存的文章的 id 穿进去,让回调函数根据文章 id 进行操作

应用示例:

//先定义echo_meta,输出内容 
function echo_meta(){ 
    echo '<meta name="description" content="511遇见-不一样的遇见" />'; 
    //然后将echo_meta挂载到wp_meta上 
    add_action('wp_meta','echo_meta'); 
} 

// 然后我们去执行wp_meta 
function wp_meta() { 
    do_action('wp_meta'); 
}

do_action 的流程

hooks.php 定义add_action --> template-functions 定义前者的第二个参数的函数 / wc_get_template 指定页面的模板--> 指定模板做事情(渲染/跳转)

页面

1.获得 page ID :

$cart_page_id = wc_get_page_id( 'cart' );

2.得到 page URL (permalink) :

// get_permalink('页面id')

$cart_url = wc_get_page_permalink( 'cart' ); 
// 不存在则 return the home URL. 

网址:参考 www.skyverge.com/blog/get-wo…

3.$checkout_url

$woocommerce->cart->get_checkout_url();

$checkout_url这个记得当时是用在了返回的跳转路径,就是在wordpress购物车中点击按钮跳转外部链接然后重定向回订单结算页面。

3.获取当前页面的url :

$current_url = home_url(add_query_arg(array())); // (原生函数) 
$current_url = home_url(add_query_arg(array(),$wp->request));  // (普遍适用的方法)

$url = home_url();
echo $url;
//输出: http://www.xxx.com

注意:home_url() 函数检索站点的主页url,可能会得不到想要的路径,而返回的是主页的url。

4.获取路径参数的值(已知字段):xxx.com?cat=1

  1. 使用 $_GET['cart']

  2. 使用 get_query_var('cart')

5.is_page()函数是WordPress的页面判断函数之一,用来判断当前页面是否是页面页。

is_page(     wc_get_page_id( 'checkout' ) )

6.isset() 判断变量是否声明

isset( $_GET['c'] 

7.后台地址:返回后台地址,传递参数后也可返回后台menu的地址

$url = admin_url();
echo $url;

//输出:http://www.xxx.com/wp-admin/

获取自定义字段

一、the_meta() 模板标记,该标记自动列出帖子的所有自定义字段

二、

1、get_post_custom() 根据帖子ID检索帖子元字段

  • 参数:$post_id ==> 默认值为全局$post的ID

★ 2、get_post_meta($post_id, $key, $single) 检索帖子的一个或所有元数据

  • 参数一: $post_id ==> POST ID

  • 参数二: $key ==> 自定义字段 , 默认值是 "" , 返回所有键(字段)的数据

  • 参数三: $single ==> 是否返回单个值,未指定则无效

get_post_meta($post->ID, "description", true) ==> 获取description字段的值

get_post_custom_value() 检索自定义帖子字段的值

获取元数据: get_post_meta() / get_metadata() 如果参数字段不存在,取决于get_metadata_default() 为true返回空字符串,为false返回空数组

add_post_meta($post_id, $key, $value, $unique) // 添加一个自定义栏目 
/*
    $post_id 要添加自定义字段的文章或页面的ID值 
    $key 自定义栏目的名称) 
    $value 自定义字段的值 
    $unique 如果已经有相同名字的自定义字段,是否重复添加重名的自定义字段,true为不允许,false为允许 
*/

update_post_meta($post_id, $meta_key, $meta_value) // 更新和建立指定文章的自定义栏目 
/*
    $post_id – 要更新(添加)自定义字段的文章或页面的ID值 
    $meta_key – 自定义字段的键值(名字) 
    $meta_value – 自定义字段的值 
    $prev_value – 批量替换时用的参数 
*/

get_post_meta($post->ID, $key, $single) // 获取指定日志的指定key的自定义字段 
/*
    $post->ID (整数)要添加自定义栏目文章的ID 
    $key (字符串) 必须是此自定义栏目的名称 
    $single (布尔型) (可选) 如果设为true, 则返回单个的自定义栏目的值。如果设为false, 则返回一个数组字符串型,即多个自定义栏目的值。(mixed)
*/

WooCommerce REST API

至于为什么要看这个呢?

当时有一个想法就是能不能不用原本的woocommerce,改成Vue或者React。因为原本woocommerce的主题我们是很难改的,页面布局限制很大。如果改成框架,我们直接重写掉,这样一来我们对布局样式的一些可控性好很多。 当时翻了两天的wordpress和woocommerce文档,做了一个小总结,感觉还是这人想法行不通。因为人家就是一个插件,给你开箱即用的感觉,自然内部的一些API是没有完全开源的呃。所以总结了一小下。为了好做一个汇报工作,所以都是文字总结。

1、首页banner跳转所有产品页
2、woocommerce REST API
3、woocommerce 集成 vue demo 
4、WooCommerce REST API允许您使用HTTP请求创建,读取,更新和删除WooCommerce数据,因此您可以将外部应用程序与WooCommerce集成,并构建使用异步UI框架(如React)的扩展。 允许使用http请求创建,读取,更新和删除woocommer数据 
5、woocommerce --> 设置 --> 高级 --> REST API(允许外部应用程序查看和管理商店数据,仅限有效API密钥的应用程序授予) 
6、顾客 / 订单:创建,检索,更新,删除
7、退款:退款API允许您创建,查看和删除单个退款。 属性:api_refund:布尔值 --> 如果为true,则使用付款网关API生成退款。默认值为true。(不能控制?那恶意退款怎么办勒)
8、退款网关(api)怎么连接起来,后台怎么看退款消息订单记录等 
9、产品: (1)产品展示 (2)产品变化 (310、感觉api不全(购物车逻辑,api不全,那怎么跟后台的那些库存数量什么的相关联呢?) 
11、支付网关:(允许查看和更新各个付款网关)但是也不能控制呀?,得进行集成
12、购物车(cart):REST API 没有对cart的支持,只在内部api存在(php操作实现的)
13、WordPress --> REST API (跟woocommerce的不一样)
1、翻阅 REAT API 与后台的关联 后台新建apikey,开始 REST API 服务
2、WordPress REAT API 和 woocommerce REST API 的区别 WordPress:内部api,并不能集成其他异步UI库(插件为WordPress服务,php操作)(v2版本) woocommerce:本身是个插件api, 是可以集成
3、下载实例demo (接口是v1版本的,目前的是v3版本) 
 注:文章demo,并不是电商demo 
(1)运行WordPress,并使REST API 处于开启状态
(2)修改api.js,修改成你的博客(网站)配置 「例如: 你的站点地址, 你的站点语言, 你的站点协议等等」 
(3)修改 Wordpress 根目录下的 wp-config.php 文件 
(4)查找:define('NONCE_SALT'5)在 define('NONCE_SALT' 下方新增如下内容 define('JWT_AUTH_SECRET_KEY', 'you-64-secret-key'); #这里查看随机密钥 https://api.wordpress.org/secret-key/1.1/salt/ define('JWT_AUTH_CORS_ENABLE', true); 
(6)操作基本纯前端开发 

4、登录 / 注册 api:缺少对应的接口描述,如果有能登录到wordpress网站,但是怎么管理三方社交平台的登录
5、核心api,核心动作,钩子函数都是直接通过php操作的,ui框架不好修改和控制,绕来绕去还更麻烦,也不一定能实现 

总结:

(1)首先woocommerce的REST API是可以集成异步ui库(如react)

(2)REST API开启流程:后台选择woocommerce --> 设置 --> 高级 --> REST API --> 新建API Key

(3)下载过vue集成REST API的demo看过代码,但是功能是类似博客文章的项目,就不是电商这方面的,它项目使用的接口版本是v1的,现在最新的是v3版本 demo地址:github.com/crlang/VueW…

步骤:

1、后台设置 

2、Wordpress 根目录下的 wp-config.php 文件

3、前端项目也要进行相应的配置 

感觉不足之处:

(1)api接口不齐全,比如 登录/注册,购物车逻辑(存在于核心api中,php操作实现)

(2)有部分接口有但是感觉没写明白后期该如何操作,如下:

1、支付接口:它描述写的是允许查看和更新​​各个付款网关,但是没有填写表单之后进行提交和支付渠道挂钩的接口 

2、退款:退款API允许您创建,查看和删除单个退款。 
接口有个属性:api_refund:布尔值 --> 如果为true,则使用付款网关API生成退款。默认值为true。(但是好像没有说明具体怎么控制) 

(3)感觉有点作用的接口就几个:订单,退款,产品这些(但是感觉也不好操作,不能完全像用woocommerce插件操作一样)

(4)主要的核心api,核心动作,钩子函数都是直接通过php操作的,ui框架不好修改和控制,绕来绕去还更麻烦,也不一定能实现