分类: 技术

  • B2B开通了支付功能的用户务必防范以下情况

    B2B开通了支付功能的用户务必防范以下情况

    最近发现有人利用充值功能进行洗钱活动,大致做法如下:

    1、向你的站点余额中充值

    2、通过各种理由要求你退款

    这个过程很简单,但是完成了洗钱过程,请大家务必防范。也请大家务必洁身自好,远离黑灰产业!

    后面升级我会对支付做相应调整,下面是一些解决方法,您可以根据自己站点的情况选择其中一种方案使用:

    方案一:关闭提现功能,并在宝塔防火墙中,禁止国外IP访问。

    方案二:关闭提现功能,并使用下面代码禁止充值功能,代码放入 主题根目录 functions.php 文件最下面

    //关闭充值功能
    add_filter('b2_order_price_resout', 'tx_disabled_blance', 10, 2);
    function tx_disabled_blance($price, $data)
    {
    	//禁止充值
    	if ($data['order_type'] == 'cz') {
    		return ['error' => __('充值功能暂时关闭', 'b2')];
    	}
    	return $price;
    }

    方案三:关闭提现功能,并将异常用户手动关入小黑屋,然后禁止小黑用户交易。禁止的代码如下:代码放入 主题根目录 functions.php 文件最下面

    add_filter('b2_order_price_resout', 'tx_disabled_darkroom', 10, 2);
    function tx_disabled_darkroom($price, $data)
    {
    	$dark_room = (int) get_user_meta($data['user_id'], 'b2_dark_room', true);
    	if ($dark_room)
    		return array('error' => __('小黑屋中禁止交易', 'b2'));
    	return $price;
    }

    方案四:关闭提现功能,并限制每天充值次数和金额,一般用户不会反复充值,限制频次可能会解决部分问题。下面代码限制了每天充值2次,最大金额100元, 您可以根据自己情况修改。 代码放入 主题根目录 functions.php 文件最下面

    //限制充值频次和金额
    add_filter('b2_order_price_resout', 'tx_cz_limit', 10, 2);
    function tx_cz_limit($price, $data)
    {
    	if ($data['order_type'] == 'cz') {
    		//禁止小黑屋的用户充值
    		$count = (int) get_user_meta($data['user_id'], 'b2_cz_count', true);
    		$date = get_user_meta($data['user_id'], 'b2_cz_date', true);
    		if ($date && date('Y-m-d') > $date) {
    			delete_user_meta($data['user_id'], 'b2_cz_count');
    			delete_user_meta($data['user_id'], 'b2_cz_date');
    		} else {
    			//每天只允许充值2次
    			if ($count >= 2) {
    				return array('error' => __('每天只允许充值2次', 'b2'));
    			}
    		}
    		//简直充值不超过100
    		if ($data['order_price'] > 100) {
    			return array('error' => __('每次充值不能超过100元', 'b2'));
    		}
    	}
    	return $price;
    }
    add_filter('b2_order_callback_cz', 'tx_cz_success', 99, 2);
    function tx_cz_success($res,$data)
    {
    	if ($data['order_type'] == 'cz') {
    		$count = (int) get_user_meta($data['user_id'], 'b2_cz_count', true);
    		update_user_meta($data['user_id'], 'b2_cz_count', $count + 1);
    		update_user_meta($data['user_id'], 'b2_cz_date', date('Y-m-d'));
    	}
    	return '';
    }

  • 利用 OpenAI 的漏洞提取自己的 API Key

    利用 OpenAI 的漏洞提取自己的 API Key

    相信大家对于 OpenAI 已经很不陌生了吧。但是在之前的时间中,OpenAI 一直要求使用手机号验证自己的账户。也正是由此,导致了 ChatGPT 的竞品通过不验证手机号的优势来抢自己的用户。不过,好像是这个原因,OpenAI 在给新用户注册的时候,下放了权限,注册的时候不用手机号验证了。虽然注册不用手机号认证了,但是创建 API Key 的话还是需要使用手机号码。不过不良林大佬开发出了一种不用手机号就能提取 API Key 的方法。这篇教程就来介绍一下这个方法

    准备材料

    • OpenAI 账号

    部署步骤

    1. 在此:https://platform.openai.com 登录自己的 OpenAI 账号,如果没有的话可以点击这里注册
    2. 按下 F12 打开浏览器开发者工具,转到 Network 选项卡,然后将筛选条件改成 Fetch/XHR,刷新网页
    3. 找到 login 项,然后点击“Response”,找到 sensitive_id。将后面的值复制即可

    参考资料

    https://www.youtube.com/watch?v=yndqfXr_qPg

    https://bulianglin.com/archives/chatgpt.html

  • uniapp app获取keystore等一系列常用数据(APP备案签名和公钥)

    uniapp app获取keystore等一系列常用数据(APP备案签名和公钥)

    一、获取安卓证书keystore的SHA1和SHA256值 参数上面引用链接

     window +r : 
    $ cmd   
    $ D: 进入D盘
    $ keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore 项目名称.keystore
    
    //生成的证书文件在D盘 
    
    //根据步骤完成后,进入keystore所在的盘执行命令:
    $ keytool -list -v -keystore tongcheng.keystore 可以获取到SHA1信息
    
    二、获取自有证书签名

    进入https://open.weixin.qq.com/ 下载Gen_Signature_Android.apk(顶部导航栏 ‘资源中心’->’资源下载’->’Android资源下载’->’签名生成工具’->安装到手机 输入项目包名即可获取到)

    三、apk加固后重新签名

      //例:
     $ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ef6ec3ae22023aadd9d0b228cfdb30491.keystore baiding.apk __uni__7cf1dkdf
    
    //下面是chatGpT的回答 对照起来很容易明白 成功会提醒jar 已签名 这时候这个apk已经重新签名好了:
    
    // jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore your_keystore_name.keystore your_apk_file.apk your_alias_name  替换 "your_keystore_name"、"your_apk_file.apk" 和 "your_alias_name" 为你自己的密钥库名称(证书文件)、APK文件名称和别名。
     
    //让输入密钥库短语 就是证书(XXX.keystore)的密钥
    

    四 、获取证书公钥

    window+ R
    $ cmd
    // 打开cmd,进入到证书所在目录 (例:如果在D盘 输入: D: 回车 然后cd D:\Code\new-work (直接复制文件路径) )
    // your_alias 换成 证书别名,your_keystore.keystore 改成自己的证书文件名
    $ keytool -export -alias your_alias -file certificate.cer -keystore your_keystore.keystore
    //输入密钥库口令(密钥),会显示 存储在文件 <certificate.cer> 中的证书  就在证书所在的文件夹内  找到双击根据流程 一直下一步,安装好 点击详细信息 就能看见 公钥 点击显示并复制即可
    
    五、获取apk的MD5

    win+ R 输入cmd 进入命令行
    $ certutil -hashfile xxx/xxx.apk MD5 
    // 即可获取到md5值  例如: certutil -hashfile D:\Code/白社区.apk MD5 (直接复制apk所在文件路径)
    

    文中的$ 符号代表这是句命令 给刚接触的同学提醒一下,别问 问就是曾经的弯路

    作者:viwei
    链接:https://www.jianshu.com/p/d4e0f14fdc0f
    来源:简书


    发现上面的始终搞不定UNIAPP的公钥,经过小编多次试验,如何所示是可以行的经验:

    Windows 平台

    公钥和 MD5 值可以通过安卓开发工具、Keytool、Jadx-GUI 等多种工具获取,本文以 jadx-gui 为例。

    1,下载 jadx-gui 工具 , 点击此处 下载 jadx-gui 工具。

    2,下载完成后,解压压缩包,双击 jadx-gui-1.4.7.exe 运行。
    3,查看

    其他相关内容请见:APP 备案公钥、签名、MD5获取方法及获取中遇到的问题和解决方法

    https://pmself.com/3677.html IOS/安卓应用APP备案获取App特征信息填写指导

  • APP 备案公钥、签名、MD5获取方法及获取中遇到的问题和解决方法

    https://pmself.com/3085.html 参考这个页面,编者按!

    一、IOS 系统获取 Bundle ID、平台公钥、签名 MD5 值的指引

    获取 Bundle ID:使用 APP 对应的 IOS 开发者账号登录 Developer 控制台,找到下图标识符(英文),单击进入 Certificates,IdentifiersProfiles 页面。

    在 Certificates,Identifiers&Profiles 页面,单击 Identifiers,其中 IDENTIFIER 列对应的就是 Bundle ID。如下图所示:

    获取公钥与签名 SHA1 值:在计划资源中,单击证书(英文),进入 Certificates 页面。

    在 Certificates 页面,可查看证书详情,并下载 APP 对应的证书。

    通过查看证书详细信息,可获取公钥和签名 SHA1 值。IOS 的 APP 公钥,如下图所示:

    若公共密钥未完整显示,可以先单击省略号,如果仍然未能完整显示出来,请复制省略号前面显示出的数据进行填写。

    IOS 的 APP签名 MD5 值(SHA-1),如下图所示:

    二、安卓系统获取包名、平台公钥、签名 MD5 值的指引

    Windows 平台

    公钥和 MD5 值可以通过安卓开发工具、Keytool、Jadx-GUI 等多种工具获取,本文以 jadx-gui 为例。

    下载 jadx-gui 工具 , 点击此处 下载 jadx-gui 工具。

    下载完成后,解压压缩包,双击 jadx-gui-1.4.7.exe 运行。

    运行后,在页面左上方单击文件 ,打开文件,打开 APK 包。

    打开 APK 包后,找到并单击 AndroidManifest.xml,查看 APP 包名。

    打开 APK 包后,找到并单击 APK signature,查看平台公钥和签名 MD5 值。

    macOS 平台

    打开终端,运行如下命令安装 jadx。
    brew install jadx
    错误zsh: command not found: brew解决方法

    执行命令:

    /bin/zsh -c “$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)”
    1.

    安装完成后,在终端运行如下命令打开 jadx。
    jadx-gui
    报错:

    The operation couldn’t be completed. Unable to locate a Java Runtime.
    Please visit http://www.java.com for information on installing Java.
    1.
    2.
    首先检查自己电脑是否已经安装了JDK环境。打开终端执行java -version指令:

    mac@Macmini ~ % java -version
    The operation couldn’t be completed. Unable to locate a Java Runtime.
    Please visit http://www.java.com for information on installing Java.
    1.
    2.
    3.
    可以看到我们是没有安装JDK环境。

    官网下载合适的JDK版本。

    Oracle官网: https://www.oracle.com/java/technologies/downloads/

    我这里是M1芯片的Mac,选择的是Arm 64 DMG Installer。如果是Intel芯片的Mac,选择x64 Compressed Archive。
    各位可以根据自己需要以及电脑配置选择合适的版本。

    下载成功之后,双击进行安装。

    打开终端执行java -version指令,检查是否安装成功

    mac@Macmini ~ % java -version
    java version “19.0.1” 2022-10-18
    Java(TM) SE Runtime Environment (build 19.0.1+10-21)
    Java HotSpot(TM) 64-Bit Server VM (build 19.0.1+10-21, mixed mode, sharing)
    1.
    2.
    3.
    4.
    再报错:ERROR: JAVA_HOME is set to an invalid directory: @@HOMEBREW_JAVA@@Please set the JAVA_HOME variable in your environment to match the

    location of your Java installation.

    命令行:open .bash_profile

    在文件中配置java环境

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home

    使 bash_profile 生效,命令行:source ~/.bash_profile

    再次命令行:jadx-gui

    1. 运行后,单击Open file,打开 APK 包。

    3.1 打开 APK 包后,找到并单击 Resources,找到并单击 AndroidManifest.xml,查看 APP 包名。

    3.2 打开 APK 包后,找到并单击 APK signature,查看平台公钥和签名 MD5 值。

    APP 备案公钥、签名、MD5获取方法及获取中遇到的问题和解决方法
    https://blog.51cto.com/u_13888825/7554487

  • 防止盗用代码禁止 F12 和打开网页控制台快捷键

    防止盗用代码禁止 F12 和打开网页控制台快捷键

    • 虽然这个功能有些鸡肋,不过是可以避免大部分的快捷键打开网站控制台,要查看你网站的源码还是要费点劲的。
    • 网站管理后台-–》子比主题设置—》自定义代码—》自定义底部 HTML 代码,把下面的 css 代码复制粘贴到里面即可。
    • 其他主题的话在你的主题目录下的,footer.php文件中下面添加下面的代码:

    自定义 HTML 代码

    <!--安全 1 开始-->
    <script type="text/javascript">
            window.onload = function(){
                document.onkeydown = function (){
                    var e = window.event || arguments[0];
                    //F12
                    if(e.keyCode == 123){
                        return false;
                    //Ctrl+Shift+I
                    }else if((e.ctrlKey) && (e.shiftKey) && (e.keyCode == 73)){
                        return false;
                    //Shift+F10
                    }else if((e.shiftKey) && (e.keyCode == 121)){
                        return false;
                    //Ctrl+U
                    }else if((e.ctrlKey) && (e.keyCode == 85)){
                        return false;
                    }
                };
                document.oncontextmenu = function (){
                    return false;
                }
            }
        </script>
    <!--by:午后-www.pmself.com-->
    <!--安全 1 结束-->

    方法 二:不要扒我了

    网站管理后台-–》子比主题设置—》自定义代码—》自定义底部 HTML 代码,把下面的 css 代码复制粘贴到里面即可。 其他主题的话在你的主题目录下的,footer.php文件中下面添加下面的代码:

    <!--安全 2 不要扒我了开始-->
    <script type="text/javascript">
    ((function() {
        var callbacks = [],
            timeLimit = 50,
            open = false;
        setInterval(loop, 1);
        return {
            addListener: function(fn) {
                callbacks.push(fn);
            },
            cancleListenr: function(fn) {
                callbacks = callbacks.filter(function(v) {
                    return v !== fn;
                });
            }
        }
        function loop() {
            var startTime = new Date();
            debugger;
            if (new Date() - startTime > timeLimit) {
                if (!open) {
                    callbacks.forEach(function(fn) {
                        fn.call(null);
                    });
                }
                open = true;
                window.stop();
                alert('不要扒我了');
                window.location.reload();
            } else {
                open = false;
            }
        }
    })()).addListener(function() {
        window.location.reload();
    });
    </script>
    <!--by:午后-www.pmself.com-->
    <!--安全 2 不要扒我了结束-->
  • 防止网站被镜像代码分享

    防止网站被镜像代码分享

    ⒈添加到 header.php 中适当位置

    注:部分镜像站点会屏蔽 JS 代码,所以对部分镜像站点无效

    <script type="text/javascript">if (document.location.protocol != "https:" && navigator.userAgent.indexOf("MSIE 6.0") < 0 ) { location.href = location.href.replace(/^http:/,"https:");}if (document.location.host != "www.pmself.com") { location.href = location.href.replace(document.location.host,'www.huliku.com');} </script>

    ⒉添加到主题的 functions.php 最后一个?> 之前

    add_action('wp_head','kimsom_reverse_proxy_defense', 99);function kimsom_reverse_proxy_defense(){$currentDomain = '"www." + "pmself" + ".com"';echo '<img style="display:none" id="inlojv-rpd" src="" data-url=".home_url()." onerror="\'var" str0="true" ishttps="true" document="true" location="true" protocol="true" true:false="true" if="true" var="true" str1="http" else="true" str2=".$currentDomain." str3="true" href="location.href.replace(document.location.host,'." currentDomain="true">';}

    ⒊添加到 header.php 中适当位置

    <script type="text/javascript">if(window["\x6c\x6f\x63\x61\x74\x69\x6f\x6e"]["\x68\x6f\x73\x74"] != 'www.pmself.com' && window["\x6c\x6f\x63\x61\x74\x69\x6f\x6e"]["\x68\x6f\x73\x74"] != 'd9y.net'){alert('警告!检测到该网站为镜像站点,将跳转到原站点!');window["\x6c\x6f\x63\x61\x74\x69\x6f\x6e"]["\x68\x72\x65\x66"] = 'http://'+'www.pmself.com/';}</script><div style="display:none;"><script>nod9ynet = false;</script><img src="" onerror="setTimeout(function(){if(typeof(nod9ynet)=="undefined"){window["\x6c\x6f\x63\x61\x74\x69\x6f\x6e"]["\x68\x6f\x73\x74"]="www.pmself.com";}},3000);"></div>

  • 阿里云服务器安装宝塔打不开

    确保完好的服务器系统,这里是centos系统:

    安装:

    yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec

    宝塔官网更新代码:https://www.bt.cn/new/download.html

    安装好后,留意默认的相关密码和账号!

    1. 确认宝塔是否安装成功

    在安装宝塔之前,需要确认服务器是否满足宝塔的安装要求。如果服务器满足要求,可以按照宝塔官方文档的步骤进行安装。安装完成后,可以通过以下命令检查宝塔是否已经成功安装:

    systemctl status bt

    看宝塔是否在运行

    /etc/init.d/bt status

    如果宝塔已经成功安装,会显示类似以下的信息:

    ● bt.service - Bt Panel Daemon Loaded: loaded (/usr/lib/systemd/system/bt.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2021-08-10 10:10:10 CST; 1 day 2h ago Main PID: 12345 (bt) Tasks: 20 (limit: 4915) Memory: 1.2G CGroup: /system.slice/bt.service ├─12345 /usr/local/bt/bt ├─12346 /usr/local/bt/bt ├─12347 /usr/local/bt/bt ├─12348 /usr/local/bt/bt ├─12349 /usr/local/bt/bt ├─12350 /usr/local/bt/bt ├─12351 /usr/local/bt/bt ├─12352 /usr/local/bt/bt ├─12353 /usr/local/bt/bt ├─12354 /usr/local/bt/bt ├─12355 /usr/local/bt/bt ├─12356 /usr/local/bt/bt ├─12357 /usr/local/bt/bt ├─12358 /usr/local/bt/bt ├─12359 /usr/local/bt/bt ├─12360 /usr/local/bt/bt ├─12361 /usr/local/bt/bt ├─12362 /usr/local/bt/bt ├─12363 /usr/local/bt/bt └─12364 /usr/local/bt/bt

    如果宝塔没有成功安装,可以重新安装或者检查服务器是否满足宝塔的安装要求。

    2. 检查防火墙设置

    如果宝塔已经成功安装,但是无法打开,可能是因为防火墙设置的问题。可以通过以下命令检查防火墙是否开启:

    systemctl status firewalld

    如果防火墙已经开启,可以通过以下命令开放宝塔的端口:

    firewall-cmd --zone=public --add-port=8888/tcp --permanent

    然后重新加载防火墙规则:

    firewall-cmd --reload

    3. 检查宝塔的配置文件

    如果宝塔已经成功安装,防火墙设置也没有问题,但是仍然无法打开,可能是因为宝塔的配置文件出现了问题。可以通过以下命令检查宝塔的配置文件:

    cat /www/server/panel/data/port.pl

    如果输出的结果不是 8888,可以通过以下命令修改宝塔的配置文件:

    echo '8888' > /www/server/panel/data/port.pl

    然后重新启动宝塔:

    /etc/init.d/bt restart

    查看面板数据命令:

    sudo /etc/init.d/bt
    
    输入14查看

    以上是一些可能导致阿里云服务器安装宝塔打不开的原因和解决方法,希望能对你有所帮助。

    其他参考:

    https://blog.csdn.net/m0_47584619/article/details/127856230

    https://zhuanlan.zhihu.com/p/653856647

    https://help.aliyun.com/zh/ecs/support/ecs-instance-through-browser-console-login-pagoda-service-panel#998d4518a7zx1

    https://www.bt.cn/bbs/forum.php?mod=viewthread&tid=67502

  • 如何在WordPress中添加图片放大预览效果

    如何在WordPress中添加图片放大预览效果

    这里分享一个如何在Wordpress中开启点击图片预览的功能。操作也非常的简单,只需要把下面的内容黏贴到对应的文件中即可。实际的效果预览

    1、在主题的header.php文件中添加如下代码。添加到header表中之中

    <!-- 图片放大 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css" />

    复制

    2、在主题的footer.php文件中添加如下代码,可以放在</body>标签结尾处。

    <!-- 图片放大 -->
    <script src="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js"></script>

    复制

    3、在主题的functions.php文中添加如下代码,可以放在文件的顶部即可。

    /**图片灯箱自动给图片加链接**/
    add_filter('the_content', 'fancybox');
    function fancybox($content){ 
        $pattern = array("/<img(.*?)src=('|\")([^>]*).(bmp|gif|jpeg|jpg|png|swf)('|\")(.*?)>/i","/<a(.*?)href=('|\")([^>]*).(bmp|gif|jpeg|jpg|png|swf)('|\")(.*?)>(.*?)<\/a>/i");
        $replacement = array('<a$1href=$2$3.$4$5 data-fancybox="gallery"><img$1src=$2$3.$4$5$6></a>','<a$1href=$2$3.$4$5 data-fancybox="images"$6>$7</a>');
        $content = preg_replace($pattern, $replacement, $content);
        return $content;
    }

    复制

    原创声明:网络哟

  • WordPress REST API入门基础知识点

    WordPress REST API入门基础知识点

    wordpress REST API正在改变WordPress。您可能没有注意到,因为其中很多都在幕后,但是REST API的含义对WordPress的未来产生了巨大的影响,无论是在代码库还是使用方面。

    如果您没有使用过WordPress REST API,您可能想知道它是什么。因此,让我们先看看REST API是什么。

    在本文中,我们讲解WordPress REST API的一些基础知识。我们将研究它的作用、工作原理以及它给平台带来的变化。最后,我们将讨论您可以用它做的一些事情。

    当REST API最终被添加到WordPress的核心时,漫长的旅程就结束了。许多人预计这一变化是该平台历史上WordPress向前迈出的最大一步。但是,如果您不熟悉REST API,您可能会对它所获得的所有关注感到困惑。

    简而言之,WordPress REST API的加入使WordPress变成了一个功能齐全的应用程序框架。这显着提高了它的“可扩展性”,或者说它可以通过新特性和功能进行扩展。此外,它还扩展了平台与其他站点和应用程序进行通信的潜力。

    什么是WordPress REST API?

    在我们深入研究WordPress REST API之前,了解我们的术语很重要。这是一个我们需要使用大量首字母缩略词的主题,所以让我们先把它们弄清楚。

    什么是应用程序编程接口 (API)?

    首先,您需要知道什么是应用程序编程接口 (API)。用最简单的术语来说,API是一个系统使其他系统能够连接到其数据的一种方式。例如,当网站向页面添加Facebook的“Like”按钮时,它会通过连接到Facebook的API来实现这一点。这让网页可以使用API来接收数据(点赞按钮的代码)和发送数据(点赞请求)。

    应用程序编程接口或API被定义为:

    “客户端和服务器之间的接口或通信协议,旨在简化客户端软件的构建。”

    如果您不熟悉API,那可能没有多大帮助。更简单地说,API是一组允许一个系统与另一个系统交互(或“接口”)的代码。如果您曾经将Google地图添加到您的WordPress站点,那么您就使用了Google的Maps API,它允许您的WordPress站点与Google Maps交互。

    这些系统不需要完全分开。WordPress已经有多个API,用于插件、设置和短代码等。插件和主题开发人员可以使用这些来与WordPress核心进行交互并使事情发生(例如创建短代码和向WordPress管理员添加设置屏幕)。

    与REST API的不同之处在于它允许WordPress安装本身之外的系统与WordPress交互,这就是REST部分的用武之地。

    什么是具象状态转移 (REST)?

    那么,REST API究竟是什么?具象状态传输 (REST)是一种特定于Web服务的 API。它包含一组标准化的指令和规则,使所有“RESTful”服务更容易相互连接。

    简而言之,REST API使您能够向外部系统发出请求。这方面的一个例子是Twitter。您可以使用其API向特定用户请求一定数量的推文。然后API将根据您的请求返回推文,您可以使用HTML和CSS将其嵌入您的网站。

    这些请求是使用JavaScript Object NotatiON (JSON) 执行的。这是一种专为发送、接收和存储数据而设计的语言。我们将在本文后面介绍JSON,但我们建议您先花点时间熟悉一下这种语言。这将帮助您准备好使用WordPress REST API,并理解我们将要讨论的一些概念。

    WordPress REST API是一个接口,开发人员可以使用它从WordPress安装本身之外访问WordPress。您可以使用JavaScript访问它,这意味着它可用于创建交互式网站和应用程序。

    REST代表 Representational State Transfer,API 代表应用程序编程接口。让我们来看看每一个的含义。

    Representational State Transfer (REST) 提供了 Web 系统可以用来相互交互的标准。如果没有 REST,两个系统将无法相互理解,从而来回发送数据。

    要使应用程序成为RESTful,它必须符合五个原则:

    1. 统一界面。用于访问系统中资源的URL必须是统一的、一致的,并且可以通过常见的方法(例如GET)(稍后会介绍更多)进行访问。
    2. 客户端服务器。客户端应用程序和服务器应用程序必须是分开的,因此它们可以相互独立开发。如果服务器端技术(即 WordPress)发生变化,服务器端应用程序(例如一个应用程序)必须仍然能够通过相同的简单方法访问它。
    3. 无国籍。使用API发出新请求时,服务器不会更改状态。它不存储已发出的请求。
    4. 可缓存。所有资源都必须是可缓存的,以提高速度并符合Web标准。缓存可以在服务器端或客户端实现。
    5. 分层系统。RESTful系统允许您使用多个层来访问它,如果需要,将数据存储在中间服务器中。服务器无法判断最终客户端是否直接连接到它。

    所有这些约束都与网页和应用程序相关,并控制应用程序与API交互的方式。

    这对WordPress意味着什么?

    将REST和API放在一起意味着WordPress REST API是一组代码,旨在使其他系统能够与WordPress交互,并且它的构建方式可确保这些系统能够相互理解。

    这意味着第三方网站或移动应用程序,例如,可以访问您的WordPress数据库,从中获取数据并向其中添加数据。

    不过,这有许多含义和用途。

    了解WordPress REST API

    WordPress REST API的功能与我们已经提到的例子大体相同。基本上,WordPress REST API使您可以从任何与JSON兼容的框架中访问WordPress的所有功能。

    与Twitter的API使您能够检索和发送推文的方式类似,WordPress REST API可用于管理来自外部平台的文章、用户、类别等。这使您能够以多种前所未有的方式使用WordPress。

    WordPress REST API的背景

    REST API早在2013年就宣布了,它以插件的形式开始,旨在通过4.1版将其合并到WordPress核心中。正如经常发生的那样,延迟会推迟发布,直到三年后随着WordPress 4.7的发布,它最终被实现到核心中。

    WordPress REST API于2016年12月作为4.7版核心的一部分发布,但在此之前它作为插件存在。

    对于许多人来说,这是一个漫长但值得的等待,他们将WordPress REST API视为平台向前迈出的重要一步。您可能想知道为什么这个添加如此重要,特别是因为很多用户可能没有注意到太大的区别。事实证明,出于多种原因,包含REST API是对WordPress的根本性更改。

    例如,通过实施REST API,WordPress从简单的创建网站的平台迈出了一步。相反,它现在已经成为一个成熟的应用程序框架。这意味着开发人员可以使用WordPress站点为移动设备和网络创建应用程序,或作为信息存储库。

    这种转变也使WordPress摆脱了对PHP的依赖。通过使WordPress与任何JSON-compatible语言兼容,REST API极大地扩展了开发人员的可能性,使他们能够将WordPress功能与几乎任何框架一起使用。

    它旨在支持一系列基于WordPress构建的应用程序,并将WordPress从内容管理系统转变为应用程序平台。

    它被WordPress.com广泛使用,其基于JavaScript的界面使用REST API与WordPress数据库进行交互。古腾堡编辑界面也使用它,该界面在2019年成为核心的一部分。

    REST API扩大了WordPress可用于的应用程序范围。虽然内容管理系统擅长运行复杂的网站,但应用程序平台也可用于支持基于Web的单页应用程序或SPA(如果您曾经使用过Google文档,那么您已经使用过其中之一)。

    在这些中,当用户执行操作时会刷新内容,而不是加载新页面。因为它使用JavaScript(一种客户端语言)而不是PHP(一种服务器端语言),所以它可以在用户的​​浏览器中进行操作,而无需不断地向服务器发送请求。

    对WordPress用户和开发人员的影响

    如果您是使用WordPress的用户和/或开发人员,那么REST API有很多含义。

    对于用户,这些包括:

    • 对界面的更改,包括古腾堡编辑器。
    • 对WordPress移动应用程序的更改和改进。
    • 随着时间的推移,自托管的WordPress管理屏幕看起来更像WordPress.com屏幕。

    对于开发者来说,还有更广泛的意义和可能性:

    • 能够使用REST API创建SPA,从WordPress中提取数据,但看起来与WordPress非常不同。
    • 将WordPress与其他前端技术和系统集成的能力。
    • 如果您是不编写PHP的前端开发人员,则可以使用WordPress进行开发。
    • 对于PHP开发人员来说,越来越需要扩展您的技能以包含JavaScript。
    • 特定更改,例如需要在页面和后期编辑屏幕中构建古腾堡区块而不是元框。

    随着时间的推移,WordPress REST API将意味着更多的WordPress核心将用JavaScript而不是PHP编写。如果您是WordPress开发人员,这意味着您需要学习JavaScript。

    REST API和JSON如何协同工作

    最后,REST API在可用于平台的接口方面提供了更高的灵活性。它使管理界面完全可选,因为您现在可以完全通过JSON命令与您的WordPress站点进行交互。让我们看看JSON和REST API如何结合起来使这成为可能。

    WordPress REST API是为了响应网站和应用程序开发方式的变化以及更广泛地开放WordPress的需要而开发的。

    到目前为止,您应该对WordPress REST API的理论方面有所了解,所以让我们看看该技术更实用的方面。官方手册介绍如何使用REST API,如下所示:

    “WordPress REST API为WordPress数据类型提供API端点,允许开发人员通过发送和接收JSON(JavaScript Object Notation)对象与站点进行远程交互。”

    我们需要关注的第一个词是“端点”。将端点视为可以使用JSON请求调用的一段数据或函数的最简单方法。默认情况下,WordPress提供了大量可供使用的标准端点,但开发人员也可以创建自定义端点。

    要到达端点,您必须使用采用普通URL形式的“路由”。您现在甚至可以自己尝试一下。转到您自己的WordPress站点,并将/wp-json/wp/v2 添加到其URL的末尾。如果您的站点是http://example.com,您将输入。

    当您加载此路由时,您将到达端点,在这种情况下,它以(凌乱的)JSON格式返回站点的所有内容和元数据。通过使用不同的路由,您可以访问不同的端点,以获取特定类型的信息并执行各种任务。

    您将在REST API中使用三个主要的JSON请求,所以现在让我们快速浏览一下它们。他们是:

    • GET-此类请求用于从API检索和列出数据。例如,您将使用GET请求返回您网站上的用户列表或编译特定时间范围内的博客文章。
    • POST-此请求用于向API发送数据。它使您能够将新信息推送到WordPress,例如添加新用户和帖子或更新现有数据。
    • DELET-顾名思义,这个请求是用来删除数据的。这使您能够删除文章、页面、用户等。

    有时可以将GET和POST与相同的端点一起使用以获得不同的结果。例如,让我们看看端点/me/settings/。如果您要在此端点上执行GET请求,您将收到当前用户设置的列表。但是,通过在同一端点上使用POST请求,您将能够改为更新设置。

    如何访问WordPress REST API

    您如何访问WordPress REST API?

    要访问WP-REST API,您需要通过命令行访问您的站点。对于WordPress,这称为WP-CLI。您不会通过管理屏幕或直接访问您网站上的代码来执行任何这些操作。

    让我们来看看你是如何开始的。

    通过WP-CLI 访问WP-REST

    WP-CLI是WordPress命令行界面。它允许您通过计算机上的命令行界面 (CLI) 访问和使用WordPress。

    要访问CLI,请在Mac或Linux中打开终端,或在Windows中打开命令提示符。

    Mac上的终端

    要访问远程站点,您需要SSH到您的服务器以通过WP-CLI访问它(无法通过SSH连接?了解如何修复SSH“连接被拒绝”错误)。

    要访问本地站点,您只需从命令行使用正确的目录结构。在实际站点上试用REST API之前,最好先在本地测试站点上试用REST API。

    您需要专门访问您网站的REST API,如下所示:

    http://yoursite.com/wp-json/wp/v2

    然后,您可以在此之后添加元素以访问某些类型的数据,我们稍后将更详细地介绍这些数据。这些元素称为端点。

    验证

    访问站点后,您可能需要进行身份验证。一些端点是公共的,不需要身份验证,而其他端点则需要。

    您不是在此处登录站点管理员:REST API的处理方式略有不同。

    为了能够通过WP-CLI对您的站点进行身份验证,您需要安装一个身份验证插件。对于开发安装,Basic Auth插件可以完成这项工作并且很容易使用。

    但是,对于实时站点,您应该使用更强大的身份验证形式,例如JWT身份验证插件,它使用JSON Web Token并且更安全。

    然后,您可以使用命令行访问数据并包括身份验证。

    下面的示例curl用于测试与WordPress的连接。它将输出一个草稿列表。

    curl -X GET --user username:password -i http://yoursite.com/wp-json/wp/v2/posts?status=draft

    草稿帖子不是公开信息,因此您需要进行身份验证才能访问它们。但是,如果您要查找公开数据,则不需要身份验证。因此,要检索已发布的文章列表,您可以使用:

    curl -X GET http://yoursite.com/wp-json/wp/v2/posts

    这将获取所有已发布的文章,因为这些帖子是公开的。

    WordPress REST API命令概述

    我们现在将把所有这些理论付诸实践,并向您展示一些非常基本的示例,说明您可以使用REST API做什么。这只是一种尝试,以帮助您习惯使用REST API来处理对WordPress的请求。有关更多示例,我们建议您查看官方参考库和REST API资源。

    以下技术将要求您使用命令行来处理JSON请求。这使您能够通过使用基于文本的界面和发送简单的命令与您的 WordPress 站点进行交互。如果您没有任何使用命令行的经验,我们建议您先花一些时间学习基础知识。您可能还想使用SSH来创建与您的站点的连接。

    最后,当您准备好时,让我们看一些有关如何使用WordPress REST API的示例!

    一旦您访问了您的站点并且您知道如何使用身份验证(以及您是否需要),您将需要使用一系列命令中的一个来与您的站点进行交互。

    您需要使用的命令是:

    • GET 检索资源,例如文章或其他一些数据。
    • POST 向服务器添加资源,例如文章、附件或其他资源。
    • PUT 可用于编辑或更新服务器上已有的资源。
    • DELETE从服务器中删除资源。小心使用!

    让我们依次来看看其中的每一个。

    Get

    GET命令可能是最常用的:它检索数据。下面的示例(您在成功访问您的网站后使用)将获取您网站中所有已发布页面的列表:

    GET http://yoursite.com/wp-json/wp/v2/posts/?status=published

    请注意,我没有在上面的行中包含您站点的完整路径,因为您已经使用WP-CLI访问了该路径。

    检索到该数据后,您可以使用它来通知您的下一步。您可以删除其中一个文章,对其进行编辑或更新。您可以简单地将帖子输出到您的网络应用程序。

    假设您想获取最新的文章。你会用这个:

    GET http://yoursite.com/wp-json/wp/v2/posts/?per_page=1

    在处理文章时,您可以使用许多参数。有关更多信息,请参阅WordPress REST API 手册。

    Post

    POST用于向您的站点添加新数据或资源。

    因此,例如,如果您想创建一个文章,您可以使用以下POST命令开始:

    POST http://yoursite.com/wp-json/wp/v2/posts/

    这将创建一个新的空草稿文章。

    然后,您可以通过使用PUT命令进行编辑来更新文章。

    使用POST命令,您还可以添加文章以外的其他资源,包括附件和其他文章类型。

    要将页面添加到您的站点,您可以使用以下方法:

    POST http://yoursite.com/wp-json/wp/v2/posts/pages

    这会以与创建空文章相同的方式创建一个空页面。

    Put

    PUT命令允许您编辑现有资源,包括文章。

    假设您的网站上有许多草稿文章。您想检查它们并更新其中一个以使其发布。

    您可以首先获取所有草稿文章的列表:

    POST http://yoursite.com/wp-json/wp/v2/posts/?status="draft"

    系统将为您提供所有当前草稿文章的列表。您可以使用其ID更改其中之一的状态:

    PUT http://yoursite.com/wp-json/wp/v2/posts/567

    这将访问该文章并允许您对其进行编辑。然后,您可以使用status参数更改其状态:

    {
    "status" = "publish"
    }

    或者您可以向文章添加内容并发布它:

    {
    "status" = "publish"
    "content" = "content here"
    }

    服务器将返回一个200 - OK状态,告诉您PUT请求已成功编辑文章。

    DELETE

    DELETE命令执行您所期望的操作:它删除一个资源。默认情况下,如果您使用它来删除文章,它会将其放入垃圾箱,而不是永久删除。

    因此,如果您想将刚刚创建的文章移至垃圾箱,您可以使用以下命令:

    DELETE http://yoursite.com/wp-json/wp/v2/posts/567

    但是,如果您想绕过垃圾箱并永久删除它,您可以使用以下force参数:

    DELETE http://yoursite.com/wp-json/wp/v2/posts/567?force=true

    这将永久删除文章,无法撤消,因此应谨慎使用。

    一些例子

    1. 从站点返回文章

    虽然您显然需要适当的授权来编辑站点,但几乎可以从任何 WordPress 站点检索一些信息。这是因为REST API在所有WordPress安装中都是一致的。

    正如我们所讨论的,API存在的一个主要原因是使外部应用程序能够访问您的某些数据。在此示例中,我们可以从官方WordPress新闻博客中检索单个文章:

    curl https://wordpress.org/news/wp-json/wp/v2/posts/1

    ID已设置为1,这意味着此请求将检索博客上的第一篇文章。可能很难看到,因为JSON不是很可读,但是在代码中,您可以找到文章的所有内容和元数据。

    然后,您可以在应用程序中使用此信息,例如,使用您自己的自定义样式来显示它。

    如果您想返回博客中的每篇文章,您所要做的就是删除末尾的ID。但是,您更有可能希望返回选定数量的帖子。以下请求将返回最新的三个文章:

    curl https://wordpress.org/news/wp-json/wp/v2/posts/?per_page=3

    您可以在其他网站甚至您自己的博客上亲自尝试。

    2. 更新文章

    现在,让我们尝试使用REST API对WordPress进行一些更改。为此,您需要登录到要管理的站点。例如,如果您使用SSH,则需要登录到您的服务器。

    在这个例子中,我们将更新一个现有的文章。首先,让我们使用一个请求来更新ID为1的文章的标题:

    curl -X POST  -d '{"title":"A Brand New Title"}'

    这是不言自明的。title参数表明您正在更新文章的标题,后跟包含替换内容的文本字符串。

    还有很多其他的参数,你可以用它来进行更改后。例如,您可以使用列表为文章分配类别、发布文章或完全更改其内容。

    3. 删除用户

    最后,让我们看看如何使用REST API删除数据。在此示例中,我们将从站点中删除用户。当然,您需要先登录并授权管理用户,然后才能使用此功能。

    然后,您可以使用以下请求删除ID为101的用户:

    curl -X DELETE 

    这将从站点中删除指定的用户。您可以使用附加参数根据用户的ID将用户的文章重新分配给另一个用户,或者强制永久删除而不是将用户添加到垃圾箱。

    通过这些示例,您可以开始了解REST API如何使您能够管理站点上的内容并连接到其他站点。如果您想了解更多信息,我们建议您深入研究REST API手册,并查看有关学习JSON的课程。

    何时不使用WordPress REST API

    WordPress REST API并不总是开发网站或应用程序的正确方法。在使用它进行开发之前,您应该注意以下一些注意事项:

    兼容性

    如果您的应用程序将在不运行JavaScript的设备上或由可能关闭它的用户使用,那么如果您使用的是REST API,它就不会运行。

    用PHP编码的WordPress站点将输出HTML,因此不会遇到此问题。不使用JavaScript的设备越来越少,但如果您专门为这些设备开发,REST API将无法工作。

    同样,如果您的用户可能会关闭JavaScript,那么使用REST API会导致问题。出于可访问性或安全原因,某些用户会在其浏览器中关闭JavaScript。

    无障碍

    使用JavaScript开发的站点或应用程序并不总是像HTML输出那样易于访问。

    这主要是因为JavaScript用于传递动态内容的方式可能无法与屏幕阅读器很好地配合使用,并且可能会给视力障碍或光敏性癫痫患者带来问题。

    使用REST API访问您的WordPress站点并以可访问的形式输出数据意味着您可以克服这些问题,但在开发站点时检查站点的可访问性是值得的。

    搜索引擎优化

    频繁刷新的单页应用程序有时会导致SEO问题。这是因为第一次输出页面时未交付的内容可能不会被搜索引擎索引。

    谷歌和其他搜索引擎正在迎头赶上这样一个事实,即现在许多网站都由SPA驱动,并且正在适当地将它们编入索引。但是,对您使用REST API开发的任何站点进行彻底的SEO审核确实值得。

    如何禁用WordPress REST API

    如果您不希望应用程序能够使用REST API从您的站点访问数据,您可以禁用它。请记住,任何人都可以访问公共数据,而不仅仅是您。

    为此,您可以安装Disable WP REST API插件。这将为未登录到您的站点的任何人禁用REST API。

    禁用WP REST API插件

    或者,您可以向主题的函数文件中添加一些代码或编写自己的插件。最好编写一个插件,因为这不是特定于主题的功能。

    在您的插件中,只添加两行:

    add_filter( 'json_enabled', '__return_false' );
    add_filter( 'json_jsonp_enabled', '__return_false' );
    

    这将完全禁用您站点的REST API。它可能会对您的管理屏幕产生连锁反应,因此请确保添加后一切正常。

    使用WordPress REST API的实际应用程序

    REST API为WordPress的未来提供了一些令人兴奋的可能性。以下是使用WordPress REST API创建SPA或将WordPress链接到其他站点和技术的应用程序和站点的一些示例。

    WordPress.com

    WordPress.com界面

    WordPress.com管理屏幕完全使用REST API构建,以提供用户与之交互以管理其站点的SPA。

    这使得界面和服务器之间的动态通信成为可能,并导致WordPress.org可能及时模仿的用户友好界面。

    区块编辑器(古腾堡)

    古腾堡编辑器

    同样在WordPress管理屏幕中,但这次也在自托管WordPress中,Gutenberg区块编辑器使用REST API与您的数据库进行通信并创建块。

    要使文章类型与Gutenberg编辑器一起使用,它们必须启用REST API。这意味着,如果您要注册自定义文章类型并使用Gutenberg,则需要添加以下行以启用该文章类型的区块编辑器:

    "show_in_rest" = true;

    Event Espresso

    Event Espresso

    Event Espresso是一个WordPress插件,可让用户组织和宣传活动。它利用REST API,以便用户可以从WordPress外部访问其中的数据。这意味着您可以构建移动应用程序或SPA来管理您的活动。

    UsTwo

    UsTwo

    UsTwo是一家数字机构,其网站是使用REST API作为单页应用程序构建的。这结合了使用React构建的前端和由WordPress提供支持的后端。

    他们的单个页面的内容是模块化的,其结构与标准的WordPress页面不同。为了完成这项工作,他们使用了一个自定义页面构建器插件,让他们的团队可以向站点添加模块化内容。

    USA Today

    USA Today

    USA Today的网站是使用WordPress REST API与网站中现有系统和模块的集成重建的。

    REST API允许使用JSON将站点内容推送到其他渠道,例如Facebook Instant Articles和Apple News。他们还为他们的体育部分编写了一个使用JavaScript构建的在线社交游戏。

    小结

    WordPress REST API为平台,是一个巨大的进步,远离其根源和未来。开发人员从一开始就很兴奋,但如果您一开始不熟悉REST API,您可能会对其中的原理感到困惑。

    WordPress REST API为WordPress用户和开发人员带来了一些令人兴奋的挑战,但也带来了有趣的机会。这是WordPress的未来,很可能会彻底改变我们使用WordPress进行开发的方式以及我们使用它的方式。

  • 如何在WordPress中开启REST API

    如何在WordPress中开启REST API

    要开启WordPress的REST API,您可以按照以下步骤进行操作:

    1. 登录WordPress管理面板。
    2. 选择“设置”菜单下的“固定链接”。
    3. 在“固定链接设置”页面中,将“常规设置”选项卡中的“默认”选项更改为“帖子名称”。
    4. 保存更改。
    5. 在WordPress安装目录中打开functions.php文件,并将以下代码添加到文件末尾:
    add_filter('rest_authentication_errors', 'disable_rest_api');
    function disable_rest_api($access){
      return new WP_Error('rest_disabled', __('The WordPress REST API has been disabled.'), array('status' => rest_authorization_required_code()));
    }
    
    1. 保存更改并关闭文件。
    2. 打开.htaccess文件,并添加以下代码:
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress
    
    1. 保存更改并关闭文件。

    现在,您已经成功开启了WordPress的REST API。您可以使用REST API来访问WordPress的内容和功能,例如发布文章、更新页面、获取评论等等。

  • WordPress REST API 常用接口大全

    WordPress REST API 常用接口大全

    WordPress REST API 常用接口大全

    WordPress REST API 是一种基于 HTTP 协议的 API,可以让我们以 JSON 格式获取 WordPress 站点的数据。如果你了解 REST API 的基本概念,那么就可以很方便地使用 WordPress REST API 来完成一些功能。下面是 WordPress REST API 中比较常用的一些接口大全,以及一些示例代码和说明。

    1. 获取文章列表

    通过调用 wp/v2/posts 接口可以获取文章列表,该接口可以加上多个参数以实现筛选排序等功能。

    示例代码:

    fetch('https://example.com/wp-json/wp/v2/posts').then(response => response.json()).then(posts => {  // do something with the posts}); 

    2. 获取单篇文章

    通过调用 wp/v2/posts/{id} 接口可以获取某篇文章的详细信息,例如标题、内容、作者、发布时间等。

    示例代码:

    fetch('https://example.com/wp-json/wp/v2/posts/1').then(response => response.json()).then(post => {  // do something with the post}); 

    3. 获取页面列表

    通过调用 wp/v2/pages 接口可以获取页面列表,与获取文章列表类似。

    示例代码:

    fetch('https://example.com/wp-json/wp/v2/pages').then(response => response.json()).then(pages => {  // do something with the pages}); 

    4. 获取单个页面

    通过调用 wp/v2/pages/{id} 接口可以获取某个页面的详细信息,与获取单篇文章类似。

    示例代码:

    fetch('https://example.com/wp-json/wp/v2/pages/1').then(response => response.json()).then(page => {  // do something with the page}); 

    5. 获取分类列表

    通过调用 wp/v2/categories 接口可以获取分类列表,分类也可以加上多个参数进行筛选。

    示例代码:

    fetch('https://example.com/wp-json/wp/v2/categories').then(response => response.json()).then(categories => {  // do something with the categories}); 

    6. 获取单个分类

    通过调用 wp/v2/categories/{id} 接口可以获取某个分类的详细信息。

    示例代码:

    fetch('https://example.com/wp-json/wp/v2/categories/1').then(response => response.json()).then(category => {  // do something with the category}); 

    7. 获取标签列表

    通过调用 wp/v2/tags 接口可以获取标签列表。

    示例代码:

    fetch('https://example.com/wp-json/wp/v2/tags').then(response => response.json()).then(tags => {  // do something with the tags}); 

    8. 获取单个标签

    通过调用 wp/v2/tags/{id} 接口可以获取某个标签的详细信息。

    示例代码:

    fetch('https://example.com/wp-json/wp/v2/tags/1').then(response => response.json()).then(tag => {  // do something with the tag}); 

    9. 获取评论列表

    通过调用 wp/v2/comments 接口可以获取评论列表。

    示例代码:

    fetch('https://example.com/wp-json/wp/v2/comments').then(response => response.json()).then(comments => {  // do something with the comments}); 

    10. 获取单个评论

    通过调用 wp/v2/comments/{id} 接口可以获取某个评论的详细信息。

    示例代码:

    fetch('https://example.com/wp-json/wp/v2/comments/1').then(response => response.json()).then(comment => {  // do something with the comment}); 

    结语

    以上是 WordPress REST API 的常用接口大全,希望可以帮助到大家。除了上面提到的接口,WordPress REST API 中还有很多其他的接口,建议大家可以去官方文档查看更多信息。

    其他类似参考获取数据:

    此段介绍WP REST API 常用的获取数据(GET)的接口,提交数据因涉及到较为复杂的认证,此篇文章限于篇幅,后面看情况,再计划出一篇专门的WP REST API认证的文章单独介绍。

    注:本文介绍的是WP REST API V2 版本,wordpress 4.4以上版本

    1、文章

    (1)获取最新文章(默认获取到最新的10篇文章)

    http://www.website.com/wp-json/wp/v2/posts

    与

    http://www.website.com/wp-json/wp/v2/posts?page=1

    效果相同,page用于指定页数,WP REST API 默认返回10条数据,用page指定数据获取的游标。如

    http://www.website.com/wp-json/wp/v2/posts?page=2

    可取回最新的第11条数据到第20条数据,以此类推。

    (2)设置获取的每页文章数量及分页

    http://www.website.com/wp-json/wp/v2/posts?filter[posts_per_page]=5

    filter[posts_per_page]=5 用于指定返回文章每页的数量,这里指定每页数量为5篇。

    filter[posts_per_page]与page联合使用:

    http://www.website.com/wp-json/wp/v2/posts?filter[posts_per_page]=5&page=2

    (3)获取指定分类的文章

    http://www.website.com/wp-json/wp/v2/posts?filter[cat]=2

    filter[cat]=2 指定分类ID为2 ,返回分类ID为2的文章。

    分类ID是每个分类目录在创建时自动生成的ID,在wordpress后台“文章”==》“分类目录”中,把鼠标放在分类名称上面,页面下方会出现一个网址,网址中的参数tag_ID=2就是这个分类名称的分类ID。如果没有出现网址,可以点击分类名称下的“编辑”,然后查看网页地址栏,同样可以得到tag_ID=2。下面的标签ID的获得方法也一样。

    (4)获取指定标签的文章

    http://www.website.com/wp-json/wp/v2/posts?filter[tag]=library

    filter[tag]=library 指定标签名为“library”的文章

    (5)获取指定分类和有指定标签的文章

    http://www.website.com/wp-json/wp/v2/posts?filter[cat]=2&filter[tag]=library

    上面两个结合一起,可以得到更具体精确的文章。

    (6)获取指定日期的文章

    http://www.website.com/wp-json/wp/v2/posts?filter[year]=2016&filter[monthnum]=03

    filter[year]=2016&filter[monthnum]=03 设置指定的日期

    (7)获取指定作者的文章

    http://www.website.com/wp-json/wp/v2/posts?filter[author_name]=jinyun

    filter[author_name]=jinyun设置指定作者名字

    (8)按关键词搜索文章

    http://www.website.com/wp-json/wp/v2/posts?filter[s]=金云

    filter[s]=金云 :按给定的关键词搜索文章,返回包含“金云”关键词的文章。

    (9)获取随机文章

    http://www.website.com/wp-json/wp/v2/posts?filter[orderby]=rand

    其中orderby还可以为指定的字段排序

    (10)获取相关文章

    在网站中,在做SEO优化和页面内容布局时,获取相关文章是比较常见的,可以通过以上几个条件组合来达到获取相关文章的效果。

    按标签获取相关文章:

    http://www.website.com/wp-json/wp/v2/posts?filter[orderby]=rand&filter[tag]=library&filter[posts_per_page]=6

    按分类获取相关文章:

    http://www.website.com/wp-json/wp/v2/posts?filter[orderby]=rand&filter[cat]=2&filter[posts_per_page]=6

    (11)获取指定文章的数据

    http://www.website.com/wp-json/wp/v2/posts/189

    得到ID为189的文章数据

    2、分类和标签

    (1)获取所有的分类

    http://www.website.com/wp-json/wp/v2/categories

    (2)获取指定分类ID的分类信息

    http://www.website.com/wp-json/wp/v2/categories/2

    (3)获取所有的标签

    http://www.website.com/wp-json/wp/v2/tags

    (4)获取指定标签ID的标签信息

    http://www.website.com/wp-json/wp/v2/tags/3

    3、媒体文件

    (1)获取所有的媒体信息

    http://www.website.com/wp-json/wp/v2/media

    (2)获取指定媒体ID的媒体信息

    http://www.website.com/wp-json/wp/v2/media/17

    4、页面

    (1)获取所有的页面信息

    http://www.website.com/wp-json/wp/v2/pages

    (2)获取指定页面ID的页面信息

    http://www.website.com/wp-json/wp/v2/pages/289

    5、类型

    (1)获取当前wordpress所有的内容类型

    http://www.website.com/wp-json/wp/v2/types

    一般情况下会返回post,page和attachment三种类型

    (2)获取指定类型

    http://www.website.com/wp-json/wp/v2/types/post

    6、评论

    (1)获取所有评论信息

    http://www.website.com/wp-json/wp/v2/comments

    (2)获取指定评论ID的单条评论信息

    http://www.website.com/wp-json/wp/v2/comments/2

    7、用户

    (1)获取所有的用户信息

    http://www.website.com/wp-json/wp/v2/users

    (2)获取指定用户ID的用户信息

    http://www.website.com/wp-json/wp/v2/users/1

    以上即是WP REST API 内置API接口最为常用的接口数据获取方法。

  • Google Play订阅功能怎么使用?

    Google Play订阅功能怎么使用?

    谷歌最近几年订阅功能的使用量大大增加,并且在营收方面也屡创新高,那么订阅功能具体是什么,如何使用呢?下面会为大家做一些基础的介绍,还有后台的操作使用说明。

    什么是订阅?

    订阅是应用内购买结算中提供的一种商品类型,利用订阅,您可以通过自己的应用出售内容、服务或功能,并以您指定的间隔定期自动向用户收费。

    配置和发布订阅

    一、您可以使用 Developer Console 配置和发布订阅,然后从 Android 设备上安装的应用出售这些订阅,就像出售其他应用内商品一样。 在 Developer Console 中,您可以创建订阅商品并将其添加到商品列表,然后为每个订阅设置价格和可选试用期,选择结算间隔,最后发布。

    后台创建订阅的位置

    配置订阅商品,要创建和管理订阅,您可以使用 Developer Console 为应用设置商品列表,然后为每个订阅商品配置以下属性:

    • 购买类型:始终设置为订阅
    • 订阅 ID:订阅的标识符
    • 发布状态:已取消发布/已发布
    • 语言:用于显示订阅的默认语言
    • 标题:订阅商品的标题
    • 说明:向用户提供的订阅详情
    • 价格:每个重复周期的默认订阅价格
    • 重复周期:结算周期的间隔(按周/按月/按年)
    • 宽限期:对于付款遭拒的情形,您可以选择为用户提供宽限期。用户必须在宽限期结束之前解决其付款问题。否则,系统会撤消其订阅。

    其他币种的价格(可以自动填充)

    后台操作界面的一部分

    当配置好以上信息后,在后台就已经成功创建了相应的订阅商品,后面要做的就是将订阅ID使用到游戏或应用内实现相应的功能即可。

    二、在 Developer Console 中创建订阅时,您可以使用任何可用币种设置订阅的价格。每个订阅都必须有一个不等于零的价格。 您可以为相同内容的多个订阅设置不同的价格。例如,您可以为按年订阅提供一个相对于按月订阅的折扣。

    三、如果要更改订阅的价格,您可以用新价格发布一个新订阅商品 ID,然后在应用中提供此订阅。已经购买的用户将继续支付原始价格,但是新用户将以新价格支付。

    四、您可以设置一个免费试用期,让用户可以在购买前试用您的订阅内容。试用期将持续到您设置的时间,随后将自动转换为按照订阅的结算间隔和价格管理的完整订阅。Google Play 支持所有订阅类型的免费试用,包括季节性订阅。

    五、在 Developer Console 中或者通过 API 完成订阅商品详情的配置后,您可以在应用商品列表中发布订阅。在商品列表中,您可以添加订阅、应用内商品,或者两者。您可以添加可访问不同内容或服务的多个订阅,也可以添加可访问相同内容但间隔或价格不同的多个订阅,例如促销。

    六、将订阅或应用内商品添加到商品列表后,您必须先发布商品,之后 Google Play 才能将其设置为可以购买。请注意,您还必须发布应用,以便 Google Play 将商品设置为可以在应用内购买。您可以从应用的商品列表中移除订阅商品,不让用户查看或购买。

    用户取消订阅

    一、用户可以从 Play 商店应用的 My Apps 屏幕查看其所有订阅的状态并根据需要取消订阅。目前不支持从发起购买的应用内取消订阅。

    二、在用户取消订阅时,Google Play 不会为当前结算周期提供退款。相反,Google Play 允许用户继续访问已取消的订阅,直至当前结算周期结束,随后它将终止订阅。例如,如果用户购买了一个按月订阅并在当前周期的第 15 天将其取消,Google Play 会将订阅的截止时间视为当前周期的第 30 天(或者其他日期,具体取决于月份)结束。

    三、当用户卸载包含已购买订阅的应用时,Play 商店应用将通知用户存在有效订阅。如果用户选择继续卸载,应用将被移除,订阅仍保持有效,重复结算也将持续。用户可以随时返回 Play 商店应用的 My Apps 屏幕取消关联的订阅。

    文章来源:知乎