0

毎時間実行する wp_cron があります。

cron は、カスタム投稿タイプを反復処理する関数を呼び出します。次に、タイトルと一部のメタ データを使用して、リモート サーバーから結果をスクレイピングします。

問題は、投稿数が多いためにスクレイピングに時間がかかることです。一度に 25 件の投稿を繰り返すだけで、スクレイピングをチャンクに分割したいと考えています。これは、query_posts でオフセット パラメータを使用すると簡単ですが、動的に add_action() してオフセット変数を渡すにはどうすればよいでしょうか?

functions.php

if ( ! wp_next_scheduled( 'my_task_hook' ) ) {
         wp_schedule_event( time(), 'hourly', 'my_task_hook' );
}

add_action( 'my_task_hook', 'rock_n_roll' );

私のscraper.phpは次のようになります

function rock_n_roll($offset) {

    query_posts(array(
    'post_type' => 'wine',
    'order' => 'ASC',
    'posts_per_page' => -1,
    'offset' => $offset 
    )); 

    while (have_posts()) : the_post();

    //compare values against scraped results
    //write results to DB with update_post_meta

    endwhile;

}

基本的に、add_action() を動的に実行して、毎回 $offset の値を 25 ずつ増やす方法が必要です。

4

2 に答える 2

0

add_action()に変数を渡すことができます:

add_action( $tag, $function_to_add, $arg );

ただし、cronを実行するたびにアクションを追加する代わりに、do_action()を使用することもできます。

do_action( $tag, $arg )

とにかく、$offsetどこかに保存するのは良いので、2つのオプションがあります。

永続的な値をWP_Object_Cacheに保存します。たぶんこのドキュメントを読んで、大きなクエリ結果であなたのパフォーマンスのための別のエレガントな解決策を見つけることができます。

add_option()およびget_option( )を使用して、データベースに実際の$offset値を記録します。

変数を格納your $offsetする場合、rock_and_roll関数はパラメーターを受け取る必要がなくなり、関数内でパラメーターを取得するだけで済みます。

function rock_n_roll() {

    // Retrieve $offset value from WP_Object_Cache
    // or from database with get_option()

    query_posts(array(
    'post_type' => 'wine',
    'order' => 'ASC',
    'posts_per_page' => -1,
    'offset' => $offset 
    )); 

    while (have_posts()) : the_post();

    //compare values against scraped results
    //write results to DB with update_post_meta

    endwhile;

}
于 2013-01-21T01:51:51.563 に答える
0

あなたの $Offset は別のソースから関数に渡されます..だから、次のようなものを想像できます:

$Var = $Pre_definedoffset;
$Var = $Pre_definedoffset + 25; 
rock_n_roll($var);

これは、コードからわかることからの単なる仮定です。

コードが関数をプッシュする前に、関数に渡される整数を含む変数を変更する必要があります。

于 2013-01-21T01:13:09.203 に答える