widgets.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. /**
  3. * Widget for inserting an ad into your sidebar
  4. *
  5. * @since 4.5.0
  6. */
  7. class WordAds_Sidebar_Widget extends WP_Widget {
  8. private static $allowed_tags = array( 'mrec', 'wideskyscraper' );
  9. private static $num_widgets = 0;
  10. function __construct() {
  11. parent::__construct(
  12. 'wordads_sidebar_widget',
  13. /** This filter is documented in modules/widgets/facebook-likebox.php */
  14. apply_filters( 'jetpack_widget_name', 'Ads' ),
  15. array(
  16. 'description' => __( 'Insert an ad unit wherever you can place a widget.', 'jetpack' ),
  17. 'customize_selective_refresh' => true
  18. )
  19. );
  20. }
  21. public function widget( $args, $instance ) {
  22. global $wordads;
  23. if ( $wordads->should_bail() ) {
  24. return false;
  25. }
  26. if ( ! isset( $instance['unit'] ) ) {
  27. $instance['unit'] = 'mrec';
  28. }
  29. self::$num_widgets++;
  30. $about = __( 'Advertisements', 'jetpack' );
  31. $width = WordAds::$ad_tag_ids[$instance['unit']]['width'];
  32. $height = WordAds::$ad_tag_ids[$instance['unit']]['height'];
  33. $unit_id = 1 == self::$num_widgets ? 3 : self::$num_widgets + 3; // 2nd belowpost is '4'
  34. $section_id = 0 === $wordads->params->blog_id ?
  35. WORDADS_API_TEST_ID :
  36. $wordads->params->blog_id . $unit_id;
  37. $snippet = '';
  38. if ( $wordads->option( 'wordads_house', true ) ) {
  39. $unit = 'mrec';
  40. if ( 'leaderboard' == $instance['unit'] && ! $this->params->mobile_device ) {
  41. $unit = 'leaderboard';
  42. } else if ( 'wideskyscraper' == $instance['unit'] ) {
  43. $unit = 'widesky';
  44. }
  45. $snippet = $wordads->get_house_ad( $unit );
  46. } else {
  47. $snippet = $wordads->get_ad_snippet( $section_id, $height, $width, 'widget' );
  48. }
  49. echo <<< HTML
  50. <div class="wpcnt">
  51. <div class="wpa">
  52. <span class="wpa-about">$about</span>
  53. <div class="u {$instance['unit']}">
  54. $snippet
  55. </div>
  56. </div>
  57. </div>
  58. HTML;
  59. }
  60. public function form( $instance ) {
  61. // ad unit type
  62. if ( isset( $instance['unit'] ) ) {
  63. $unit = $instance['unit'];
  64. } else {
  65. $unit = 'mrec';
  66. }
  67. ?>
  68. <p>
  69. <label for="<?php echo esc_attr( $this->get_field_id( 'unit' ) ); ?>"><?php _e( 'Tag Dimensions:', 'jetpack' ); ?></label>
  70. <select class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'unit' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'unit' ) ); ?>">
  71. <?php
  72. foreach ( WordAds::$ad_tag_ids as $ad_unit => $properties ) {
  73. if ( ! in_array( $ad_unit, self::$allowed_tags ) ) {
  74. continue;
  75. }
  76. $splits = explode( '_', $properties['tag'] );
  77. $unit_pretty = "{$splits[0]} {$splits[1]}";
  78. $selected = selected( $ad_unit, $unit, false );
  79. echo "<option value='", esc_attr( $ad_unit ) ,"' ", $selected, '>', esc_html( $unit_pretty ) , '</option>';
  80. }
  81. ?>
  82. </select>
  83. </p>
  84. <?php
  85. }
  86. public function update( $new_instance, $old_instance ) {
  87. $instance = $old_instance;
  88. if ( in_array( $new_instance['unit'], self::$allowed_tags ) ) {
  89. $instance['unit'] = $new_instance['unit'];
  90. } else {
  91. $instance['unit'] = 'mrec';
  92. }
  93. return $instance;
  94. }
  95. }
  96. function jetpack_wordads_widgets_init_callback() {
  97. return register_widget( 'WordAds_Sidebar_Widget' );
  98. }
  99. add_action( 'widgets_init', 'jetpack_wordads_widgets_init_callback' );