web-dev-qa-db-ja.com

問題:サーバー上のWordPress XMLファイルに投稿をエクスポートするためのcronジョブを作成する

私は自動的に特定の日付からすべてのWordPressの投稿をエクスポートし、それを毎日ダウンロードできるサーバーにファイルを出力させる方法が必要です。

XMLフォーマットが必要とされる理由は、サイトがブログの大規模ネットワークの一部であり、親サイトがWordPressを使用せずに検索結果のコンテンツにインデックスを付けるためです。親会社は、増分を処理できないXMLパーサーを使用しています。それは一度にすべての記事の全内容を必要とします。

私のアプローチは、 export_wp を起動してバッファをファイルに出力するwp_schedule_eventを使用してcronジョブを作成することです。問題は、作成されたファイルが空だということです。

私の現在のコードは:

register_activation_hook(__FILE__, 'c3m_my_activation');
add_action('c3m_export_daily', 'c3m_export_xml');

function c3m_my_activation() {
    wp_schedule_event(time(), 'daily', 'c3m_export_daily');
}

function c3m_export_xml() {
    $ob_file = fopen('server_path_to_my_file.xml','w');

    $args=array(
        'content' => 'posts',
        'start_date' => 'october 2008',
        'status' => 'published');

        function ob_file_callback($buffer)
        {
          global $ob_file;
          fwrite($ob_file,$buffer);
        }

    ob_start('ob_file_callback');
    export_wp($args);

    ob_end_flush();
}

Export_wpに$ argsを追加せずに試してみましたが、ファイルはまだ空です。私はこれがexport_wpで達成できることを望んでいるので全部を一から書く必要はありません。

4
Chris_O

あなたの問題はob_fileがグローバルではないということです。あなたはそれをc3m_export_xml()で定義するだけです。 ob_file_callback()global $ob_fileを設定すると、空のファイルハンドルが与えられます。代わりにこれを試してください:

function c3m_export_xml() {     
    $args=array(
        'content' => 'posts',
        'start_date' => 'october 2008',
        'status' => 'published');

    ob_start();
    export_wp($args);
    $xml = ob_get_clean();

    file_put_contents('server_path_to_my_file.xml', $xml);
}
2
wyrfel