道招

参考教程实现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"再进行更新调用接口的操作。

更新时间:
上一篇:下一篇:

相关文章

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