Commit inicial - WordPress Análisis de Precios Unitarios

- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
root
2025-11-03 21:04:30 -06:00
commit a22573bf0b
24068 changed files with 4993111 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
<?php
class Advanced_Ads_Pro_Module_Advanced_Display_Conditions_Admin {
}

View File

@@ -0,0 +1,3 @@
<?php
new Advanced_Ads_Pro_Module_Advanced_Display_Conditions_Admin();

View File

@@ -0,0 +1,599 @@
<?php // phpcs:ignoreFile
use AdvancedAds\Abstracts\Ad;
use AdvancedAds\Framework\Utilities\Params;
/**
* The Advanced Display Conditions module.
*
* TODO should use a constant for option key as it is shared at multiple positions.
*/
class Advanced_Ads_Pro_Module_Advanced_Display_Conditions {
protected $options = [];
protected $is_ajax;
public function __construct() {
add_filter( 'advanced-ads-display-conditions', [ $this, 'display_conditions' ] );
$this->is_ajax = wp_doing_ajax();
if ( ! $this->is_ajax ) {
// attach more ad select values
add_filter( 'advanced-ads-ad-select-args', [ $this, 'additional_ad_select_args' ] );
}
}
/**
* Add visitor condition.
*
* @since 1.0.1
* @param array $conditions Display conditions of the main plugin.
* @return array $conditions New global visitor conditions.
*/
public function display_conditions( $conditions ){
// current uri
$conditions['request_uri'] = [
'label' => __( 'url parameters', 'advanced-ads-pro' ),
/* translators: %s: URL */
'description' => sprintf(__( 'Display ads based on the current URL parameters (everything following %s), except values following #.', 'advanced-ads-pro' ), ltrim( home_url(), '/' ) ),
'metabox' => [ 'Advanced_Ads_Pro_Module_Advanced_Display_Conditions', 'metabox_string' ], // callback to generate the metabox
'check' => [ 'Advanced_Ads_Pro_Module_Advanced_Display_Conditions', 'check_request_uri' ], // callback for frontend check
'helplink' => 'https://wpadvancedads.com/manual/ads-by-url-parameters/?utm_source=advanced-ads&utm_medium=link&utm_campaign=condition-url-parameter',
];
/** page template, see https://developer.wordpress.org/themes/template-files-section/page-template-files/page-templates/
* in WP 4.7, this logic was extended to also support templates
* for other post types, hence we now add a condition for all
* other post types with registered templates
*
*/
$conditions['page_template'] = [
/* translators: %s: page */
'label' => sprintf(__( '%s template', 'advanced-ads-pro' ), 'page' ),
/* translators: %s: post type */
'description' => sprintf(__( 'Display ads based on the template of the %s post type.', 'advanced-ads-pro' ), 'page' ),
'metabox' => [ 'Advanced_Ads_Pro_Module_Advanced_Display_Conditions', 'metabox_page_template' ], // callback to generate the metabox
'check' => [ 'Advanced_Ads_Pro_Module_Advanced_Display_Conditions', 'check_page_template' ], // callback for frontend check
'post-type' => 'page'
];
/**
* load post templates
* need to check, because only works with WP 4.7 and higher
*/
if( method_exists( 'WP_Theme', 'get_post_templates' ) ){
$page_templates = wp_get_theme()->get_post_templates();
if( is_array( $page_templates ) ){
foreach( $page_templates as $_post_type => $_templates ){
// skip page templates, because they are already registered and another index would cause old conditions to not work anymore
if( 'page' === $_post_type ){
continue;
}
$conditions['page_template_' . $_post_type ] = [
'label' => sprintf(__( '%s template', 'advanced-ads-pro' ), $_post_type ),
'description' => sprintf(__( 'Display ads based on the template of the %s post type.', 'advanced-ads-pro' ), $_post_type ),
'metabox' => [ 'Advanced_Ads_Pro_Module_Advanced_Display_Conditions', 'metabox_page_template' ], // callback to generate the metabox
'check' => [ 'Advanced_Ads_Pro_Module_Advanced_Display_Conditions', 'check_page_template' ], // callback for frontend check
'post-type' => $_post_type
];
}
}
}
// language set with the WPML plugin
if( defined( 'ICL_SITEPRESS_VERSION' ) ) {
$conditions['wpml_language'] = [
'label' => __( 'WPML language', 'advanced-ads-pro' ),
'description' => __( 'Display ads based on the page language set by the WPML plugin.', 'advanced-ads-pro' ),
'metabox' => [ 'Advanced_Ads_Pro_Module_Advanced_Display_Conditions', 'metabox_wpml_language' ], // callback to generate the metabox
'check' => [ 'Advanced_Ads_Pro_Module_Advanced_Display_Conditions', 'check_wpml_language' ] // callback for frontend check
];
}
$conditions['sub_page'] = [
'label' => __( 'parent page', 'advanced-ads-pro' ),
'description' => __( 'Display ads based on parent page.', 'advanced-ads-pro' ),
'metabox' => [ 'Advanced_Ads_Display_Conditions', 'metabox_post_ids' ], // callback to generate the metabox
'check' => [ 'Advanced_Ads_Pro_Module_Advanced_Display_Conditions', 'check_parent_page' ] // callback for frontend check
];
$conditions['post_meta'] = [
'label' => __( 'post meta', 'advanced-ads-pro' ),
'description' => __( 'Display ads based on post meta.', 'advanced-ads-pro' ),
'metabox' => [ 'Advanced_Ads_Pro_Module_Advanced_Display_Conditions', 'metabox_post_meta' ], // callback to generate the metabox
'check' => [ 'Advanced_Ads_Pro_Module_Advanced_Display_Conditions', 'check_post_meta' ] // callback for frontend check
];
$conditions['paginated_post'] = [
'label' => __( 'pagination', 'advanced-ads-pro' ),
'description' => __( 'Display ads based on the index of a split page', 'advanced-ads-pro' ),
'metabox' => [ 'Advanced_Ads_Pro_Module_Advanced_Display_Conditions', 'metabox_paginated_post' ], // callback to generate the metabox
'check' => [ 'Advanced_Ads_Pro_Module_Advanced_Display_Conditions', 'check_paginated_post' ], // callback for frontend check
];
$conditions['post_content'] = [
'label' => __( 'post content', 'advanced-ads-pro' ),
'description' => __( 'Display ads based on words and phrases within the post or page content. Dynamically added text might not be considered.', 'advanced-ads-pro' ),
'metabox' => [ 'Advanced_Ads_Pro_Module_Advanced_Display_Conditions', 'metabox_string' ], // callback to generate the metabox.
'check' => [ 'Advanced_Ads_Pro_Module_Advanced_Display_Conditions', 'check_post_content' ], // callback for frontend check.
'helplink' => 'https://wpadvancedads.com/manual/ads-based-on-keywords/?utm_source=advanced-ads&utm_medium=link?utm_campaign=condition-post-content',
];
return $conditions;
}
/**
* add ad select vars that can later be used by ajax
*
* @since untagged
* @param array $args Arguments passed to ads and groups from top level placements/ads/groups.
* @return array
*/
public function additional_ad_select_args( $args ) {
if ( isset( $args['url_parameter'] ) ) {
return $args;
}
$referer = Params::server( 'HTTP_REFERER' );
if ( wp_doing_ajax() && $referer ) {
// An AJAX request to load content initiated by a third party plugin.
$args['url_parameter'] = $referer;
} else {
$args['url_parameter'] = Params::server( 'REQUEST_URI', '' );
// Only consider QUERY_STRING, if not already included in REQUEST_URI.
$query_string = Params::server( 'QUERY_STRING', '' );
if ( ! empty( $query_string ) && false === strpos( Params::server( 'REQUEST_URI' ), $query_string ) ) {
$args['url_parameter'] .= $query_string;
}
}
/**
* Allow other developers to manipulate the checked string dynamically.
*
* @param string $args['url_parameter'] Current URL parameter.
* @return string
*/
$args['url_parameter'] = apply_filters( 'advanced-ads-pro-display-condition-url-string', $args['url_parameter'] );
return $args;
}
/**
* Check if ad can be displayed by request_uri condition in frontend.
*
* @param array $options options of the condition.
* @param Ad $ad The ad object.
*
* @return bool
*/
public static function check_request_uri( $options, Ad $ad ) {
$uri_string = $ad->get_prop( 'ad_args.url_parameter' ) ?? '';
// todo: implement this method into display conditions
return Advanced_Ads_Visitor_Conditions::helper_check_string( $uri_string, $options );
}
/**
* Check if ad can be displayed by page template condition in frontend.
*
* @param array $options Options of the condition.
* @param Ad $ad The ad object.
*
* @return bool
*/
public static function check_page_template( $options, Ad $ad ) {
// Early bail!!
if ( ! isset( $options['value'] ) || ! is_array( $options['value'] ) ) {
return false;
}
$operator = 'is_not' === ( $options['operator'] ?? '' ) ? 'is_not' : 'is';
$ad_options = $ad->get_data();
$post = $ad_options['post'] ?? null;
if ( null === $post ) {
return false;
}
$post_template = get_page_template_slug( $post['id'] ) ?? '';
if ( ! Advanced_Ads_Display_Conditions::can_display_ids( $post_template, $options['value'], $operator ) ) {
return false;
}
return true;
}
/**
* Check if ad can be displayed by WPML language condition in frontend.
*
* @param array $options Options of the condition.
* @param Ad $ad Ad.
*
* @return bool
*/
public static function check_wpml_language( $options, Ad $ad ) {
if (!isset($options['value']) || !is_array($options['value'])) {
return false;
}
$operator = 'is';
if (isset($options['operator']) && $options['operator'] === 'is_not') {
$operator = 'is_not';
}
$lang = apply_filters( 'wpml_current_language', null );
if ( ! Advanced_Ads_Display_Conditions::can_display_ids( $lang, $options['value'], $operator ) ) {
return false;
}
return true;
}
/**
* Check if ad can be displayed by 'is sub-page' condition in frontend.
*
* @param array $options Options of the condition.
* @param Ad $ad The ad object.
*
* @return bool
*/
public static function check_parent_page( $options, Ad $ad ) {
if ( ! isset($options['value']) || ! is_array( $options['value'] ) ) {
return false;
}
$operator = 'is';
if ( isset( $options['operator'] ) && $options['operator'] === 'is_not' ) {
$operator = 'is_not';
}
$post = Advanced_Ads_Pro_Utils::get_post();
$post_parent = ! empty( $post->post_parent ) ? $post->post_parent : 0;
if ( ! Advanced_Ads_Display_Conditions::can_display_ids( $post_parent, $options['value'], $operator ) ) {
return false;
}
return true;
}
/**
* Check if ad can be displayed by 'post meta' condition in frontend.
*
* @param array $options Options of the condition.
* @param Ad $ad The ad object.
*
* @return bool
*/
public static function check_post_meta( $options, Ad $ad ) {
$post = Advanced_Ads_Pro_Utils::get_post();
$mode = ( isset($options['mode']) && $options['mode'] === 'all' ) ? 'all' : 'any';
$meta_field = isset( $options['meta_field'] ) ? $options['meta_field'] : '';
if ( empty( $post->ID ) && empty( $meta_field ) ) {
return true;
}
$meta_values = get_post_meta( $post->ID, $meta_field );
if ( ! $meta_values ) {
// allow *_not operators return true
return Advanced_Ads_Visitor_Conditions::helper_check_string( '', $options );
}
foreach ( $meta_values as $_meta_value ) {
$result = Advanced_Ads_Visitor_Conditions::helper_check_string( $_meta_value, $options );
if ( ! $result && 'all' === $mode ) {
return false;
}
if ( $result && 'any' === $mode ) {
return true;
}
}
return 'all' === $mode;
}
/**
* Check if ad can be displayed by 'paginated post' condition in frontend.
*
* @param array $options Options of the condition.
* @param Ad $ad The ad object.
*
* @return bool
*/
public static function check_paginated_post( $options, Ad $ad ) {
if ( ! isset( $options['first'] ) || ! isset( $options['last'] ) ) {
return false;
}
$ad_options = $ad->get_data();
if ( ! isset( $ad_options['wp_the_query']['page'] ) || ! isset( $ad_options['wp_the_query']['numpages'] ) ) {
return false;
}
$first = ! empty( $options['first'] ) ? absint( $options['first'] ) : 1;
$last = ! empty( $options['last'] ) ? absint( $options['last'] ) : 1;
$page = $ad_options['wp_the_query']['page'];
$numpages = $ad_options['wp_the_query']['numpages'];
if ( ! empty( $options['count_from_end'] ) ) {
$first = $numpages + 1 - $first;
$last = $numpages + 1 - $last;
}
if ( $first > $last ) {
$tmp = $first;
$first = $last;
$last = $tmp;
}
if ( $page < $first || $page > $last ) {
return false;
}
return true;
}
/**
* Check "Post content" display condition in frontend.
*
* @param array $options The options of the condition.
* @param Ad $ad The ad object.
* @return bool true if ad can be displayed.
*/
public static function check_post_content( $options, Ad $ad ) {
$ad_args = $ad->get_prop( 'ad_args' );
if ( ! isset( $ad_args['post']['id'] ) ) {
return true;
}
$content = get_the_content( null, false, (int) $ad_args['post']['id'] );
// Since we want to remove only this function, we do not use `__return_false`.
$return_false = function() {
return false;
};
// Also disable ad/group/placement shortcodes in the content.
Advanced_Ads_Pro::get_instance()->remove_shortcodes();
add_filter( 'advanced-ads-can-inject-into-content', $return_false );
$content = apply_filters( 'the_content', $content );
remove_filter( 'advanced-ads-can-inject-into-content', $return_false );
Advanced_Ads_Pro::get_instance()->add_shortcodes();
$content = wp_strip_all_tags( $content );
return Advanced_Ads_Visitor_Conditions::helper_check_string( $content, $options );
}
/**
* callback to display any condition based on a string
*
* @since 1.4
* @param arr $options options of the condition
* @param int $index index of the condition
*/
static function metabox_string( $options, $index = 0, $form_name = '' ) {
if ( ! isset ( $options['type'] ) || '' === $options['type'] ) { return; }
$type_options = Advanced_Ads_Display_Conditions::get_instance()->conditions;
if ( ! isset( $type_options[ $options['type'] ] ) ) {
return;
}
// form name basis
$name = self::get_form_name_with_index( $form_name, $index );
// options
$value = isset( $options['value'] ) ? $options['value'] : '';
$operator = isset( $options['operator'] ) ? $options['operator'] : 'contains';
include dirname( __FILE__ ) . '/views/metabox-string.php';
}
/**
* callback to display the page templates condition
*
* @since 1.4.1
* @param arr $options options of the condition
* @param int $index index of the condition
*/
static function metabox_page_template( $options, $index = 0, $form_name = '' ) {
if ( ! isset ( $options['type'] ) || '' === $options['type'] ) { return; }
$type_options = Advanced_Ads_Display_Conditions::get_instance()->conditions;
if (!isset($type_options[$options['type']])) {
return;
}
// form name basis
$name = self::get_form_name_with_index( $form_name, $index );
// options
$values = ( isset($options['value']) && is_array($options['value']) ) ? $options['value'] : [];
$operator = ( isset($options['operator']) && $options['operator'] === 'is_not' ) ? 'is_not' : 'is';
// get values and select operator based on previous settings
?><input type="hidden" name="<?php echo $name; ?>[type]" value="<?php echo $options['type']; ?>"/>
<select name="<?php echo $name; ?>[operator]">
<option value="is" <?php selected('is', $operator); ?>><?php _e('is', 'advanced-ads-pro'); ?></option>
<option value="is_not" <?php selected('is_not', $operator); ?>><?php _e('is not', 'advanced-ads-pro'); ?></option>
</select><?php
// get all page templates
$post_type = ( isset( $type_options[$options['type']]['post-type'] ) ) ? $type_options[$options['type']]['post-type'] : 'page';
$templates = get_page_templates( null, $post_type );
$rand = md5( $form_name );
?><div class="advads-conditions-single advads-buttonset"><?php
foreach( $templates as $_name => $_file ) {
if (isset( $values ) && is_array( $values ) && in_array( $_file, $values ) ) {
$_val = 1;
} else {
$_val = 0;
}
$field_id = 'advads-conditions-' . sanitize_title( $_name ) . md5( $name );
?><label class="button ui-button" for="<?php echo $field_id;
?>"><?php echo $_name; ?></label><input type="checkbox" id="<?php echo $field_id; ?>" name="<?php echo $name; ?>[value][]" <?php checked($_val, 1); ?> value="<?php echo $_file; ?>"><?php
}
if ( file_exists( ADVADS_ABSPATH . 'admin/views/conditions/not-selected.php' ) ) {
include ADVADS_ABSPATH . 'admin/views/conditions/not-selected.php';
}
?></div>
<p class="description"><?php echo $type_options[ $options['type'] ]['description']; ?></p><?php
}
/**
* callback to display the WPML language condition
*
* @since 1.8*
* @param arr $options options of the condition
* @param int $index index of the condition
*/
static function metabox_wpml_language( $options, $index = 0, $form_name = '' ) {
if ( ! isset ( $options['type'] ) || '' === $options['type'] ) { return; }
$type_options = Advanced_Ads_Display_Conditions::get_instance()->conditions;
if (!isset($type_options[$options['type']])) {
return;
}
// form name basis
$name = self::get_form_name_with_index( $form_name, $index );
// options
$values = ( isset($options['value']) && is_array($options['value']) ) ? $options['value'] : [];
$operator = ( isset($options['operator']) && $options['operator'] === 'is_not' ) ? 'is_not' : 'is';
// get values and select operator based on previous settings
?><input type="hidden" name="<?php echo $name; ?>[type]" value="<?php echo $options['type']; ?>"/>
<select name="<?php echo $name; ?>[operator]">
<option value="is" <?php selected('is', $operator); ?>><?php _e('is', 'advanced-ads-pro'); ?></option>
<option value="is_not" <?php selected('is_not', $operator); ?>><?php _e('is not', 'advanced-ads-pro'); ?></option>
</select><?php
// get all languages
$wpml_active_languages = apply_filters( 'wpml_active_languages', null, [] );
$rand = md5( $form_name );
?><div class="advads-conditions-single advads-buttonset"><?php
if( is_array( $wpml_active_languages ) && count( $wpml_active_languages ) ){
foreach( $wpml_active_languages as $_language ) {
$field_id = 'advads-conditions-' . $_language['code'] . md5( $name );
$value = ( $values === [] || in_array($_language['code'], $values) ) ? 1 : 0;
?><label class="button ui-button" for="<?php echo $field_id;
?>"><?php echo $_language['native_name']; ?></label><input type="checkbox" id="<?php echo $field_id; ?>" name="<?php echo $name; ?>[value][]" <?php checked($value, 1); ?> value="<?php echo $_language['code']; ?>"><?php
}
} else {
_e( 'no languages set up in WPML', 'advanced-ads-pro' );
}
?></div>
<p class="description">
<?php echo esc_html( $type_options[ $options['type'] ]['description'] ); ?>
<a href="https://wpadvancedads.com/translating-ads-wpml/?utm_source=advanced-ads&utm_medium=link&utm_campaign=condition-wpml" class="advads-manual-link" target="_blank">
<?php esc_html_e( 'Manual', 'advanced-ads-pro' ); ?>
</a>
</p>
<?php
}
/**
* Callback to display the 'post meta' condition
*
* @param arr $options options of the condition
* @param int $index index of the condition
*/
static function metabox_post_meta( $options, $index = 0, $form_name = '' ) {
if ( ! isset ( $options['type'] ) || '' === $options['type'] ) { return; }
$type_options = Advanced_Ads_Display_Conditions::get_instance()->conditions;
if ( ! isset( $type_options[ $options['type'] ] ) ) {
return;
}
// form name basis
$name = self::get_form_name_with_index( $form_name, $index );
// options
$mode = ( isset($options['mode']) && $options['mode'] === 'all' ) ? 'all' : 'any';
$operator = isset( $options['operator'] ) ? $options['operator'] : 'contains';
$meta_field = isset( $options['meta_field'] ) ? $options['meta_field'] : '';
$value = isset( $options['value'] ) ? $options['value'] : '';
?><select name="<?php echo $name; ?>[mode]">
<option value="any" <?php selected( 'any', $mode ); ?>><?php _e( 'any of', 'advanced-ads-pro'); ?></option>
<option value="all" <?php selected( 'all', $mode ); ?>><?php _e( 'all of', 'advanced-ads-pro' ); ?></option>
</select><input type="text" name="<?php echo $name; ?>[meta_field]" value="<?php echo $meta_field; ?>" placeholder="<?php _e( 'meta key', 'advanced-ads-pro' ); ?>"/><?php
include dirname( __FILE__ ) . '/views/metabox-string.php';
}
/**
* Callback to display the 'paginated post' condition
*
* @param arr $options options of the condition
* @param int $index index of the condition
*/
static function metabox_paginated_post( $options, $index = 0, $form_name = '' ) {
if ( ! isset ( $options['type'] ) || '' === $options['type'] ) { return; }
$type_options = Advanced_Ads_Display_Conditions::get_instance()->conditions;
if ( ! isset( $type_options[ $options['type'] ] ) ) {
return;
}
// form name basis
$name = self::get_form_name_with_index( $form_name, $index );
// options
$first = ! empty( $options['first'] ) ? Advanced_Ads_Pro_Utils::absint( $options['first'], 1 ) : 1;
$last = ! empty( $options['last'] ) ? Advanced_Ads_Pro_Utils::absint( $options['last'], 1 ) : 1;
$count_from_end = ! empty( $options['count_from_end'] );
$first_field = '<input type="number" required="required" min="1" name="' . $name . '[first]" value="' . $first . '"/>.';
$last_field = '<input type="number" required="required" min="1" name="' . $name . '[last]" value="' . $last . '"/>.';
/* translators: %s: first field, %s: last field */
printf( __( 'from %1$s to %2$s', 'advanced-ads-pro' ), $first_field, $last_field ); ?> <input id="advads-conditions-<?php
echo $index; ?>-count-from-end" type="checkbox" value="1" name="<?php
echo $name; ?>[count_from_end]" <?php checked( $count_from_end, 1 ); ?>><label for="advads-conditions-<?php
echo $index; ?>-count-from-end"><?php _e( 'count from end', 'advanced-ads-pro' ); ?></label>
<input type="hidden" name="<?php echo $name; ?>[type]" value="<?php echo $options['type']; ?>"/>
<p class="description"><?php echo $type_options[ $options['type'] ]['description']; ?></p>
<?php
}
/**
* Helper function to the name of a form field.
* falls back to default
*
* @param string $form_name form name if submitted.
* @param int $index index of the condition.
*
* @return string
*/
public static function get_form_name_with_index( $form_name = '', $index = 0 ) {
// form name basis
if ( method_exists( 'Advanced_Ads_Display_Conditions', 'get_form_name_with_index' ) ) {
return Advanced_Ads_Display_Conditions::get_form_name_with_index( $form_name, $index );
} else {
return Advanced_Ads_Display_Conditions::FORM_NAME . '[' . $index . ']';
}
}
}

View File

@@ -0,0 +1,3 @@
<?php
new Advanced_Ads_Pro_Module_Advanced_Display_Conditions;

View File

@@ -0,0 +1,15 @@
<div class="advads-condition-line-wrap">
<input type="hidden" name="<?php echo $name; ?>[type]" value="<?php echo $options['type']; ?>"/>
<?php if( 0 <= version_compare( ADVADS_VERSION, '1.9.1' ) ) {
include( ADVADS_ABSPATH . 'admin/views/ad-conditions-string-operators.php' );
} ?>
<input type="text" name="<?php echo $name; ?>[value]" value="<?php echo $value; ?>"/>
</div>
<p class="description">
<?php echo esc_html( $type_options[ $options['type'] ]['description'] ); ?>
<?php if ( isset( $type_options[ $options['type'] ]['helplink'] ) ) : ?>
<a href="<?php echo esc_url( $type_options[ $options['type'] ]['helplink'] ) ?>" class="advads-manual-link" target="_blank">
<?php esc_html_e( 'Manual', 'advanced-ads-pro' ); ?>
</a>
<?php endif; ?>
</p>

View File

@@ -0,0 +1,16 @@
<h4><?php _e( 'Display by referrer url', 'advanced-ads-pro' ); ?></h4>
<p><label><input type="checkbox" name="advanced_ad[visitor][referrer-url][enable]" value="1" <?php
checked( $ref_url_enable, 1 ); ?> onclick="advads_toggle_box(this, '#advads-referer-url');"/><?php _e( 'Display ad depending on the external url the user comes from.', 'advanced-ads-pro' ); ?></label></p>
<div id="advads-referer-url"<?php if ( ! $ref_url_enable ) : ?> style="display:none;"<?php endif; ?>>
<?php _e( 'URL', 'advanced-ads-pro' ); ?>
<select name="advanced_ad[visitor][referrer-url][bool]"><?php
foreach ( $referrer_url_bools as $_bool_key => $_bool ) : ?>
<option value="<?php echo $_bool_key; ?>" <?php selected( $_bool_key, $ref_url_bool ); ?>><?php echo $_bool; ?></option>
<?php endforeach; ?></select>
<select name="advanced_ad[visitor][referrer-url][mode]"><?php
foreach ( $referrer_url_modi as $_mod_key => $_modus ) : ?>
<option value="<?php echo $_mod_key; ?>" <?php selected( $_mod_key, $ref_url_mode ); ?>><?php echo $_modus; ?></option>
<?php endforeach; ?></select>
<input type="text" name="advanced_ad[visitor][referrer-url][url]" value="<?php
echo $ref_url_url; ?>" placeholder="<?php _e( 'url of the referrer', 'advanced-ads-pro' ); ?>"/>
</div>