Nếu đã sử dụng WP Rocket, chắc hẳn bạn đã được khuyến nghị vô hiệu hóa Cron mặc định của wp và chạy nó ở cấp sever.
Đối với website bình thường thì cứ làm theo hướng dẫn của plugin là được. Tuy nhiên, đối với wp multisite thì phải biến đổi một chút. Sau đây là phương pháp của tác giả Slavi Marinov, hoạt động trên WP-CLI. Tiến hành thôi nhỉ?
Vô hiệu hóa WP Cron mặc định
Mở wp-config.php
thêm mã sau nếu chưa có
define('DISABLE_WP_CRON', true);
Cài đặt Multisite Cron
Tạo file multi_cron.php
trong thư mục gốc với nội dung:
<?php if (!isset($_REQUEST['go'])) { if (php_sapi_name() != "cli") { return; } } // We want to see all errors error_reporting(E_ALL); ini_set('display_errors', 1); header( 'Content-type: text/plain; charset=utf-8' ); ignore_user_abort(true); set_time_limit(30 * 60); $php_cmd = 'php'; $php_cli_options = array( '/usr/local/bin/php', '/usr/bin/php', ); foreach ($php_cli_options as $php_bin_opt) { if (@is_file($php_bin)) { $php_cmd = $php_bin_opt; break; } } $wp_cli_options = array( '/usr/local/bin/wp', '/usr/bin/wp', './wp-cli.phar', ); $wp_cmd = $wp_cli_options[0]; foreach ($wp_cli_options as $wp_cli_option) { if (@is_file($wp_cli_option)) { $wp_cmd = $wp_cli_option; break; } } if (preg_match('#win#si', PHP_OS)) { // on windows we call wp directly $main_cmd = $wp_cmd; } else { $main_cmd = "$php_cmd $wp_cmd"; } $cmd = "$main_cmd site list --field=url --archived=0 --deleted=0 --skip-packages --skip-plugins --skip-themes --format=json"; $json_str = trim(`$cmd`); $blogs = empty($json_str) ? array() : json_decode($json_str, true); $blogs = empty($blogs) ? array() : $blogs; $total = count($blogs); echo "<pre>"; echo "Starting at " . date('r') . "\n"; foreach ($blogs as $idx => $url) { $cur = $idx + 1; echo "$cur of $total) Processing: [$url]\n"; $url_esc = escapeshellarg($url); $cmd = "$main_cmd cron event run --due-now --url=$url_esc"; $cmd_res = trim(`$cmd`); echo "cron: [$cmd_res]\n"; echo "\n<br/>"; // Output stuff every X few showers if ($idx % 5 == 0) { flush(); ob_flush(); } } echo "Finished at " . date('r') . "\n"; echo "</pre>"; exit(0);
Thiết lập Cron job trên server
ssh vào server và chạy lệnh:
crontab -e
Thêm vào
*/15 * * * * wget -q -O - https://domain.com/multi_cron.php?go &>/dev/null 2>&1
Lưu ý: thay domain.com
bằng tên miền chính của mạng, 15 là số phút thực hiện cron – có thể đặt tùy bạn.
Để lưu lại, nhấn Ctrl + X, y và Enter. Đừng quên khởi động lại nginx nhé.