WordPress Cron 每天更新 html 文件一次

WordPress Cron to update html file once a day

所以我刚刚意识到 WordPress Cron API 并且它非常适合我试图解决的任务。我需要 WordPress Cron 来更新我的多站点上的 html 文件。
--------
目标: 我想要实现的是在我的站点网络中,我需要主站点使用主题 A 的 child 主题,所有子站点都使用主题 B 的 child 主题。然后所有子站点都必须实现header 网站顶部的主站点,包括其样式、链接等。
--------
我一直在阅读 WordPress Cron 的工作原理,但我不知道如何处理我试图解决的这个任务。我想我需要创建一个 mu-plugin 并将我的 Cron 作业挂接到 Wordpress,大致如下所示:

register_activation_hook( __FILE__, 'plugin_job' );
    function plugin_job(){
     //Use wp_next_scheduled to check if the event is already scheduled
     $timestamp = wp_next_scheduled( 'plugin_create_job' );

     //If $timestamp == false schedule
     if( $timestamp == false ){
           //Schedule the event for right now, then to repeat daily using the hook
           wp_schedule_event( time(), 'daily', 'plugin_create_job' );
     }
}

//Hook our function
add_action( 'plugin_create_job', 'create_job' );
function create_job(){
     //Generate html file from Mainsites header.php
}

我绝对可以使用一些指导和意见:-)

我会说这种方法使问题过于复杂,但如果您想通过 wp_cron 工作来完成,您正在寻找的方法是 file_get_contents and file_put_contents

所以您需要使用 file_get_contents 将 header 文件转换为字符串,将该字符串保存为变量,然后使用 file_put_contents 将该字符串写入html 文件在你服务器的某处。

function create_job(){
    //Generate html file from Mainsites header.php
    $header_contents = file_get_contents( get_template_directory_uri() . '/header.php' );

    //If the header contains any information write to file
    if( $header_contents ) {
        file_put_contents( 'path/to/html/file.html', $header_contents );
    }
}

另外两点...wp_cron 非常糟糕,可能的话应该是 replaced with a real server CRON job

另外,不要忘记在插件停用时破坏 cron 计划...

function myplugin_deactivation() {
    wp_clear_scheduled_hook( 'plugin_create_job' );
}

register_deactivation_hook( __FILE__, 'myplugin_deactivation' );

或者只需删除所有 child 主题的 header.php 文件,然后对 get_header 的所有调用将从 parent 中检索 header.php 文件主题。

解决此问题的另一种方法是在 parent 主题的函数文件中创建一个函数,该函数仅输出主题 A 的主题 header 的内容...

function mysite_get_custom_header() {
    return file_get_contents( get_theme_root_uri() . '/child-theme-A/header.php' );
}

然后将 Child 主题 B 中 get_header() 的所有实例替换为...

echo mysite_get_custom_header();

希望对您有所帮助

此致