Automattic\WooCommerce\Internal\Admin\Marketing

MarketingSpecs::get_knowledge_base_posts()publicWC 1.0

Load knowledge base posts from WooCommerce.com

Метод класса: MarketingSpecs{}

Хуков нет.

Возвращает

Массив.

Использование

$MarketingSpecs = new MarketingSpecs();
$MarketingSpecs->get_knowledge_base_posts( ?string $term ): array;
?string $term (обязательный)
-

Код MarketingSpecs::get_knowledge_base_posts() WC 8.1.1

public function get_knowledge_base_posts( ?string $term ): array {
	$terms = array(
		'marketing' => array(
			'taxonomy' => 'category',
			'term_id'  => 1744,
			'argument' => 'categories',
		),
		'coupons'   => array(
			'taxonomy' => 'post_tag',
			'term_id'  => 1377,
			'argument' => 'tags',
		),
	);

	// Default to the marketing category (if no term is set on the kb component).
	if ( empty( $term ) || ! array_key_exists( $term, $terms ) ) {
		$term = 'marketing';
	}

	$term_id      = $terms[ $term ]['term_id'];
	$argument     = $terms[ $term ]['argument'];
	$kb_transient = self::KNOWLEDGE_BASE_TRANSIENT . '_' . strtolower( $term );

	$posts = get_transient( $kb_transient );

	if ( false === $posts ) {
		$request_url = add_query_arg(
			array(
				$argument  => $term_id,
				'page'     => 1,
				'per_page' => 8,
				'_embed'   => 1,
			),
			'https://woocommerce.com/wp-json/wp/v2/posts?utm_medium=product'
		);

		$request = wp_remote_get(
			$request_url,
			array(
				'user-agent' => 'WooCommerce/' . WC()->version . '; ' . get_bloginfo( 'url' ),
			)
		);
		$posts   = [];

		if ( ! is_wp_error( $request ) && 200 === $request['response']['code'] ) {
			$raw_posts = json_decode( $request['body'], true );

			foreach ( $raw_posts as $raw_post ) {
				$post = [
					'title'         => html_entity_decode( $raw_post['title']['rendered'] ),
					'date'          => $raw_post['date_gmt'],
					'link'          => $raw_post['link'],
					'author_name'   => isset( $raw_post['author_name'] ) ? html_entity_decode( $raw_post['author_name'] ) : '',
					'author_avatar' => isset( $raw_post['author_avatar_url'] ) ? $raw_post['author_avatar_url'] : '',
				];

				$featured_media = $raw_post['_embedded']['wp:featuredmedia'] ?? [];
				if ( count( $featured_media ) > 0 ) {
					$image         = current( $featured_media );
					$post['image'] = add_query_arg(
						array(
							'resize' => '650,340',
							'crop'   => 1,
						),
						$image['source_url']
					);
				}

				$posts[] = $post;
			}
		}

		set_transient(
			$kb_transient,
			$posts,
			// Expire transient in 15 minutes if remote get failed.
			empty( $posts ) ? 900 : DAY_IN_SECONDS
		);
	}

	return $posts;
}