0

私は現在ワードプレスを使って電子雑誌を作ろうとしていますが、ほとんど完成しています。ホームページには、その版の e-zine に含まれる「作品」のリストが表示されます。エディションの有効期限が切れると (現在は Post Expirator プラグインを使用)、その特定の (期限切れになった) エディションのインデックスを表示するフロント ページに似た新しいページが自動的に作成されるようにしたいと思います。

私はPHPの使用経験があまりなく、まだワードプレスの初心者です。どうすればこれを達成できますか?

4

2 に答える 2

0

Felipeの提案を出発点として使用して、私が最終的に行ったことは次のとおりです。これを行うためのより複雑な方法があるかもしれませんが、私が言ったように、私はただの初心者なので、これが私が思いついたものです:

最初に、現在のボリューム番号を追跡する volnum 変数を作成しました。次に、フロント ページをキャッシュして、後で独立した HTML ドキュメントとして保存できるようにします。これは、get_header() の前の index.php の先頭にあります。

<?php $volnum; ?>
<?php ob_start(); ?>

最初のページには社説があり、その隣には目次があります。エディトリアル タグ (常に「voln」で、「n」はボリューム番号) のボリューム番号を保存しています (エディトリアルにはタグが 1 つしかないため、おそらく foreach は必要ありません)。

<?php $tags = get_the_tags();
      foreach ($tags as $tag){
        $volnum = $tag->name;
      }
?>

最後に、ドキュメントの最後の html の後に、次のコードを追加しました。

<?php
    $handle = opendir("past_vol/");
    $numOfFiles = count($handle);
    $volExists = false;
    for($i=0;$i<=$numOfFiles;$i++){
        $name = readdir($handle);
        if($volnum.".html" == ($name)){
            $volExists = true;
            continue; 
        }
    }
    if($volExists == false){
        $cachefile = "past_vol/".$volnum.".html";
        $fp = fopen($cachefile, 'w'); 
        fwrite($fp, ob_get_contents());
        fclose($fp);
    }
    closedir($handle);
    ob_end_flush(); 
?>

「past_vol」は過去の巻のhtmlファイルを保存しているディレクトリです。そのため、ディレクトリが開かれ、ファイルの量がカウントされ、各ファイルの名前を通過するループが開始されます。$volnum と同じ名前のファイルの場合、$volExists は true です。ループの最後で $volExists が false の場合、キャッシュされたページが保存されます。

繰り返しますが、おそらくかなり最適化される可能性がありますが、今のところこれでうまくいきます!

于 2012-11-25T03:54:24.383 に答える
0

アイデアはこれです。有効期限を取得して条件を作成するだけです。それを行うには、基本的なphpスキルが必要です。ロジックはこちら

  if($curdate > $expiration_date){ //you can change the condition into ">=" if you want to create a post on and after expiration date

      //sample wordpress wp_insert_post
      $my_post = array(
        'post_title'    => 'My post',
        'post_content'  => 'This is my post.',
        'post_status'   => 'publish',
        'post_author'   => 1,
        'post_category' => array(8,39)
      );

      // Insert the post into the database
      wp_insert_post( $my_post );

   }

詳細については、 http://codex.wordpress.org/Function_Reference/wp_insert_postをご覧ください。

于 2012-11-22T03:04:06.843 に答える