diff options
Diffstat (limited to 'plugins/jetpack/extensions/blocks/wordads/wordads.php')
-rw-r--r-- | plugins/jetpack/extensions/blocks/wordads/wordads.php | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/plugins/jetpack/extensions/blocks/wordads/wordads.php b/plugins/jetpack/extensions/blocks/wordads/wordads.php new file mode 100644 index 00000000..8cb8ea2a --- /dev/null +++ b/plugins/jetpack/extensions/blocks/wordads/wordads.php @@ -0,0 +1,121 @@ +<?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName +/** + * Ads Block. + * + * @since 7.1.0 + * + * @package Jetpack + */ +class Jetpack_WordAds_Gutenblock { + const BLOCK_NAME = 'jetpack/wordads'; + + /** + * Check if site is on WP.com Simple. + * + * @return bool + */ + private static function is_wpcom() { + return defined( 'IS_WPCOM' ) && IS_WPCOM; + } + /** + * Check if the WordAds module is active. + * + * @return bool + */ + private static function is_jetpack_module_active() { + return method_exists( 'Jetpack', 'is_module_active' ) && Jetpack::is_module_active( 'wordads' ); + } + + /** + * Check if the site is approved for ads for WP.com Simple sites. + * + * @return bool + */ + private static function is_available() { + if ( self::is_wpcom() ) { + return has_any_blog_stickers( array( 'wordads', 'wordads-approved', 'wordads-approved-misfits' ), get_current_blog_id() ); + } + + return self::is_jetpack_module_active(); + } + + /** + * Register the WordAds block. + */ + public static function register() { + if ( self::is_available() ) { + jetpack_register_block( + self::BLOCK_NAME, + array( + 'render_callback' => array( 'Jetpack_WordAds_Gutenblock', 'gutenblock_render' ), + ) + ); + } + } + + /** + * Set if the WordAds block is available. + */ + public static function set_availability() { + if ( ! self::is_available() ) { + Jetpack_Gutenberg::set_extension_unavailable( self::BLOCK_NAME, 'WordAds unavailable' ); + return; + } + // Make the block available. Just in case it wasn't registed before. + Jetpack_Gutenberg::set_extension_available( self::BLOCK_NAME ); + } + + /** + * Renders the WordAds block. + * + * @param array $attr Block attributes. + * + * @return string Block HTML. + */ + public static function gutenblock_render( $attr ) { + global $wordads; + + /** This filter is already documented in modules/wordads/wordads.php `insert_ad()` */ + if ( empty( $wordads ) || is_feed() || apply_filters( 'wordads_inpost_disable', false ) ) { + return ''; + } + + if ( ! empty( $attr['hideMobile'] ) && $wordads->params->is_mobile() ) { + return ''; + } + + if ( ! self::is_wpcom() && $wordads->option( 'wordads_house' ) ) { + return $wordads->get_ad( 'inline', 'house' ); + } + + // section_id is mostly depricated at this point, but it helps us (devs) keep track of which ads end up where + // 6 is to keep track of gutenblock ads. + $section_id = $wordads->params->blog_id . '6'; + $align = 'center'; + if ( isset( $attr['align'] ) && in_array( $attr['align'], array( 'left', 'center', 'right' ), true ) ) { + $align = $attr['align']; + } + $align = 'align' . $align; + + $ad_tag_ids = $wordads->get_ad_tags(); + $format = 'mrec'; + if ( isset( $attr['format'] ) && in_array( $attr['format'], array_keys( $ad_tag_ids ), true ) ) { + $format = $attr['format']; + } + + $height = $ad_tag_ids[ $format ]['height']; + $width = $ad_tag_ids[ $format ]['width']; + $snippet = $wordads->get_ad_snippet( $section_id, $height, $width, 'gutenberg', $wordads->get_solo_unit_css() ); + return $wordads->get_ad_div( 'inline', $snippet, array( $align ) ); + } +} + +add_action( + 'init', + array( 'Jetpack_WordAds_Gutenblock', 'register' ) +); + +add_action( + 'jetpack_register_gutenberg_extensions', + array( 'Jetpack_WordAds_Gutenblock', 'set_availability' ) +); |