web-dev-qa-db-ja.com

CrontabでW3トータルキャッシュフラッシュ機能を実行する

OK。私は本当にこれに困惑しています。

基本的には、crontabのcronジョブの一部として、WordpressプラグインW3 Total Cacheの関数を呼び出す必要があります。毎晩ページキャッシュ全体を自動的にクリアしたいのですが。

これが私が呼ぶ必要があるwordpressの中でうまく働くコードです:

if (function_exists('w3tc_pgcache_flush')) {
w3tc_pgcache_flush();
} 

私は現在以下のスクリプトを使用しています。

#!/usr/bin/php

<?php

define('DOING_AJAX', true);
define('WP_USE_THEMES', false);
$_SERVER = array(
    "HTTP_Host" => "http://example.com",
    "SERVER_NAME" => "http://example.com",
    "REQUEST_URI" => "/",
    "REQUEST_METHOD" => "GET"
);
require_once('/path-to-file/wp-load.php');

wp_mail('[email protected]', 'Automatic email', 'Hello, this is an automatically scheduled email from WordPress.');

if (function_exists('w3tc_pgcache_flush')) {
w3tc_pgcache_flush();
} 

?>

そしてコマンドライン:

php -q /path-to-file/flushtest.php

私はwp_mail関数を使ってテストして何かが手に入ることを確認しました。

このスクリプトは、ページキャッシュがフラッシュされないことを除けば、正常に機能しています。私はそのEメールを受け取りますが、ログにもエラーはありません。

何か案は?

ご協力いただきありがとうございます。

1
David

これは私がこれをやっていく方法です:

最初にあなたのテーマディレクトリ内のファイル名のハッシュでファイルを作成してください - これはmd5( 'foobar')です:

3858f62230ac3c915f300c664312c63f.php

そのファイルの中には、次のようなものがあります。

//Use the file name as an API key of sorts
$file = explode('.', basename(__FILE__));
$key = $file[0];

//Trigger the WP function - corresponds to the foo_w3tc_flush_cron() function
define('FOO_W3TC_FLUSH', true);
define('FOO_W3TC_FLUSH_KEY', $key);

//Set headers
Header('Cache-Control: no-cache');
Header('Pragma: no-cache');

//Set W3TC Constants
define('DONOTMINIFY', true);
define('DONOTCACHEDB', true);
define('DONOTCACHEPAGE', true);

//Set WP Constants
define('DOING_AJAX', true);

//Load WP
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/wp-load.php'))
    require_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
die();

次のような関数をfunctions.phpファイルに追加してください。

$api_key_plaintext = 'foobar';
define('FOO_W3TC_FLUSH_API_KEY', md5($api_key_plaintext));

add_action('plugins_loaded', 'foo_w3tc_flush_cron', 1);
function foo_w3tc_flush_cron(){
    $update = FOO_W3TC_FLUSH_UPDATE;
    $key = FOO_W3TC_FLUSH_UPDATE_KEY;

    if($update && $key == FOO_W3TC_FLUSH_API_KEY){
        if (function_exists('w3tc_pgcache_flush')){
            if(w3tc_pgcache_flush())
                wp_mail('[email protected]', 'Success!', 'Hello, this is an automatically scheduled email from WordPress.');
            else
                wp_mail('[email protected]', 'Failure', 'Hello, this is an automatically scheduled email from WordPress.');
        }
        echo "Foo W3TC Cache Message"; //For logger
        die(); //We don't need the rest of WP to load
    }

}

最後に、次のcrontabを追加して、午後11時59分(サーバー時間)に実行し、結果を記録するためのホームディレクトリへのファイルパスを含めます。

59 23 * * * curl --header 'Cache-Control: max-age=0' http://your-domain.com/wp-content/themes/your-theme/3858f62230ac3c915f300c664312c63f.php >> /home/myuser/w3tc-flush.log

これが役立つことを願っています!

2
Brian Fegter