private function get_price_message_for_update_all()

in admin/class-amazonpolly-admin.php [2086:2150]


	private function get_price_message_for_update_all() {
		$post_types_supported = $this->amazon_polly_get_posttypes_array();
		$number_of_characters = 0;

		$posts_per_page  = apply_filters( 'amazon_polly_posts_per_page', 5 );
		$count_posts     = wp_count_posts()->publish;
		$max_count_posts = 100;

		// Retrieving the number of characters in all posts.
		$paged      = 0;
		$post_count = 0;

		do {
			$paged++;
			$wp_query = new WP_Query(
				array(
					'posts_per_page' => $posts_per_page,
					'post_type'      => $post_types_supported,
					'fields'         => 'ids',
					'paged'          => $paged,
				)
			);

			$number_of_posts = $wp_query->max_num_pages;

			while ( $wp_query->have_posts() ) {
				$post_count++;
				$wp_query->the_post();
				$post_id = get_the_ID();

				$clean_text     = $this->clean_text( $post_id );
				$post_sentences = $this->break_text( $clean_text );
				if ( ! empty( $post_sentences ) ) {
					foreach ( $post_sentences as $sentence ) {
						$sentence              = str_replace( '**AMAZONPOLLY*SSML*BREAK*time=***1s***SSML**', '', $sentence );
						$sentence              = str_replace( '**AMAZONPOLLY*SSML*BREAK*time=***500ms***SSML**', '', $sentence );
						$number_of_characters += strlen( $sentence );
					}
				}
			}

			// If we reached the number of posts which we wanted to read, we stop
			// reading next posts.
			if ( $post_count >= $max_count_posts ) {
				break;
			}
		} while ( $paged < $number_of_posts );

		// Price for converting single character according to Amazon Polly pricing.
		$amazon_polly_price = 0.000004;

		// Estimating average number of characters per post.
		if ( 0 !== $post_count ) {
			$post_chars_count_avg = $number_of_characters / $post_count;
		} else {
			$post_chars_count_avg = 0;
		}

		// Estimating the total price of convertion of all posts.
		$total_price = $amazon_polly_price * $count_posts * $post_chars_count_avg;

		$message = 'You are about to convert ' . number_format( $count_posts, 0, '.', ',' ) . ' pieces of text-based content, which totals approximately ' . number_format( $number_of_characters, 0, '.', ',' ) . ' characters. Based on the Amazon Polly pricing ($4 dollars per 1 million characters) it will cost you about $' . $total_price . ' to convert all of your content into to speech-based audio. Some or all of your costs might be covered by the Free Tier (conversion of 5 million characters per month for free, for the first 12 months, starting from the first request for speech). Learn more https://aws.amazon.com/polly/';

		return $message;
	}