hetemlのcronでwordpressを実行

wordpressで、毎朝10時に何かを実行したいときなどにwordpressに付属している「WP-Cron」というタイマー機能がありますが、このサイトに誰かしらがアクセスしないと実行されません。例えば10時1分に今日はじめて誰かがサイトにアクセスしたら10時1分に実行されるといういわば「疑似」タイマーです。

レンタルサーバheteml(ヘテムル)のcron機能

レンタルサーバheteml(ヘテムル)にcron機能がついていましたので、これを使いたいと思います。 とりあえず、heteml(ヘテムル)の管理画面にcronというメニューがありますので、ここで「cron」を追加します。
cron の設定名 任意の名前
日付 実行する日時を(分、時、日、月、曜日)から選択します。
実行ファイルフルパス 実行するファイルのパスを入力します。

shファイル

cron.sh

#!/bin/sh

/usr/local/php/7.4/bin/php /home/users/0/ユーザー名/web/フルパス/test.php

exit

上の記述を「cron.sh」というファイルに記入しFTPにてサーバにUPします。 この「cron.sh」を管理画面の「実行ファイルフルパス」から設定します。 上記cron.shの中に記載ある通り、実際に実行するファイルは「test.php」としています。

私の場合、phpバージョン7.4を使用しているので上記のようになります。

なお、このshファイルはパーミッションを700に、改行コードLFに設定する必要があり、さらにFTPの転送設定はASCII(アスキー)である必要があるそうです。

phpファイル

cronから実行されたshファイルで、実際に処理するphpを呼び出しています。 タイトルにwordpressとありますが、ここではwordpressのパッケージの外に出した(なんとなく)phpファイルから wp-blog-header.phpをインポートし、wordpressの機能を使えるようにしています。

test.php

<?php
require_once __DIR__ . '/wordpress/wp-blog-header.php';

$args = array(
    'post_type' => 'post',
    'posts_per_page' => -1
);
$posts = get_posts( $args );
foreach ( $posts as $post ) : setup_postdata( $post );
//何かの処理
endforeach;
?>

まとめ

heteml(ヘテムル)の管理画面から直接phpを実行することもできるようなのですが、 どうもうまくいかなかったので、shを通して実行したら無事動作を確認できました。
ご依頼・お問い合わせ