WordPress Cron每天更新一次html文件

时间:2015-02-17 09:34:21

标签: php wordpress plugins cron

所以我刚刚实现了WordPress Cron API,它非常适合我试图解决的任务。我需要WordPress Cron更新我的Multisite上的html文件。
--------
目标: 我想要实现的是在我的网站我需要主网站使用主题A的子主题和所有子网站使用主题B的子主题。然后所有子网站必须在顶部实现主站点的标题该网站,包括其样式,链接等。
--------
我一直在阅读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
}

我绝对可以使用一些指导和输入: - )

1 个答案:

答案 0 :(得分:2)

我想说这个方法让问题过于复杂,但如果你想通过wp_cron工作来完成,那么你要找的方法是file_get_contentsfile_put_contents

因此,您需要使用file_get_contents将头文件转换为字符串,将该字符串保存为变量,然后使用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' );

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

另一种解决方法是在父主题的函数文件中创建一个函数,它只输出主题A的主题标题的内容......

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

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

echo mysite_get_custom_header();

希望有所帮助

此致