Esempio n. 1
0
/**
 * Save post meta when the save_post action is called
 *
 * @since 1.0
 *
 * @param int $post_id Popup (Post) ID
 *
 * @global array $post All the data of the the current post
 * @return void
 */
function popmake_popup_meta_box_save($post_id, $post)
{
    if (isset($post->post_type) && 'popup' != $post->post_type) {
        return;
    }
    if (!isset($_POST['popmake_popup_meta_box_nonce']) || !wp_verify_nonce($_POST['popmake_popup_meta_box_nonce'], basename(__FILE__))) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE || defined('DOING_AJAX') && DOING_AJAX || isset($_REQUEST['bulk_edit'])) {
        return;
    }
    if (isset($post->post_type) && 'revision' == $post->post_type) {
        return;
    }
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }
    $field_prefix = Popmake_Popup_Fields::instance()->field_prefix;
    foreach (Popmake_Popup_Fields::instance()->get_all_fields() as $section => $fields) {
        $section_prefix = "{$field_prefix}{$section}";
        $meta_values = array();
        foreach ($fields as $field => $args) {
            $field_name = "{$section_prefix}_{$field}";
            if (isset($_POST[$field_name])) {
                $meta_values[$field] = apply_filters('popmake_metabox_save_' . $field_name, $_POST[$field_name]);
            }
        }
        update_post_meta($post_id, "popup_{$section}", $meta_values);
    }
    foreach (popmake_popup_meta_fields() as $field) {
        if (isset($_POST[$field])) {
            $new = apply_filters('popmake_metabox_save_' . $field, $_POST[$field]);
            update_post_meta($post_id, $field, $new);
        } else {
            delete_post_meta($post_id, $field);
        }
    }
    $includes = popmake_get_popup_targeting_condition_includes($post_id);
    $excludes = popmake_get_popup_targeting_condition_excludes($post_id);
    foreach (popmake_get_supported_types() as $pt) {
        foreach (array('include', 'exclude') as $type) {
            $prefix = "popup_targeting_condition_" . ($type == 'exclude' ? 'exclude_' : '') . "on_{$pt}";
            $current = $type == 'include' ? !empty($includes[$pt]) ? $includes[$pt] : array() : (!empty($excludes[$pt]) ? $excludes[$pt] : array());
            $type_field = $prefix;
            $type_prefix = $prefix . '_';
            $temp_ids = array();
            if (!empty($_POST[$type_field])) {
                foreach (explode(',', trim($_POST[$type_field])) as $id) {
                    if (is_int(intval($id))) {
                        $temp_ids[] = intval($id);
                    }
                }
            }
            /**
             * Remove existing meta that no longer exist in $_POST field.
             */
            if (!empty($current)) {
                foreach ($current as $id) {
                    if (!in_array($id, $temp_ids)) {
                        delete_post_meta($post_id, $type_prefix . $id);
                    }
                }
            }
            /**
             * Adds post meta for non existing post type ids in $_POST.
             */
            foreach ($temp_ids as $id) {
                if (!in_array($id, $current) && $id > 0) {
                    update_post_meta($post_id, $type_prefix . $id, true);
                }
            }
        }
    }
    do_action('popmake_save_popup', $post_id, $post);
}
function popmake_popup_targeting_condition_meta_box_fields($popup_id)
{
    $targeting_condition = popmake_get_popup_targeting_condition($popup_id);
    /**
     * Create nonce used for post type and taxonomy ajax searches. Copied from wp-admin/includes/nav-menu.php
     */
    wp_nonce_field('add-menu_item', 'menu-settings-column-nonce');
    /**
     * Render Load on entire site toggle.
     */
    ?>
	<div id="targeting_condition-on_entire_site" class="targeting_condition form-table">
		<input type="checkbox"
		       id="popup_targeting_condition_on_entire_site"
		       name="popup_targeting_condition_on_entire_site"
		       value="true"
			<?php 
    if (!empty($targeting_condition['on_entire_site'])) {
        echo 'checked="checked" ';
    }
    ?>
			/>
		<label for="popup_targeting_condition_on_entire_site"><?php 
    _e('On Entire Site', 'popup-maker');
    ?>
</label>

		<div class="options">
			<?php 
    do_action("popmake_popup_targeting_condition_on_entire_site_options", $targeting_condition);
    ?>
		</div>
	</div>
	<div id="targeting_condition-on_home" class="targeting_condition form-table">
		<input type="checkbox"
		       id="popup_targeting_condition_on_home"
		       name="popup_targeting_condition_on_home"
		       value="true"
			<?php 
    if (!empty($targeting_condition['on_home'])) {
        echo 'checked="checked" ';
    }
    ?>
			/>
		<label for="popup_targeting_condition_on_home"><?php 
    _e('On Home Page', 'popup-maker');
    ?>
</label>

		<div class="options">
			<?php 
    do_action("popmake_popup_targeting_condition_on_home_options", $targeting_condition);
    ?>
		</div>
	</div>
	<div id="targeting_condition-exclude_on_home" class="targeting_condition form-table">
		<input type="checkbox"
		       id="popup_targeting_condition_exclude_on_home"
		       name="popup_targeting_condition_exclude_on_home"
		       value="true"
			<?php 
    if (!empty($targeting_condition['exclude_on_home'])) {
        echo 'checked="checked" ';
    }
    ?>
			/>
		<label for="popup_targeting_condition_exclude_on_home"><?php 
    _e('Exclude on Home Page', 'popup-maker');
    ?>
</label>

		<div class="options">
			<?php 
    do_action("popmake_popup_targeting_condition_exclude_on_home_options", $targeting_condition);
    ?>
		</div>
	</div>
	<div id="targeting_condition-on_blog" class="targeting_condition form-table">
		<input type="checkbox"
		       id="popup_targeting_condition_on_blog"
		       name="popup_targeting_condition_on_blog"
		       value="true"
			<?php 
    if (!empty($targeting_condition['on_blog'])) {
        echo 'checked="checked" ';
    }
    ?>
			/>
		<label for="popup_targeting_condition_on_blog"><?php 
    _e('On Blog Index', 'popup-maker');
    ?>
</label>

		<div class="options">
			<?php 
    do_action("popmake_popup_targeting_condition_on_blog_options", $targeting_condition);
    ?>
		</div>
	</div>
	<div id="targeting_condition-exclude_on_blog" class="targeting_condition form-table">
	<input type="checkbox"
	       id="popup_targeting_condition_exclude_on_blog"
	       name="popup_targeting_condition_exclude_on_blog"
	       value="true"
		<?php 
    if (!empty($targeting_condition['exclude_on_blog'])) {
        echo 'checked="checked" ';
    }
    ?>
		/>
	<label for="popup_targeting_condition_exclude_on_blog"><?php 
    _e('Exclude on Blog Index', 'popup-maker');
    ?>
</label>

	<div class="options">
		<?php 
    do_action("popmake_popup_targeting_condition_exclude_on_blog_options", $targeting_condition);
    ?>
	</div>
	</div><?php 
    do_action('popmake_before_post_type_targeting_conditions', $targeting_condition);
    $includes = popmake_get_popup_targeting_condition_includes($popup_id);
    $excludes = popmake_get_popup_targeting_condition_excludes($popup_id);
    foreach (popmake_get_supported_types() as $pt) {
        $is_post_type = get_post_type_object($pt);
        $labels = $is_post_type ? $is_post_type : get_taxonomy($pt);
        if (!$labels) {
            continue;
        }
        $plural = esc_attr(strtolower($labels->labels->name));
        foreach (array('include', 'exclude') as $include_exclude) {
            $key = ($include_exclude != 'include' ? 'exclude_' : '') . "on_{$pt}s";
            $current = $include_exclude == 'include' ? !empty($includes[$pt]) ? $includes[$pt] : array() : (!empty($excludes[$pt]) ? $excludes[$pt] : array());
            ?>
		<div id="targeting_condition-<?php 
            echo $key;
            ?>
" class="targeting_condition form-table">
			<input type="checkbox"
			       id="popup_targeting_condition_<?php 
            echo $key;
            ?>
"
			       name="popup_targeting_condition_<?php 
            echo $key;
            ?>
"
			       value="true"
				<?php 
            if (!empty($targeting_condition[$key])) {
                echo 'checked="checked" ';
            }
            ?>
				/><?php 
            $label = ($include_exclude != 'include' ? 'Exclude ' : '') . 'On ';
            ?>
			<label for="popup_targeting_condition_<?php 
            echo $key;
            ?>
"><?php 
            echo __($label, 'popup-maker') . $labels->labels->name;
            ?>
</label>

			<div class="options">
				<p style="margin:0;"><?php 
            $key = ($include_exclude != 'include' ? 'exclude_' : '') . "on_specific_{$pt}s";
            ?>
					<input type="checkbox" style="display:none" name="popup_targeting_condition_<?php 
            echo $key;
            ?>
" value="true" <?php 
            if (isset($targeting_condition[$key])) {
                echo 'checked';
            }
            ?>
/>
					<label><?php 
            $label = ($include_exclude == 'include' ? 'Load' : 'Exclude') . ' on All ';
            echo __($label, 'popup-maker') . $labels->labels->name;
            ?>
						<input type="radio"
						       name="<?php 
            echo $key;
            ?>
"
						       id="popup_targeting_condition_<?php 
            echo $key;
            ?>
"
						       value=""
							<?php 
            if (!isset($targeting_condition[$key])) {
                echo 'checked';
            }
            ?>
							/>
					</label><br/>
					<label><?php 
            $label = ($include_exclude == 'include' ? 'Load' : 'Exclude') . ' on Specific ';
            echo __($label, 'popup-maker') . $labels->labels->name;
            ?>
						<input type="radio"
						       name="<?php 
            echo $key;
            ?>
"
						       id="popup_targeting_condition_<?php 
            echo $key;
            ?>
"
						       value="true"
							<?php 
            if (isset($targeting_condition[$key])) {
                echo 'checked';
            }
            ?>
							/>
					</label>
				</p>

				<div id="<?php 
            echo $key;
            ?>
">
					<div class="nojs-tags hide-if-js">
							<textarea
								name="popup_targeting_condition_<?php 
            echo $include_exclude == 'exclude' ? 'exclude_' : '';
            ?>
on_<?php 
            echo $pt;
            ?>
"
								rows="3" cols="20"
								id="popup_targeting_condition_<?php 
            echo $include_exclude == 'exclude' ? 'exclude_' : '';
            ?>
on_<?php 
            echo $pt;
            ?>
"
								><?php 
            esc_html_e(trim(implode(',', $current)));
            ?>
</textarea>
					</div>
					<div class="hide-if-no-js"><?php 
            if ($is_post_type) {
                popmake_post_type_item_metabox($pt);
            } else {
                popmake_taxonomy_item_metabox($pt);
            }
            ?>
						<div class="tagchecklist"><?php 
            foreach ($current as $post_id) {
                ?>
								<span><a class="ntdelbutton" data-id="<?php 
                echo $post_id;
                ?>
">X</a>
								<?php 
                echo $is_post_type ? get_the_title($post_id) : get_term_name($post_id, $pt);
                ?>
								</span><?php 
            }
            ?>
						</div>
					</div>
					<hr/>
				</div>
			</div>
			</div><?php 
        }
    }
    ?>
	<div id="targeting_condition-on_search" class="targeting_condition form-table">
		<input type="checkbox"
		       id="popup_targeting_condition_on_search"
		       name="popup_targeting_condition_on_search"
		       value="true"
			<?php 
    if (!empty($targeting_condition['on_search'])) {
        echo 'checked="checked" ';
    }
    ?>
			/>
		<label for="popup_targeting_condition_on_search"><?php 
    _e('On Search Pages', 'popup-maker');
    ?>
</label>

		<div class="options">
			<?php 
    do_action("popmake_popup_targeting_condition_on_search_options", $targeting_condition);
    ?>
		</div>
	</div>
	<div id="targeting_condition-exclude_on_search" class="targeting_condition form-table">
		<input type="checkbox"
		       id="popup_targeting_condition_exclude_on_search"
		       name="popup_targeting_condition_exclude_on_search"
		       value="true"
			<?php 
    if (!empty($targeting_condition['exclude_on_search'])) {
        echo 'checked="checked" ';
    }
    ?>
			/>
		<label for="popup_targeting_condition_exclude_on_search"><?php 
    _e('Exclude on Search Pages', 'popup-maker');
    ?>
</label>

		<div class="options">
			<?php 
    do_action("popmake_popup_targeting_condition_exclude_on_search_options", $targeting_condition);
    ?>
		</div>
	</div>
	<div id="targeting_condition-on_404" class="targeting_condition form-table">
		<input type="checkbox"
		       id="popup_targeting_condition_on_404"
		       name="popup_targeting_condition_on_404"
		       value="true"
			<?php 
    if (!empty($targeting_condition['on_404'])) {
        echo 'checked="checked" ';
    }
    ?>
			/>
		<label for="popup_targeting_condition_on_404"><?php 
    _e('On 404 Pages', 'popup-maker');
    ?>
</label>

		<div class="options">
			<?php 
    do_action("popmake_popup_targeting_condition_on_404_options", $targeting_condition);
    ?>
		</div>
	</div>
	<div id="targeting_condition-exclude_on_404" class="targeting_condition form-table">
	<input type="checkbox"
	       id="popup_targeting_condition_exclude_on_404"
	       name="popup_targeting_condition_exclude_on_404"
	       value="true"
		<?php 
    if (!empty($targeting_condition['exclude_on_404'])) {
        echo 'checked="checked" ';
    }
    ?>
		/>
	<label for="popup_targeting_condition_exclude_on_404"><?php 
    _e('Exclude on 404 Pages', 'popup-maker');
    ?>
</label>

	<div class="options">
		<?php 
    do_action("popmake_popup_targeting_condition_exclude_on_404_options", $targeting_condition);
    ?>
	</div>
	</div><?php 
}