WordPress -- WooCommerce的3个常用操作
# 前言
首先开发使用的是其中之一的woocommerce。其实相当于是二次开发,本人也是第一次上手。所以就对其中的三个操作比较印象深刻。然后就此记录分享一哈。也算是个新手的总结吧,大佬们多多担待,有错可以直接弄我,哈哈哈。
注:以下是基于个人的项目,可能每个人的项目不同其中的使用方式也有不同
通用api文档:https://developer.wordpress.org/apis/ (opens new window)
# do_action
1、do_action()函数声明(定义)作用 do_action()函数是WordPress的内部函数,作用是创建一个行为钩子,它没有返回值,单纯的就是在特定的地方执行插件或者主题开发者挂载的函数,一般存在于某个特殊的节点或者事件上(比如开始加载主题模板的时候或者发布一篇文章的时候),该函数让wordpress变得更加强大,扩展性更加好。例如wp_head()函数中只有一句代码就是:do_action( ‘wp_head’ ),他的意思就是执行挂载到wp_head这个动作钩子上的所有函数。
do_action($tag, $arg);
// $tag是必须的,为我们创建的动作名称;
// $arg为我们要执行的"动作";
2
3
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');
}
2
3
4
5
6
7
8
9
10
11
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.
2
3
4
网址:参考 https://www.skyverge.com/blog/get-woocommerce-page-urls/ (opens new window)
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
2
3
4
5
6
注意:home_url() 函数检索站点的主页url,可能会得不到想要的路径,而返回的是主页的url。
4.获取路径参数的值(已知字段):http://xxx.com?cat=1
使用 $_GET['cart']
使用 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/
2
3
4
# 获取自定义字段
一、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)
*/
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 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)产品变化 (3)
10、感觉api不全(购物车逻辑,api不全,那怎么跟后台的那些库存数量什么的相关联呢?)
11、支付网关:(允许查看和更新各个付款网关)但是也不能控制呀?,得进行集成
12、购物车(cart):REST API 没有对cart的支持,只在内部api存在(php操作实现的)
13、WordPress --> REST API (跟woocommerce的不一样)
2
3
4
5
6
7
8
9
10
11
12
13
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框架不好修改和控制,绕来绕去还更麻烦,也不一定能实现
2
3
4
5
6
7
8
9
10
11
12
13
总结:
(1)首先woocommerce的REST API是可以集成异步ui库(如react)
(2)REST API开启流程:后台选择woocommerce --> 设置 --> 高级 --> REST API --> 新建API Key
(3)下载过vue集成REST API的demo看过代码,但是功能是类似博客文章的项目,就不是电商这方面的,它项目使用的接口版本是v1的,现在最新的是v3版本 demo地址:https://github.com/crlang/VueWPress
步骤:
1、后台设置
2、Wordpress 根目录下的 wp-config.php 文件
3、前端项目也要进行相应的配置
2
3
4
5
6
7
感觉不足之处:
(1)api接口不齐全,比如 登录/注册,购物车逻辑(存在于核心api中,php操作实现)
(2)有部分接口有但是感觉没写明白后期该如何操作,如下:
1、支付接口:它描述写的是允许查看和更新各个付款网关,但是没有填写表单之后进行提交和支付渠道挂钩的接口
2、退款:退款API允许您创建,查看和删除单个退款。
接口有个属性:api_refund:布尔值 --> 如果为true,则使用付款网关API生成退款。默认值为true。(但是好像没有说明具体怎么控制)
(3)感觉有点作用的接口就几个:订单,退款,产品这些(但是感觉也不好操作,不能完全像用woocommerce插件操作一样)
(4)主要的核心api,核心动作,钩子函数都是直接通过php操作的,ui框架不好修改和控制,绕来绕去还更麻烦,也不一定能实现