0

特定のカテゴリ (数千の投稿を含む) からすべての投稿をテキスト ドキュメントにエクスポートする必要があります。そして、誰かがこのドキュメントに修正と変更を加え、その後、更新されたすべての投稿を WP に入力する必要があります。
そこで私は、XML 文書を作成するのが最善の方法であると判断しました (この方法により、投稿を簡単に入力することができます)。
だから私のコードは次のとおりです。

require_once(dirname(__FILE__) . '/wp-blog-header.php');

$counter = 0;
$recorded = array();
$double=0;

$handle = fopen("all_posts.xml", "w");
fwrite($handle, "<all_posts>" . "\r\n"); // the root XML tag

// get all the categories from the global category  
$global_cat = get_categories(array("child_of"=>5, 'pad_counts'=>true, 'hierarchical' => 
false));

 foreach($global_cat as $child_cat){

global $post;
$args = array('numberposts' => 50000,'cat' => $child_cat->cat_ID);
print_r($child_cat); echo "<br>" . $counter ."<br>";
$q_posts = get_posts($args);
foreach($q_posts as $post){
    setup_postdata($post);

    if( in_array($post->ID, $recorded ) ) {continue;}
    $recorded[] = $post->ID;    

    $counter++;
    $title = get_the_title();
    $cur_categories = get_the_category();
    $cur_tags = get_the_tags();
    $d = get_the_date();
    $cont = get_the_content();

    fwrite($handle, "<post>" . "\r\n");

    fwrite($handle, "<title>" . $title . "</title>" . "\r\n");
    fwrite($handle, "<id>" . $post->ID . "</id>" . "\r\n");
    fwrite($handle, "<cur_cat>" . $child_cat->name . "</cur_cat>" . "\r\n");

    fwrite($handle, "<categories>\r\n");
        foreach ($cur_categories as $cat) {
            fwrite($handle, "<cat>" . $cat->cat_name . "</cat>");
        }               
    fwrite($handle, "\r\n</categories>" . "\r\n");

    fwrite($handle, "<tags>\r\n");
        foreach ($cur_tags as $tag) {
            fwrite($handle, "<tag>" . $tag->name . "</tag>");
        }               
    fwrite($handle, "\r\n</tags>" . "\r\n");
    fwrite($handle, "<date>" . $d . "</date>\r\n");

    fwrite($handle, "<content>\r\n" . $cont . "</content>\r\n\r\n");

    fwrite($handle, "</post>" . "\r\n");


}               

}
fwrite($handle, "</all_posts>");
fclose($handle);

問題は、10,000 くらいあるので、サーバーが応答しないことです (xml ファイルが大きくなったためか、php スクリプトの処理に時間がかかりすぎたためだと思います)。2000件の投稿しかないカテゴリから投稿をエクスポートしようとした場合にのみ、うまく機能します。
それを修正する方法は何ですか?

4

3 に答える 3

1

コードの先頭で、max_execution_time を無制限 (または数分間) に設定します ...

ini_set('max_execution_time', 0);

PHP が使用するメモリ制限を引き上げてみてください

ini_set('memory_limit', '100M');
于 2012-06-04T07:48:56.697 に答える
0

これを試して。

あなたが持っている場所:

$args = array('numberposts' => 50000,'cat' => $child_cat->cat_ID);

置く

$args = array('numberposts' => 50000,'cat' => $child_cat->cat_ID, 'post_status' => 'publish' );

これにより、公開されている投稿のみが確実に表示されます。これは、あなたの望むことですか?またはあなたはそれらのすべてが欲しいですか。

それらすべてが必要な場合は、カテゴリに基づいてすべてのコードをwhileループに入れ、カテゴリ名をファイルの名前に挿入して、複数のファイルを作成してみてください。ただし、それらすべてを個別に呼び出すこともできます。ファイルが大きすぎるため、これがおそらく最善の策です。

Ethan Brouwer

于 2012-06-04T07:52:43.457 に答える
0

スクリプトの制限時間に達している可能性があります。これはset_time_limitで変更できる場合があります。

それ以外の場合は、一度に数百ページをエクスポートするように制限できます。実行間のoffsetオプションを変更するだけです。get_posts

于 2012-06-04T07:44:54.997 に答える