道招

参考教程实现WordPress更新博文通知钩子插件

如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!

参考教程实现WordPress更新博文通知钩子插件

搞一个更新博客文章的钩子插件,目前的功能是更新自己的PWA缓存版本

<?php

 /*

 Plugin Name: Daozhao Blog

 Description: wordpress操作post的钩子处理插件

 Version: 1.1

 Author: Shadow Prompt

 Author URI: https://www.daozhao.com

 License: GPLv2

 */

if(defined('ABSPATH') && defined('WPINC')) {
    add_action("init", array("daozhaoBlog", "Enable"), 15, 0);
    register_activation_hook( __FILE__, 'activation');
    register_deactivation_hook( __FILE__, 'deactivation' );
    add_action('plugins_loaded', 'daozhao_footer_message_plugin');
    register_uninstall_hook( __FILE__, 'uninstall' );
}

 function daozhao_footer_message_plugin() {
     echo `加载完成了`;

     add_action( 'wp_footer', 'daozhao_footer_message', 100 );
     activation();
 }

function activation() {
    add_action('save_post', 'daozhao_blog_do_post', 100);
}

function daozhao_footer_message() {
    echo `基于 <a href="http://wordpress.org" >WordPress </a>架设。`;
}

function deactivation(){
}

function uninstall() {

}

class daozhaoVersion{
    public $cacheName;
    function __construct($v) {
        $this->cacheName = $v;
    }
}

// https://www.runoob.com/php/php-ref-curl.html
function postUrl($url, $data){
    $data  = json_encode($data);
    $headerArray =array("Content-type:application/json", "Accept:application/json");
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return json_decode($output, true);
}

function daozhao_blog_do_post($post_id) {
    $queryUrl = 'xxx.do';
    $updateUrl = 'yyy.do';
    $thePath = plugin_dir_path( __FILE__ );
    $result = postUrl($queryUrl, new daozhaoVersion("daozhao-v2.00"));
    $cacheName = explode("-v", $result["cacheName"]);
    $preVersion = number_format($cacheName[1], 3);
    $newVersion = "daozhao-v".($preVersion + 0.01);
    $result = postUrl($updateUrl, new daozhaoVersion($newVersion));
    file_put_contents( $thePath.'log.txt', $result->cacheName.' by '.$post_id);
    echo 'post_id: '.$post_id;
}
 ?>

在更新接口yyy.do收到通知后更新service-worker.js里面的版本,保证最新的文章能在列表中刷出来。

实践发现‘save_post’存在可能被其它插件或者时机调用的情况,所以建议我们通过数据库查询判断下$row['post_type'] == "post" && $row['post_status'] == "publish"再进行更新调用接口的操作。

更新时间:
上一篇:WordPress钩子Action Hook与Filter Hook下一篇:转译:使用react hooks优化回调函数在组件间的传递,useState,useReducer?

相关文章

webpack笔记——hook执行时call的是什么

我们一般使用的插件都是Hook子类,比如SyncHook,没有复杂的重写基类Hook的compile方法 先看Hook基类 // node_module/tapable/Hook.js cla 阅读更多…

markdown是不会用还是不好用?自研vscode插件来帮忙,甲方运营人员大呼好用

背景 随着使用markdown语法编写内容越来越流行,有的程序员也开始给甲方做网站时使用markdown来编写文章了,比如用hexo博客系统建站。 使用markdown语法能减轻程序员寻找富 阅读更多…

eclipse添加插件

eclipse做为当下最流行的开源IDE之一,Eclipse的一大优势就在于其无数优秀的插件。一个好的插件可以大大的提高我们的工作效率,学习如何安装Eclipse插件自然也是必修课了。下面介绍Ecli 阅读更多…

添加了runcode运行代码插件

增加一个文本框用来运行代码(html/css/javascript) 使用方法 // 演示 window.alert("Hello world!"); You can 阅读更多…

小改wordpress的get_permalink,支持固定链接设置值和插件获取值不同

因为本站的前端展示放弃使用WordPress博客系统的,而是改用自己的vue服务端渲染了,在保留原来的链接地址(比如 https://www.daozhao.com/8531.html )不变的情h 阅读更多…

对微内核的一点执念

自从知道了这个名词,咋一听觉得很神秘的,等看了网上的例子才发现其实没有那么高不可攀,等对自己周围主要产品的深入了解后发现这个思想原来在我们的周围很常见的,比如webpack,nginx等。 之前还写 阅读更多…

关注道招网公众帐号
友情链接
消息推送
道招网关注互联网,分享IT资讯,前沿科技、编程技术,是否允许文章更新后推送通知消息。
允许
不用了