web-dev-qa-db-ja.com

カテゴリごとに作成される投稿数を制限するにはどうすればよいですか。

カテゴリごとに作成される投稿数を制限するにはどうすればよいですか。それから一番古い投稿を削除して保存しますか?

私はこのようなことをしたいのですが。

 add_action("load-post-new.php","limit_post_per_category");
  function limit_post_per_category(){
   $category = get_current_category(); //--not sure about this function....//
   if ($category == "category1") { 

    $category_post_count = count_posts($category);
    if($category_post_count>=10){
        delete the oldest post in the category;
        save post;
  }
 }
}
1
user1619177

私はそれをpublish_postにフックするでしょう、それであなたはドラフトなどを台無しにしていません。

そして、あなたは複数のカテゴリを考慮し、それぞれの中の投稿数を数え、そして10以上のものを削除する必要があります。

おそらく、このような何かがあなたを正しい方向に導いてくれるでしょう。ほとんどテストされていない、若干の調整が必要かもしれません。

function on_post_publish( $ID, $post ) {

    $cat = get_the_category( $ID ); //returns array of categories

    foreach ($cat as $c) {    //doing the rest for each cat in array
        $args = array(
                    'orderby'  => 'post_date',   //using the post date to order them
                    'order'     => 'ASC',       // putting oldest at first key
                    'cat'       => $c,          // only of the current cat
                    'posts_per_page'  => -1,   //give us all of them
                    'fields' => 'ids'         //only give us ids, we dont want whole objects
            );
       $query = new WP_Query( $args );

       $count = $query->post_count;         //get the WP_Queries post_count object value

       if ($count > 10) {                         // if that value is more than 10
            $id_to_delete = $query->posts[0];    //get oldest post from query
            wp_delete_post( $id_to_delete );    //delete it
       }


    }
    wp_reset_postdata(); //resetting to main query just in case


}

add_action(  'publish_post',  'on_post_publish', 10, 2 );
0
hwl