コード例 #1
0
ファイル: plugin.php プロジェクト: Tymvie/advanced-ads-slider
 /**
  * load advanced ads settings
  */
 public function options()
 {
     // don’t initiate if main plugin not loaded
     if (!class_exists('Advanced_Ads')) {
         return array();
     }
     return Advanced_Ads::get_instance()->options();
 }
コード例 #2
0
 /**
  * Initialize the module
  *
  * @since   1.0.0
  */
 private function __construct()
 {
     $advads_options = Advanced_Ads::get_instance()->options();
     $options = $this->options();
     if (!empty($advads_options['use-adblocker']) && !empty($this->options['folder_name']) && !empty($this->options['active_plugins_hash']) && $this->get_upload_directory()) {
         add_action('plugins_loaded', array($this, 'wp_plugins_loaded'));
     }
 }
コード例 #3
0
 /**
  * Simple wp ajax interface for ad selection.
  *
  * Provides a single ad given ID and selection method.
  */
 public function advads_ajax_ad_select()
 {
     // set proper header
     header('Content-Type: application/json; charset: utf-8');
     // allow modules / add ons to test (this is rather late but should happen before anything important is called)
     do_action('advanced-ads-ajax-ad-select-init');
     // init handlers
     $selector = Advanced_Ads_Select::get_instance();
     $methods = $selector->get_methods();
     $method = isset($_REQUEST['ad_method']) ? (string) $_REQUEST['ad_method'] : null;
     $id = isset($_REQUEST['ad_id']) ? (string) $_REQUEST['ad_id'] : null;
     $arguments = isset($_REQUEST['ad_args']) ? $_REQUEST['ad_args'] : array();
     if (is_string($arguments)) {
         $arguments = stripslashes($arguments);
         $arguments = json_decode($arguments, true);
     }
     $adIds = isset($_REQUEST['ad_ids']) ? $_REQUEST['ad_ids'] : null;
     if (is_string($adIds)) {
         $adIds = json_decode($adIds, true);
     }
     $response = array();
     if (isset($methods[$method]) && isset($id)) {
         $advads = Advanced_Ads::get_instance();
         if (is_array($adIds)) {
             // ads loaded previously and passed by query
             $advads->current_ads += $adIds;
         }
         $l = count($advads->current_ads);
         // build content
         $content = $selector->get_ad_by_method($id, $method, $arguments);
         $adIds = array_slice($advads->current_ads, $l);
         // ads loaded by this request
         $response = array('status' => 'success', 'item' => $content, 'id' => $id, 'method' => $method, 'ads' => $adIds);
     } else {
         // report error
         $response = array('status' => 'error', 'message' => 'No valid ID or METHOD found.');
     }
     echo json_encode($response);
     die;
 }
コード例 #4
0
    /**
     * load content of the ad parameter metabox
     *
     * @since 1.0.0
     */
    public function load_ad_parameters_metabox()
    {
        $types = Advanced_Ads::get_instance()->ad_types;
        $type = $_REQUEST['ad_type'];
        $ad_id = absint($_REQUEST['ad_id']);
        if (empty($ad_id)) {
            wp_die();
        }
        $ad = new Advanced_Ads_Ad($ad_id);
        if (!empty($types[$type]) && method_exists($types[$type], 'render_parameters')) {
            $types[$type]->render_parameters($ad);
            ?>
			<div id="advanced-ads-ad-parameters-size">
				<p><?php 
            _e('size:', 'advanced-ads');
            ?>
</p>
				<label><?php 
            _e('width', 'advanced-ads');
            ?>
<input type="number" size="4" maxlength="4" value="<?php 
            echo isset($ad->width) ? $ad->width : 0;
            ?>
" name="advanced_ad[width]">px</label>
				<label><?php 
            _e('height', 'advanced-ads');
            ?>
<input type="number" size="4" maxlength="4" value="<?php 
            echo isset($ad->height) ? $ad->height : 0;
            ?>
" name="advanced_ad[height]">px</label>
			</div>
			<?php 
        }
        wp_die();
    }
コード例 #5
0
ファイル: ad.php プロジェクト: KelasKayu/wordpress
 /**
  * return ad content for frontend output
  *
  * @since 1.0.0
  * @return string $output ad output
  */
 public function output()
 {
     if (!$this->is_ad) {
         return '';
     }
     $output = $this->prepare_frontend_output();
     // add the ad to the global output array
     $advads = Advanced_Ads::get_instance();
     $advads->current_ads[] = array('type' => 'ad', 'id' => $this->id, 'title' => $this->title);
     // action when output is created
     do_action('advanced-ads-output', $this, $output);
     return $output;
 }
コード例 #6
0
<?php

// include callback file
require_once ADVADS_BASE_PATH . 'admin/includes/class-display-condition-callbacks.php';
$types = Advanced_Ads::get_instance()->ad_types;
$jquery_ui_buttons = array();
$conditions_enabled = isset($ad->conditions['enabled']) && $ad->conditions['enabled'];
?>
<p class="description"><?php 
_e('Choose where to display the ad and where to hide it.', 'advanced-ads');
?>
</p>
<div id="advanced-ad-conditions-enable">
    <input id="advads-condition-display-disabled" type="radio" name="advanced_ad[conditions][enabled]" value="0" <?php 
checked(!$conditions_enabled);
?>
/><label for="advads-condition-display-disabled"><?php 
_e('Display ad everywhere', 'advanced-ads');
?>
</label>
    <input id="advads-condition-display-enabled" type="radio" name="advanced_ad[conditions][enabled]" value="1" <?php 
checked($conditions_enabled);
?>
/><label for="advads-condition-display-enabled"><?php 
_e('Set display conditions', 'advanced-ads');
?>
</label>
</div>
<div id="advanced-ad-conditions">
    <ul id="advads-how-it-works">
        <li><?php 
コード例 #7
0
 /**
  * return content of a placement
  *
  * @since 1.1.0
  * @param string $id   slug of the display
  * @param array  $args optional arguments (passed to child)
  */
 public static function output($id = '', $args = array())
 {
     // get placement data for the slug
     if ($id == '') {
         return;
     }
     $placements = Advanced_Ads::get_ad_placements_array();
     if (isset($placements[$id]['item']) && $placements[$id]['item'] !== '') {
         $_item = explode('_', $placements[$id]['item']);
         if (!isset($_item[1]) || empty($_item[1])) {
             return;
         }
         // inject options
         if (isset($placements[$id]['options']) && is_array($placements[$id]['options'])) {
             foreach ($placements[$id]['options'] as $_k => $_v) {
                 if (!isset($args[$_k])) {
                     $args[$_k] = $_v;
                 }
             }
         }
         // return either ad or group content
         switch ($_item[0]) {
             case 'ad':
             case Advanced_Ads_Select::AD:
                 // create class from placement id (not if header injection)
                 if (!isset($placements[$id]['type']) || $placements[$id]['type'] !== 'header') {
                     if (!isset($args['output'])) {
                         $args['output'] = array();
                     }
                     if (!isset($args['output']['class'])) {
                         $args['output']['class'] = array();
                     }
                     $class = 'advads-' . $id;
                     if (!in_array($class, $args['output']['class'])) {
                         $args['output']['class'][] = $class;
                     }
                 }
                 // fix method id
                 $_item[0] = Advanced_Ads_Select::AD;
                 break;
                 // avoid loops (programmatical error)
             // avoid loops (programmatical error)
             case Advanced_Ads_Select::PLACEMENT:
                 return;
             case Advanced_Ads_Select::GROUP:
             default:
         }
         // add the placement to the global output array
         $advads = Advanced_Ads::get_instance();
         $advads->current_ads[] = array('type' => 'placement', 'id' => $id, 'title' => $placements[$id]['name']);
         return Advanced_Ads_Select::get_instance()->get_ad_by_method((int) $_item[1], $_item[0], $args);
     }
 }
コード例 #8
0
 /**
  * render setting to enable/disable adblocker
  *
  */
 public function render_settings_use_adblocker()
 {
     $advads_options = Advanced_Ads::get_instance()->options();
     $checked = !empty($advads_options['use-adblocker']) ? 1 : 0;
     echo '<input id="advanced-ads-use-adblocker" type="checkbox" value="1" name="' . ADVADS_SLUG . '[use-adblocker]" ' . checked($checked, 1, false) . '>';
     echo '<p class="description">' . __('Prevents ad block software from breaking your website when blocking asset files (.js, .css).', 'advanced-ads') . '</p>';
 }
コード例 #9
0
    /**
     * render next-steps
     */
    private static function render_next_steps($recent_ads = array())
    {
        $model = Advanced_Ads::get_instance()->get_model();
        $groups = $model->get_ad_groups();
        $placements = $model->get_ad_placements_array();
        $next_steps = array();
        if (count($recent_ads) == 0) {
            $next_steps[] = '<p><a class="button button-primary" href="' . admin_url('post-new.php?post_type=' . Advanced_Ads::POST_TYPE_SLUG) . '">' . __('Create your first ad', 'advanced-ads') . '</a></p>';
        }
        if (count($groups) == 0) {
            $next_steps[] = '<p class="description">' . __('Ad Groups contain ads and are currently used to rotate multiple ads on a single spot.', 'advanced-ads') . '</p>' . '<p><a class="button button-primary" href="' . admin_url('admin.php?action=edit&page=advanced-ads-groups') . '">' . __('Create your first group', 'advanced-ads') . '</a></p>';
        }
        if (count($placements) == 0) {
            $next_steps[] = '<p class="description">' . __('Ad Placements are the best way to manage where to display ads and groups.', 'advanced-ads') . '</p>' . '<p><a class="button button-primary" href="' . admin_url('admin.php?action=edit&page=advanced-ads-placements') . '">' . __('Create your first placement', 'advanced-ads') . '</a></p>';
        }
        // display all options
        if (count($next_steps) > 0) {
            ?>
<br/><h4><?php 
            _e('Next steps', 'advanced-ads');
            ?>
</h4><?php 
            foreach ($next_steps as $_step) {
                echo $_step;
            }
        }
    }
コード例 #10
0
/**
 * return true if ads can be displayed
 *
 * @since 1.4.9
 * @return bool, true if ads can be displayed
 */
function advads_can_display_ads()
{
    return Advanced_Ads::get_instance()->can_display_ads();
}
コード例 #11
0
<?php

/**
 * conditions under which to (not) show an ad
 * I don’t like huge arrays like this to clutter my classes
 *  and anyway, this might be needed on multiple places
 *
 * at the bottom, you find a filter to be able to extend / remove your own elements
 *
 * elements
 * key - internal id of the condition; needs to be unique, obviously
 * label - title in the dashboard
 * description - (optional) description displayed in the dashboard
 * type - information / markup type
 *      idfield - input field for comma separated lists of ids
 *      radio - radio button
 *      others - added to not trigger internal sanitization
 *
 * note: ’idfield’ always has a {field}_not version that is created automatically and being its own condition
 *
 */
// avoid direct execution
if (!class_exists('Advanced_Ads', false)) {
    die;
}
$advanced_ads_slug = Advanced_Ads::get_instance()->get_plugin_slug();
$advanced_ads_ad_conditions = array('enabled' => array('type' => 'other'), 'posttypes' => array('label' => __('Post Types', $advanced_ads_slug), 'description' => __('Choose the public post types on which to display the ad.', $advanced_ads_slug), 'type' => 'textvalues', 'callback' => array('Advanced_Ads_Display_Condition_Callbacks', 'post_types')), 'categoryids' => array('label' => __('Categories, Tags and Taxonomies', $advanced_ads_slug), 'description' => __('Choose terms from public category, tag and other taxonomies a post must belong to in order to have ads.', $advanced_ads_slug), 'type' => 'idfield', 'callback' => array('Advanced_Ads_Display_Condition_Callbacks', 'terms')), 'categoryarchiveids' => array('label' => __('Category Archives', $advanced_ads_slug), 'description' => __('comma seperated IDs of category archives', $advanced_ads_slug), 'type' => 'idfield', 'callback' => array('Advanced_Ads_Display_Condition_Callbacks', 'category_archives')), 'postids' => array('label' => __('Individual Posts, Pages and Public Post Types', $advanced_ads_slug), 'description' => __('Choose on which individual posts, pages and public post type pages you want to display or hide ads.', $advanced_ads_slug), 'type' => 'other', 'callback' => array('Advanced_Ads_Display_Condition_Callbacks', 'single_posts')), 'is_front_page' => array('label' => __('Home Page', $advanced_ads_slug), 'description' => __('show on Home page', $advanced_ads_slug), 'type' => 'radio'), 'is_singular' => array('label' => __('Singular Pages', $advanced_ads_slug), 'description' => __('show on singular pages/posts', $advanced_ads_slug), 'type' => 'radio'), 'is_archive' => array('label' => __('Archive Pages', $advanced_ads_slug), 'description' => __('show on any type of archive page (category, tag, author and date)', $advanced_ads_slug), 'type' => 'radio'), 'is_search' => array('label' => __('Search Results', $advanced_ads_slug), 'description' => __('show on search result pages', $advanced_ads_slug), 'type' => 'radio'), 'is_404' => array('label' => __('404 Page', $advanced_ads_slug), 'description' => __('show on 404 error page', $advanced_ads_slug), 'type' => 'radio'), 'is_attachment' => array('label' => __('Attachment Pages', $advanced_ads_slug), 'description' => __('show on attachment pages', $advanced_ads_slug), 'type' => 'radio'), 'is_main_query' => array('label' => __('Secondary Queries', $advanced_ads_slug), 'description' => __('allow ads in secondary queries', $advanced_ads_slug), 'type' => 'radio'));
return apply_filters('advanced-ads-conditions', $advanced_ads_ad_conditions);
コード例 #12
0
ファイル: support.php プロジェクト: KelasKayu/wordpress
if (Advanced_Ads_Checks::plugin_updates_available()) {
    $messages[] = __('There are <strong>plugin updates available</strong>. Please update.', 'advanced-ads');
}
if (Advanced_Ads_Checks::licenses_invalid()) {
    $messages[] = sprintf(__('One or more license keys for <strong>Advanced Ads add-ons are invalid or missing</strong>. Please add valid license keys <a href="%s">here</a>.', 'advanced-ads'), admin_url('admin.php?page=advanced-ads-settings#top#licenses'));
}
if (Advanced_Ads_Checks::licenses_expired()) {
    $messages[] = sprintf(__('<strong>Advanced Ads</strong> license(s) expired. Support and updates are disabled. Please visit <a href="%s"> the license page</a> for more information.', 'advanced-ads'), admin_url('admin.php?page=advanced-ads-settings#top#licenses'));
}
if (Advanced_Ads_Checks::active_autoptimize() && !defined('AAP_VERSION')) {
    $messages[] = sprintf(__('<strong>Autoptimize plugin detected</strong>. While this plugin is great for site performance, it is known to alter code, including scripts from ad networks. <a href="%s" target="_blank">Advanced Ads Pro</a> has a build-in support for Autoptimize.', 'advanced-ads'), ADVADS_URL . 'add-ons/advanced-ads-pro');
}
if (count(Advanced_Ads_Checks::conflicting_plugins())) {
    $messages[] = sprintf(__('Plugins that are known to cause (partial) problems: <strong>%1$s</strong>. <a href="%2$s" target="_blank">Learn more</a>.', 'advanced-ads'), implode(', ', Advanced_Ads_Checks::conflicting_plugins()), ADVADS_URL . 'manual/known-plugin-conflicts/');
}
$options = Advanced_Ads::get_instance()->options();
if (isset($options['disabled-ads'])) {
    $messages[] = sprintf(__('Ads are disabled for all or some pages. See "disabled ads" in <a href="%s">settings</a>.', 'advanced-ads'), admin_url('admin.php?page=advanced-ads-settings#top#general'));
}
Advanced_Ads_Checks::jquery_ui_conflict();
if (count($messages)) {
    foreach ($messages as $_message) {
        ?>
<div class="message error"><p><?php 
        echo $_message;
        ?>
</p></div><?php 
    }
}
?>
    <h2><?php 
コード例 #13
0
ファイル: plugin.php プロジェクト: Tymvie/advanced_ads_mod
 /**
  * flush rewrites on plugin activation so permalinks for them work from the beginning on
  *
  * @since 1.0.0
  * @link http://codex.wordpress.org/Function_Reference/register_post_type#Flushing_Rewrite_on_Activation
  */
 public function post_types_rewrite_flush()
 {
     // load custom post type
     Advanced_Ads::get_instance()->create_post_types();
     // flush rewrite rules
     flush_rewrite_rules();
 }
コード例 #14
0
ファイル: ad_group.php プロジェクト: KelasKayu/wordpress
 /**
  * control the output of the group by type and amount of ads
  *
  * @since 1.4.8
  * @return str $output output of ad(s) by ad
  */
 public function output()
 {
     if (!$this->id) {
         return;
     }
     // load ads
     $ads = $this->load_all_ads();
     if ($ads === array()) {
         return;
     }
     // get ad weights serving as an order here
     $weights = $this->get_ad_weights();
     asort($weights);
     // if ads and weights don’t have the same keys, update weights array
     if (count($weights) == 0 && count($ads) > 0 || count($weights) != count($ads) || array_diff_key($weights, $ads) != array() || array_diff_key($ads, $weights) != array()) {
         $this->update_ad_weights();
         $weights = $this->ad_weights;
     }
     // remove ads with 0 ad weight
     foreach ($weights as $_ad_id => $_ad_weight) {
         if ($_ad_weight === 0) {
             unset($weights[$_ad_id]);
         }
     }
     // order ads based on group type
     switch ($this->type) {
         case 'ordered':
             // order to highest weight first
             arsort($weights);
             $ordered_ad_ids = array_keys($weights);
             break;
         default:
             // default
             $ordered_ad_ids = $this->shuffle_ads($ads, $weights);
     }
     $ordered_ad_ids = apply_filters('advanced-ads-group-output-ad-ids', $ordered_ad_ids, $this->type, $ads, $weights);
     // load the ad output
     $output = array();
     $ads_displayed = 0;
     $ad_count = apply_filters('advanced-ads-group-ad-count', $this->ad_count, $this);
     $ad_select = Advanced_Ads_Select::get_instance();
     foreach ($ordered_ad_ids as $_ad_id) {
         // load the ad object
         $ad = $ad_select->get_ad_by_method($_ad_id, Advanced_Ads_Select::AD, $this->ad_args);
         if ($ad !== null) {
             $output[] = $ad;
             $ads_displayed++;
             // break the loop when maximum ads are reached
             if ($ads_displayed === $ad_count) {
                 break;
             }
         }
     }
     // add the group to the global output array
     $advads = Advanced_Ads::get_instance();
     $advads->current_ads[] = array('type' => 'group', 'id' => $this->id, 'title' => $this->name);
     // filter grouped ads output
     $output_string = implode('', apply_filters('advanced-ads-group-output-array', $output, $this));
     // filter final group output
     return apply_filters('advanced-ads-group-output', $output_string, $this);
 }
コード例 #15
0
    /**
     * display widget functions
     */
    public static function dashboard_widget_function($post, $callback_args)
    {
        // load ad optimization feed
        $feeds = array(array('link' => 'http://webgilde.com/en/ad-optimization/', 'url' => 'http://webgilde.com/en/ad-optimization/feed/', 'title' => __('From the ad optimization universe', ADVADS_SLUG), 'items' => 2, 'show_summary' => 0, 'show_author' => 0, 'show_date' => 0), array('link' => ADVADS_URL, 'url' => ADVADS_URL . 'feed/', 'title' => __('Advanced Ads Tutorials', ADVADS_SLUG), 'items' => 2, 'show_summary' => 0, 'show_author' => 0, 'show_date' => 0));
        // get number of ads
        $recent_ads = Advanced_Ads::get_instance()->get_model()->get_ads();
        echo '<p>';
        printf(__('%d ads – <a href="%s">manage</a> - <a href="%s">new</a>', ADVADS_SLUG), count($recent_ads), 'edit.php?post_type=' . Advanced_Ads::POST_TYPE_SLUG, 'post-new.php?post_type=' . Advanced_Ads::POST_TYPE_SLUG);
        echo '</p>';
        // get and display plugin version
        $advads_plugin_data = get_plugin_data(ADVADS_BASE_PATH . 'advanced-ads.php');
        if (isset($advads_plugin_data['Version'])) {
            $version = $advads_plugin_data['Version'];
            echo '<p><a href="' . ADVADS_URL . '" target="_blank" title="' . __('plugin manual and homepage', ADVADS_SLUG) . '">Advanced Ads</a> ' . $version . '</p>';
        }
        $notice_options = Advanced_Ads_Admin_Notices::get_instance()->options();
        $_notice = 'nl_first_steps';
        if (!isset($notice_options['closed'][$_notice])) {
            ?>
<div class="advads-admin-notice">
				    <p><button type="button" class="button-primary advads-notices-button-subscribe" data-notice="<?php 
            echo $_notice;
            ?>
"><?php 
            _e('Get the tutorial via email', ADVADS_SLUG);
            ?>
</button></p>
				</div><?php 
        }
        $_notice = 'nl_adsense';
        if (!isset($notice_options['closed'][$_notice])) {
            ?>
<div class="advads-admin-notice">
				    <p><button type="button" class="button-primary advads-notices-button-subscribe" data-notice="<?php 
            echo $_notice;
            ?>
"><?php 
            _e('Get AdSense tips via email', ADVADS_SLUG);
            ?>
</button></p>
				</div><?php 
        }
        // rss feed
        // $this->dashboard_widget_function_output('advads_dashboard_widget', $feed);
        self::dashboard_cached_rss_widget('advads_dashboard_widget', array('Advanced_Ads_Admin', 'dashboard_widget_function_output'), array('advads' => $feeds));
    }
コード例 #16
0
    return;
}
// load basic path to the plugin
define('ADVADS_BASE_PATH', plugin_dir_path(__FILE__));
define('ADVADS_BASE_URL', plugin_dir_url(__FILE__));
define('ADVADS_BASE_DIR', dirname(plugin_basename(__FILE__)));
// directory of the plugin without any paths
// general and global slug, e.g. to store options in WP, textdomain
define('ADVADS_SLUG', 'advanced-ads');
define('ADVADS_URL', 'https://wpadvancedads.com/');
define('ADVADS_VERSION', '1.6.2.1');
/*----------------------------------------------------------------------------*
 * Autoloading, modules and functions
 *----------------------------------------------------------------------------*/
// load public functions (might be used by modules, other plugins or theme)
require_once ADVADS_BASE_PATH . 'includes/functions.php';
require_once ADVADS_BASE_PATH . 'includes/load_modules.php';
Advanced_Ads_ModuleLoader::getLoader();
// enable autoloading
/*----------------------------------------------------------------------------*
 * Public-Facing and Core Functionality
 *----------------------------------------------------------------------------*/
Advanced_Ads::get_instance();
Advanced_Ads_ModuleLoader::loadModules(ADVADS_BASE_PATH . 'modules/');
// enable modules, requires base class
/*----------------------------------------------------------------------------*
 * Dashboard and Administrative Functionality
 *----------------------------------------------------------------------------*/
if (is_admin()) {
    Advanced_Ads_Admin::get_instance();
}
コード例 #17
0
 /**
  * get items for item select field
  *
  * @return arr $select items for select field
  */
 public static function items_for_select()
 {
     $select = array();
     $model = Advanced_Ads::get_instance()->get_model();
     // load all ads
     $ads = $model->get_ads(array('orderby' => 'name', 'order' => 'ASC'));
     foreach ($ads as $_ad) {
         $select['ads']['ad_' . $_ad->ID] = $_ad->post_title;
     }
     // load all ad groups
     $groups = $model->get_ad_groups();
     foreach ($groups as $_group) {
         $select['groups']['group_' . $_group->term_id] = $_group->name;
     }
     // load all placements
     $placements = $model->get_ad_placements_array();
     foreach ($placements as $key => $_placement) {
         $select['placements']['placement_' . $key] = $_placement['name'];
     }
     return $select;
 }
コード例 #18
0
 /**
  * control the output of the group by type and amount of ads
  *
  * @since 1.4.8
  * @param array/null ordered_ad_ids ordered ids of the ads that belong to the group
  * @return str $output output of ad(s) by ad
  */
 public function output($ordered_ad_ids = false)
 {
     // if $ordered_ad_ids was not passed to the function, load it
     $ordered_ad_ids = $ordered_ad_ids === false ? $this->get_ordered_ad_ids() : $ordered_ad_ids;
     if ($ordered_ad_ids === null) {
         return;
     }
     // load the ad output
     $output = array();
     $ads_displayed = 0;
     $ad_count = apply_filters('advanced-ads-group-ad-count', $this->ad_count, $this);
     $ad_select = Advanced_Ads_Select::get_instance();
     foreach ($ordered_ad_ids as $_ad_id) {
         // load the ad object
         $ad = $ad_select->get_ad_by_method($_ad_id, Advanced_Ads_Select::AD, $this->ad_args);
         if ($ad !== null) {
             $output[] = $ad;
             $ads_displayed++;
             // break the loop when maximum ads are reached
             if ($ads_displayed === $ad_count) {
                 break;
             }
         }
     }
     // add the group to the global output array
     $advads = Advanced_Ads::get_instance();
     $advads->current_ads[] = array('type' => 'group', 'id' => $this->id, 'title' => $this->name);
     // filter grouped ads output
     $output_string = implode('', apply_filters('advanced-ads-group-output-array', $output, $this));
     // filter final group output
     return apply_filters('advanced-ads-group-output', $output_string, $this);
 }