web-dev-qa-db-ja.com

自分自身にWP_Queryを含める PHP ファイル?

私は自分自身のためにcronjobを書きたいです。しかし、私はWP_Queryへのアクセス権と投稿を削除する権限などを取得する必要があります。

私の質問は、WP_Query関数を自分のPHPファイルに含めるにはどうしたらいいですか。

7
Jan

カスタムPHPスクリプトでWordPressをロードします。

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にアクセスします。

この時点で、あなたは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_Querywp_delete_postを組み合わせて、特定の基準を満たす投稿を見つけて削除することができます。

セットアップCron:

カスタム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 );
}
9
Fayaz

これはWordPressマルチサイト環境内でサイトを削除または作成するためのものですか?もしそうなら、あなたはWP_Queryにアクセスしてネットワークを有効にしたmu-pluginのフォルダの中のPHPファイルにその関数を入れることによってサイトを扱うことができます。

0
Kinna T