BSF_Admin_Notices::dismiss_notice()
Dismiss Notice.
Description
Return
(void)
Source
File: inc/lib/astra-notices/class-bsf-admin-notices.php
public function dismiss_notice() {
check_ajax_referer( 'astra-notices', 'nonce' );
$notice_id = ( isset( $_POST['notice_id'] ) ) ? sanitize_key( wp_unslash( $_POST['notice_id'] ) ) : '';
$repeat_notice_after = ( isset( $_POST['repeat_notice_after'] ) ) ? absint( $_POST['repeat_notice_after'] ) : 0;
$notice = $this->get_notice_by_id( $notice_id );
$capability = isset( $notice['capability'] ) ? $notice['capability'] : 'manage_options';
$has_cap = current_user_can( $capability );
/**
* Filters whether the current user passes the capability check for notice dismissal.
*
* Both the legacy and new filter names are fired for backward compatibility.
* Filters can only restrict access (return false), never grant it — if the
* underlying current_user_can() check fails, filters cannot override to true.
*/
$cap_check = apply_filters( 'BSF_Admin_Notices_user_cap_check', $has_cap );
$cap_check = apply_filters( 'bsf_admin_notices_user_cap_check', $cap_check );
if ( ! $has_cap || ! $cap_check ) {
wp_send_json_error( esc_html__( 'Permission denied.', 'astra' ) );
}
$allowed_notices = get_option( 'allowed_BSF_Admin_Notices', array() ); // Get allowed notices.
// Define restricted user meta keys using the dynamic table prefix.
global $wpdb;
$wp_default_meta_keys = array(
$wpdb->prefix . 'capabilities',
$wpdb->prefix . 'user_level',
$wpdb->prefix . 'user-settings',
'account_status',
'session_tokens',
);
// if $notice_id does not start with astra-notices-id and notice_id is not from the allowed notices, then return.
if ( 0 !== strpos( $notice_id, 'astra-notices-id-' ) && ( ! in_array( $notice_id, $allowed_notices, true ) ) ) {
wp_send_json_error( esc_html__( 'Invalid notice ID.', 'astra' ) );
}
// Valid inputs?
if ( ! empty( $notice_id ) ) {
if ( in_array( $notice_id, $wp_default_meta_keys, true ) ) {
wp_send_json_error( esc_html__( 'Invalid notice ID.', 'astra' ) );
}
if ( ! empty( $repeat_notice_after ) ) {
set_transient( $notice_id, true, $repeat_notice_after );
} else {
update_user_meta( get_current_user_id(), $notice_id, 'notice-dismissed' );
}
wp_send_json_success();
}
wp_send_json_error();
}
Expand full source code Collapse full source code View on Trac
Changelog
| Version | Description |
|---|---|
| 1.2.0 | Introduced. |