: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
* WPForms admin bar menu.
if ( ! $this->has_access() ) {
public function hooks() {
add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_css' ] );
add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_css' ] );
add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_js' ] );
add_action( 'admin_bar_menu', [ $this, 'register' ], 999 );
add_action( 'wpforms_wp_footer_end', [ $this, 'menu_forms_data_html' ] );
* Determine whether the current user has access to see admin bar menu.
public function has_access() {
is_admin_bar_showing() &&
wpforms_current_user_can() &&
! wpforms_setting( 'hide-admin-bar', false )
return (bool) apply_filters( 'wpforms_admin_adminbarmenu_has_access', $access );
* Determine whether new notifications are available.
public function has_notifications() {
return wpforms()->get( 'notifications' )->get_count();
public function enqueue_css() {
$min = wpforms_get_min_suffix();
WPFORMS_PLUGIN_URL . "assets/css/admin-bar{$min}.css",
// Apply WordPress pre/post 5.7 accent color, only when admin bar is displayed on the frontend or we're
// inside the Form Builder - it does not load some WP core admin styles, including themes.
if ( wpforms_is_admin_page( 'builder' ) || ! is_admin() ) {
'#wpadminbar .wpforms-menu-notification-counter, #wpadminbar .wpforms-menu-notification-indicator {
background-color: %s !important;
color: #ffffff !important;
version_compare( get_bloginfo( 'version' ), '5.7', '<' ) ? '#ca4a1f' : '#d63638'
* Enqueue JavaScript files.
public function enqueue_js() {
function wpforms_admin_bar_menu_init() {
var template = document.getElementById( 'tmpl-wpforms-admin-menubar-data' ),
notifications = document.getElementById( 'wp-admin-bar-wpforms-notifications' );
var menu = document.getElementById( 'wp-admin-bar-wpforms-menu-default' );
menu.insertAdjacentHTML( 'afterBegin', template.innerHTML );
notifications.insertAdjacentHTML( 'afterend', template.innerHTML );
document.addEventListener( 'DOMContentLoaded', wpforms_admin_bar_menu_init );
* Register and render admin bar menu items.
* @param WP_Admin_Bar $wp_admin_bar WordPress Admin Bar object.
public function register( WP_Admin_Bar $wp_admin_bar ) {
$items = (array) apply_filters(
'wpforms_admin_adminbarmenu_register',
foreach ( $items as $item ) {
$this->{ $item }( $wp_admin_bar );
do_action( "wpforms_admin_adminbarmenu_register_{$item}_after", $wp_admin_bar );
* Render primary top-level admin bar menu item.
* @param WP_Admin_Bar $wp_admin_bar WordPress Admin Bar object.
public function main_menu( WP_Admin_Bar $wp_admin_bar ) {
$notifications = $this->has_notifications();
$count = $notifications < 10 ? $notifications : '!';
$indicator = ' <div class="wp-core-ui wp-ui-notification wpforms-menu-notification-counter">' . $count . '</div>';
'title' => 'WPForms' . $indicator,
'href' => admin_url( 'admin.php?page=wpforms-overview' ),
* Render Notifications admin bar menu item.
* @param WP_Admin_Bar $wp_admin_bar WordPress Admin Bar object.
public function notification_menu( WP_Admin_Bar $wp_admin_bar ) {
if ( ! $this->has_notifications() ) {
'parent' => 'wpforms-menu',
'id' => 'wpforms-notifications',
'title' => esc_html__( 'Notifications', 'wpforms-lite' ) . ' <div class="wp-core-ui wp-ui-notification wpforms-menu-notification-indicator"></div>',
'href' => admin_url( 'admin.php?page=wpforms-overview' ),
* Render All Forms admin bar menu item.
* @param WP_Admin_Bar $wp_admin_bar WordPress Admin Bar object.
public function all_forms_menu( WP_Admin_Bar $wp_admin_bar ) {
'parent' => 'wpforms-menu',
'title' => esc_html__( 'All Forms', 'wpforms-lite' ),
'href' => admin_url( 'admin.php?page=wpforms-overview' ),
* Render All Payments admin bar menu item.
* @param WP_Admin_Bar $wp_admin_bar WordPress Admin Bar object.
public function all_payments_menu( WP_Admin_Bar $wp_admin_bar ) {
'parent' => 'wpforms-menu',
'id' => 'wpforms-payments',
'title' => esc_html__( 'Payments', 'wpforms-lite' ),
'page' => 'wpforms-payments',
* Render Add New admin bar menu item.
* @param WP_Admin_Bar $wp_admin_bar WordPress Admin Bar object.
public function add_new_menu( WP_Admin_Bar $wp_admin_bar ) {
'parent' => 'wpforms-menu',
'id' => 'wpforms-add-new',
'title' => esc_html__( 'Add New', 'wpforms-lite' ),
'href' => admin_url( 'admin.php?page=wpforms-builder' ),
* Render Community admin bar menu item.
* @param WP_Admin_Bar $wp_admin_bar WordPress Admin Bar object.
public function community_menu( WP_Admin_Bar $wp_admin_bar ) {
'parent' => 'wpforms-menu',
'id' => 'wpforms-community',
'title' => esc_html__( 'Community', 'wpforms-lite' ),
'href' => 'https://www.facebook.com/groups/wpformsvip/',
'rel' => 'noopener noreferrer',
* Render Support admin bar menu item.
* @since 1.7.4 Update the `Support` item title to `Help Docs`.
* @param WP_Admin_Bar $wp_admin_bar WordPress Admin Bar object.
public function support_menu( WP_Admin_Bar $wp_admin_bar ) {
'utm_campaign' => wpforms()->is_pro() ? 'plugin' : 'liteplugin',
'utm_medium' => 'admin-bar',
'utm_source' => 'WordPress',
'utm_content' => 'Documentation',
'https://wpforms.com/docs/'
'parent' => 'wpforms-menu',
'id' => 'wpforms-help-docs',
'title' => esc_html__( 'Help Docs', 'wpforms-lite' ),
'rel' => 'noopener noreferrer',
* Get form data for JS to modify the admin bar menu.
* @since 1.8.4 Added the View Payments link.
* @param array $forms Forms array.
protected function get_forms_data( $forms ) {
'has_notifications' => $this->has_notifications(),
'edit_text' => esc_html__( 'Edit Form', 'wpforms-lite' ),
'entry_text' => esc_html__( 'View Entries', 'wpforms-lite' ),
'payment_text' => esc_html__( 'View Payments', 'wpforms-lite' ),
'survey_text' => esc_html__( 'Survey Results', 'wpforms-lite' ),
$admin_url = admin_url( 'admin.php' );
foreach ( $forms as $form ) {
$form_id = absint( $form['id'] );
if ( empty( $form_id ) ) {
/* translators: %d - form ID. */
$form_title = sprintf( esc_html__( 'Form ID: %d', 'wpforms-lite' ), $form_id );
if ( ! empty( $form['settings']['form_title'] ) ) {
$form_title = wp_html_excerpt(
sanitize_text_field( $form['settings']['form_title'] ),
$has_payments = wpforms()->get( 'payment' )->get_by( 'form_id', $form_id );
$data['forms'][] = apply_filters(
'wpforms_admin_adminbarmenu_get_form_data',
'edit_url' => add_query_arg(
'page' => 'wpforms-builder',
'payments_url' => $has_payments ? add_query_arg(
'page' => 'wpforms-payments',
* Add form(s) data to the page.
* @param array $forms Forms array.
public function menu_forms_data_html( $forms ) {
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
'forms_data' => $this->get_forms_data( $forms ),