私は自分自身のためにcronjobを書きたいです。しかし、私はWP_Query
へのアクセス権と投稿を削除する権限などを取得する必要があります。
私の質問は、WP_Query
関数を自分のPHPファイルに含めるにはどうしたらいいですか。
WP_Query
を正しく動作させるためには、必須のWordPressコア機能をカスタムPHPスクリプトに読み込む必要があります。
たとえば、my-cron.php
という名前のカスタムPHPファイルがあり、WordPressが次のようにWebルートにインストールされているとします。
public_html/
index.php
my-cron.php <--
wp-load.php
wp-settings.php
...
wp-admin/
wp-content/
wp-includes/
この設定でWP_Query
ファイルでmy-cron.php
を使用したい場合は、wp-load.php
ファイルをロードする必要があります。 my-cron.php
ファイルには、次のコードが必要です。
if ( ! defined('ABSPATH') ) {
/** Set up WordPress environment */
require_once( dirname( __FILE__ ) . '/wp-load.php' );
}
この時点で、あなたはWP_Query
へのアクセス権を持っているでしょうから、あなたはこのようにそれを使うことができます:
// simply selecting posts with category name "wordpress"
$the_query = new WP_Query( array( 'category_name' => 'wordpress' ) );
if ( $the_query->have_posts() ) {
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
}
else {
echo "No post found for category named wordpress";
}
ただし、WP_Queryには削除機能はありません。そのためには wp_delete_post()
functionまたは WPDB
クラスを使う必要があります。多くの依存関係を処理するためにwp_delete_post()
を使用することをお勧めしますが、もっと制御が必要な場合はWPDB
クラスまたは$wpdb
グローバル変数を使用できますが、そのパスを選択する場合は注意してください。
たとえば、次のCODEはID 1
の投稿を削除します。
$deleted = wp_delete_post( 1 );
if( $deleted === false ) {
echo "Couldn't delete Post with ID=1";
}
else {
echo "Deleted Post with ID=1";
}
もちろん、WP_Query
とwp_delete_post
を組み合わせて、特定の基準を満たす投稿を見つけて削除することができます。
カスタムPHPスクリプトの作成が完了したら、次のようにHTTPリクエストとして実行するために setup cronジョブ を実行する必要があります。
5 * * * * wget -q -O - http://your-domain.com/my-cron.php
WP_Query
またはwp_delete_post
function にアクセスするには、デフォルトでは認証 (または許可)が必要ないため、my-cron.php
が一般に公開されていないことを確認する必要があります。たとえば、localhost
だけにアクセスできるようにするには、my-cron.php
ファイルの先頭に次のコードを追加します。
$allowed_ip = '127.0.0.1';
if( $allowed_ip !== $_SERVER['REMOTE_ADDR'] ) {
exit( 0 );
}
これはWordPressマルチサイト環境内でサイトを削除または作成するためのものですか?もしそうなら、あなたはWP_Queryにアクセスしてネットワークを有効にしたmu-pluginのフォルダの中のPHPファイルにその関数を入れることによってサイトを扱うことができます。