: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
$checked = ( ! empty( $options['block-bots'] ) ) ? 1 : 0;
include ADVADS_ABSPATH . 'admin/views/settings/general/block-bots.php';
* Render setting to disable ads by post types
public function render_settings_disable_post_types() {
$post_types = get_post_types(
'publicly_queryable' => true,
$type_label_counts = array_count_values( wp_list_pluck( $post_types, 'label' ) );
require ADVADS_ABSPATH . '/admin/views/settings/general/disable-post-types.php';
* Render setting to disable notices and Ad Health
public function render_settings_disabled_notices() {
$options = Advanced_Ads::get_instance()->options();
$checked = ( ! empty( $options['disable-notices'] ) ) ? 1 : 0;
require ADVADS_ABSPATH . '/admin/views/settings/general/disable-notices.php';
* Render setting for frontend prefix
public function render_settings_front_prefix() {
$options = Advanced_Ads::get_instance()->options();
$prefix = Advanced_Ads_Plugin::get_instance()->get_frontend_prefix();
$old_prefix = ( isset( $options['id-prefix'] ) ) ? esc_attr( $options['id-prefix'] ) : '';
require ADVADS_ABSPATH . '/admin/views/settings/general/frontend-prefix.php';
* Render setting to allow editors to manage ads
public function render_settings_editors_manage_ads() {
$options = Advanced_Ads::get_instance()->options();
// is false by default if no options where previously set.
if ( isset( $options['editors-manage-ads'] ) && $options['editors-manage-ads'] ) {
require ADVADS_ABSPATH . '/admin/views/settings/general/editors-manage-ads.php';
* Prepare the template for multisite allow unfiltered_html settings.
public function renders_settings_allow_unfiltered_html() {
$options = Advanced_Ads::get_instance()->options();
$user_roles_to_display = array_filter( wp_roles()->role_objects, static function( WP_Role $role ) {
return $role->has_cap( 'advanced_ads_edit_ads' );
if ( empty( $user_roles_to_display ) ) {
if ( ! isset( $options['allow-unfiltered-html'] ) ) {
$options['allow-unfiltered-html'] = [];
$allowed_roles = $options['allow-unfiltered-html'];
require ADVADS_ABSPATH . '/admin/views/settings/general/allow-unfiltered-html.php';
* Render setting to add an "Advertisement" label before ads
public function render_settings_add_custom_label() {
$options = Advanced_Ads::get_instance()->options();
$enabled = isset( $options['custom-label']['enabled'] );
$label = ! empty( $options['custom-label']['text'] ) ? esc_html( $options['custom-label']['text'] ) : _x( 'Advertisements', 'label before ads', 'advanced-ads' );
require ADVADS_ABSPATH . '/admin/views/settings/general/custom-label.php';
* Render link target="_blank" setting
* @since 1.8.4 – moved here from Tracking add-on
public function render_settings_link_target_callback() {
// get option if saved for tracking.
$options = Advanced_Ads::get_instance()->options();
if ( ! isset( $options['target-blank'] ) && class_exists( 'Advanced_Ads_Tracking_Plugin' ) ) {
$tracking_options = Advanced_Ads_Tracking_Plugin::get_instance()->options();
if ( isset( $tracking_options['target'] ) ) {
$options['target-blank'] = $tracking_options['target'];
$target = isset( $options['target-blank'] ) ? $options['target-blank'] : 0;
include ADVADS_ABSPATH . 'admin/views/settings/general/link-target.php';
* Render setting 'Delete data on uninstall"
public function render_settings_uninstall_delete_data() {
$options = Advanced_Ads::get_instance()->options();
$enabled = ! empty( $options['uninstall-delete-data'] );
include ADVADS_ABSPATH . 'admin/views/settings/general/uninstall-delete-data.php';
* Sanitize plugin settings
* @param array $options all the options.
* @return array sanitized options.
public function sanitize_settings( $options ) {
// sanitize whatever option one wants to sanitize.
if ( isset( $options['front-prefix'] ) ) {
$options['front-prefix'] = Advanced_Ads_Plugin::get_instance()->sanitize_frontend_prefix(
$options['front-prefix'],
Advanced_Ads_Plugin::DEFAULT_FRONTEND_PREFIX
$options = apply_filters( 'advanced-ads-sanitize-settings', $options );
// check if editors can edit ads now and set the rights
// else, remove that right.
$editor_role = get_role( 'editor' );
if ( null === $editor_role ) {
if ( isset( $options['editors-manage-ads'] ) && $options['editors-manage-ads'] ) {
$editor_role->add_cap( 'advanced_ads_see_interface' );
$editor_role->add_cap( 'advanced_ads_edit_ads' );
$editor_role->add_cap( 'advanced_ads_manage_placements' );
$editor_role->add_cap( 'advanced_ads_place_ads' );
$editor_role->remove_cap( 'advanced_ads_see_interface' );
$editor_role->remove_cap( 'advanced_ads_edit_ads' );
$editor_role->remove_cap( 'advanced_ads_manage_placements' );
$editor_role->remove_cap( 'advanced_ads_place_ads' );
// we need 3 states: ! empty, 1, 0.
$options['disabled-ads']['feed'] = ! empty( $options['disabled-ads']['feed'] ) ? 1 : 0;
if ( isset( $options['content-injection-everywhere'] ) ) {
if ( '0' === $options['content-injection-everywhere'] ) {
unset( $options['content-injection-everywhere'] );
} elseif ( $options['content-injection-everywhere'] === 'true' || $options['content-injection-everywhere'] <= - 1 ) {
// Note: the option may be already set 'true' during import.
$options['content-injection-everywhere'] = 'true';
$options['content-injection-everywhere'] = absint( $options['content-injection-everywhere'] );