Заполняем данными сайт на WordPress: большим количеством постов и комментариев (для тестирования)
Случилось, что нужно было протестировать кое-что на WordPress и нужно было, чтобы блог содержал много информации, большое количество постов и комментариев, т.е. нужно было большое количество контента. Решил быстренько написать пару функций для быстрого заполнения сайта огромным числом демо записей. В будущем думаю еще пригодится. Ну, а так как пригодится может не только мне, выкладываю результаты.
Чтобы наполнить сайт тестовыми данными для проверки структуры и верски, смотрите эту инструкцию.
Вот код, ставить который можно в любимый function.php:
$filler = new Fill_Database_Posts( $_GET['fill_db'] ?? 0, $_GET['fill_db_comments'] ?? 0, $_GET['cats'] ?? '', $_GET['tags'] ?? '', ); $filler->init(); /** * ?fill_db=3000&cats=1|3&tags=tag1|tag2|tag3 * ?fill_db_comments=3000 */ class Fill_Database_Posts { private int $fill_limit; private int $fill_limit_comments; private string $cats; private string $tags; public function __construct( $fill_limit, $fill_limit_comments, $cats, $tags ) { $this->fill_limit = (int) $fill_limit ?: 50; $this->fill_limit_comments = (int) $fill_limit_comments ?: 50; $this->cats = sanitize_text_field( $cats ); $this->tags = sanitize_text_field( $tags ); } public function init() { add_filter( 'init', [ $this, '_fill_db' ] ); } public function _fill_db() { wp_suspend_cache_addition( true ); // disable caching $this->fill_content(); $this->fill_comments(); } // ?fill_db=3000&cats=1|3&tags=tag1|tag2|tag3 private function fill_content() { for( $i = 1; $i <= $this->fill_limit; $i++ ){ $rand = rand( 1, 99999 ); $content = ''; for( $g = 0; $g < 30; $g++ ){ $content .= "next post with random number: $rand . "; } $post_date = $this->get_random( '2020|2021|2022|2023' ) . '-0' . rand( 1, 9 ) . '-' . rand( 10, 30 ) . ' 23:25:59'; $postid = wp_insert_post( wp_slash( [ 'comment_status' => $this->get_random( 'closed|open' ), 'ping_status' => $this->get_random( 'closed|open' ), 'post_category' => array_filter( [ (int) $this->get_random( $this->cats ?: '1' ) ] ), 'tags_input' => array_filter( [ (int) $this->get_random( $this->tags ?: '' ) ] ), 'post_type' => 'post', 'post_title' => "Post with a random number $rand", 'post_content' => $content, 'post_date' => $post_date, 'post_status' => 'publish', ] ) ); if( $postid ){ $this->add_post_metadata( $postid ); } flush(); } } // ?fill_db_comments=3000 private function fill_comments() { global $wpdb; $post_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_status='publish' AND post_type='post' AND comment_status='open' ORDER BY rand() LIMIT 150" ); for( $i = 1; $i <= $this->fill_limit_comments; $i++ ){ $rand = rand( 1, 99999 ); $content = ''; for( $g = 0; $g < 5; $g++ ){ $content .= "comment: $rand . "; } $post_date = $this->get_random( '2009|2011' ) . '-0' . rand( 1, 9 ) . '-' . rand( 10, 30 ) . ' 23:25:59'; $postid = wp_insert_comment( [ 'comment_post_ID' => (int) $post_ids[ array_rand( $post_ids ) ], 'comment_author' => 'commentator name', 'comment_author_email' => 'admin@admin.com', 'comment_author_url' => '', 'comment_content' => $content, 'comment_author_IP' => '127.0.0.1', 'comment_agent' => 'Opera 10.0', 'comment_date' => $post_date, 'comment_approved' => 1, ] ); flush(); } } // Add a custom field "views" to the created posts private function add_post_metadata( $post_id ) { update_post_meta( $post_id, 'views', rand( 10, 9999999 ) ); } private function get_random( $data = '' ) { $arg = explode( '|', $data ); $rand_key = array_rand( $arg ); return $arg[ $rand_key ]; } }
Объяснять подробно не буду что и зачем. В двух словах о том, как это работает:
Чтобы заполнить блог постами
Дописываем в УРЛ, нечто такое
?fill_db=3000&cats=1|3&tags=tag1|tag2|tag3
где, 3000 - сколько постов добавятся. cats=1|3 - посты будут случайно добавляться в категорию 1 или 3. tags=tag1|tag2|tag3 - постам будут приписана одна из меток (использовать кириллицу нельзя, указываем слаги).
У постов также заполняется произвольное поле views, куда пишутся просмотры. Отредактируйте функцию fill_db_with_metadata_add_views(), чтобы изменить добавление произвольных полей.
Чтобы заполнить комментариями
Дописываем в УРЛ, нечто такое
?fill_db_comments=3000
Комментарии будут "оставляться" к случайным постам, открытым для комментирования. 3000 - количество комментариев.
Что касается того, где это можно применить? Где угодно - заполняем блог и тестируем его скорость, при 100к постов явные "болячки" всплывают на ура. Тестить можно шаблоны, функции и отдельные запросы к БД или что-нибудь еще.