On a typical WordPress setup there are many small tweaks that we do all the time. Helping with workflow, security or performance.
We call this our WordPress Experience because it's an opinionated set of features that make sense for a majority of our builds. Whether they are on the Company Cloud platform or an install with any theme or plugins. It's simply the way we like WordPress.
For almost every feature there is a filter, constant or action allowing you to customize the behavior.
- Adds link to a "My Website" dashboard powered by BM360.
- Add slight Bernskiold Media branding
- Add links to Bernskiold Media help and support
- Clean up the admin bar with less important nodes (Comments, Yoast SEO, New Draft, Customizer)
- Remove lesser used dashboard widgets.
- Remove import/export pages by default and only show them if
BM_WP_ENABLE_IMPORT_EXPORT
is set to true. Most of the time we don't need this. - Custom branded admin theme in our colors.
- Removes ACF settings if on production environment.
- Remove "Howdy" from the admin bar.
- Removes ads from a series of plugins
- Disable the block directory.
- Remove Yoast SEO metabox in the block editor.
- Styles the post editor and title to be less part of the page and more title to better go with the template.
- Disable User Autocomplete unless specified by
BM_WP_ALLOW_USER_AUTOCOMPLETE
.
- Remove WordPress version/generator info from header.
- Rewrite the search URL to a nice url (
/search/{query}
) instead of query variable unless specified byBM_WP_PRETTIFY_SEARCH_URL
- Prevent empty search queries from redirecting to home page
- Disable emoji styles
- Remove links to feeds unless specified by
BM_WP_DISABLE_FEED_URLS
.
- Disable comments on site or network. Can be overridden with
BM_WP_ENABLE_COMMENTS
.
- Option to enqueues extra CSS from the customizer to a file instead of printing inline.
- Show environment notice in admin bar for administrators.
- Show staging environment notice publically for administrators.
- Disable indexing for non-production environments.
- Integrates with BM Analytics for easy configuration.
- Configure the tracking code with common settings through filters.
- Ability to configure another Matomo instance for the tracking code.
- Automatically tracks site search.
- Enable automatic connection with Matomo by defining
BM_WP_ENABLE_AUTOMATIC_MATOMO
- Allows easy configuration of sending via SMTP instead of PHP Sendmail.
- Allows easy configuration of sending via Postal instead of SMTP or PHP Sendmail.
- Sanitize uploaded file names from non-ASCII characters.
- Have password resets go through the local site where the user is signing in, instead of the main site.
- Added a REST API endpoint for Oh Dear that we use for monitoring client sites.
- Include a tab with suggested plugins from Bernskiold Media.
- Add a warning when disabling this plugin.
- Restrict all API endpoints by default unless defined by
BM_WP_RESTRICT_REST_API
(all, users, none). - Fixes a WP bug where pagination isn't working when sorting by menu order.
The SearchWP integration automatically runs if SearchWP is active.
- Enables adding the license key via the
SEARCH_WP_LICENSE_KEY
in config. - Disabled admin bar entry.
- Add two-factor authentication support.
- Ability to force two-factor authentication for the website.
- Force non-local environments to use strong passwords.
- Prevent users from using explicitly defined weak passwords.
- Default to disabling the core file editor from admin.
- Adds common-sense default HTTP headers to .htaccess on install.
- Adds rule to .htaccess to disable XMLRPC.
- Always show all (100 000) episodes of a podcast in the podcast feed that goes out to platforms.
- Check that
wp-config.php
is secured properly. - If an
.env
file exists in the public directory, check that it is secured. - Check that our Company Cloud configuration files in
config/
are secured if it is placed in the web root.
- Ability to hide update notices by defining
BM_WP_HAS_MAINTENANCE_PLAN
in the config.
- Prevent agency users from being indexed.
- Remove color scheme picker.
The WooCommerce integration automatically runs if WooCommerce is active.
- Disable startup wizard.
- Disable marketing section.
- Suppress notice about connecting store to WC.com.
- Remove suggestions from WooCommerce marketplace.
- Remove extension library from menus.
- Remove SkyVerge support dashboard.
- Hide some dashboard widgets.
- Remove WooCommerce widgets.
- Hide notice to install WC Admin.
- Remove order processing count in admin menu.
- Remove usage tracker cron event.
- Disables password strength meter.
- Removes assets on non-woocommerce pages.
- Removes fragments on non-woocommerce pages.
BM_WP_WEBSITE_UUID
- Set the website UUID from BM360. Don't forget to add the server IP to the website in BM360 to allow access.
bm_wpexp_show_admin_page_cc_dashboard
- Disable the admin page for the dashboard, even if the UUID is set.
Enable Import/Export Screens: By default we hide the import/export pages. If you need these in the menu, set BM_WP_ENABLE_IMPORT_EXPORT
to true
.
Show ads from plugins: If you for some reason would like to show ads from plugins in the admin, you can set the bm_wpexp_enable_admin_ad_blocker
filter to
false: add_filter( 'bm_wpexp_enable_admin_ad_blocker', '__return_false' )
.
bm_wpexp_custom_admin_theme
- Return false to disable our custom branding.
bm_wpexp_show_help_widget
- Return false to hide the BM help widget.
bm_wpexp_show_admin_page_support
- Return false to hide the support admin page.
Enable Block Directory: By default the block directory is disabled. Define and set BM_WP_ENABLE_BLOCK_DIRECTORY
to false
to allow it.
Disable Block Editor Styling By default we ship a block editor styling. By returning the bm_wpexp_enable_block_editor_styling
as false you can disable this, for example via a
mu-plugin. add_filter( 'bm_wpexp_enable_block_editor_styling', '__return_false' )
.
Hides Yoast Metabox Yoast SEO has a lovely block editor plugin which works great. So we prefer to get rid of the metabox. We hide it with plain CSS.
Allow Feed URLs: By default we hide feed URLs from the header. If you are using feeds, set BM_WP_DISABLE_FEED_URLS
to false
in your configuration.
Allow Comments: By default we disable comments as more often than note we don't need them. If you want comments, just set BM_WP_ENABLE_COMMENTS
to true
in your
configuration.
bm_wpexp_custom_css_as_file
- Return true to split out customizer CSS to its own file.
bm_wpexp_custom_css_storage_directory_path
- Customize the path to the storage directory for custom CSS.
bm_wpexp_custom_css_storage_directory_uri
- Customize the URL to the storage directory for custom CSS.
bm_wpexp_custom_css_file_name
- Customize the name of the custom CSS file.
bm_wpexp_staging_environment_label
- Customize the name of the environment shown in the admin bar.
bm_wpexp_environment_role
- Customize which role the user must have in order to see the environment notices. Defaults to manage_options
.
bm_wpexp_environment_show_admin_bar
- Return false
to hide the environment in the admin bar.
bm_wpexp_environment_show_staging_public
- Return false
to hide the public staging environment banner.
bm_wpexp_environment_disable_indexing_for_non_production
- Return false
to enable indexing for non-production environments.
bm_wpexp_environment_staging_public_label
- Customize the label shown on the public staging environment banner.
BM_WP_SMTP_ENABLED
- Set to true
to send e-mail via SMTP. By default this will only apply to production environments.
BM_WP_SMTP_OUTSIDE_PRODUCTION
- Set to true
to send e-mail via SMTP even if the environment is not set as production.
BM_WP_SMTP_HOST
- Define the SMTP host to send through.
BM_WP_SMTP_USERNAME
- Define the SMTP e-mail account username to send through.
BM_WP_SMTP_PASSWORD
- Define the SMTP e-mail account password to send through.
BM_WP_SMTP_PORT
- Set which port the connection should be made through. Should be set as an integer. Defaults to 587
.
BM_WP_SMTP_SECURITY
- Set the sending security for the SMTP server. Defaults to tls
.
BM_WP_SMTP_SITE_IDS
- Set side ids in an array to only use SMTP for some sites in a multisite. Defaults to work for all sites.
BM_WP_NOTIFICATIONS_FROM_EMAIL_USERNAME
- Define the username for the e-mail address to send from. Defaults to 'notification'
BM_WP_NOTIFICATIONS_FROM_NAME
- Define the name for the sender of the e-mail. Defaults to site name.
BM_WP_NOTIFICATIONS_FROM_EMAIL_ADDRESS
- Define the e-mail address to send from.
bm_wpexp_notifications_from_email_username
- Filter the username for the e-mail address to send from. Defaults to 'notification'
bm_wpexp_notifications_from_name
- Filter the name for the sender of the e-mail. Defaults to site name.
bm_wp_notifications_from_email_address
- Filter the e-mail address to send from.
BM_WP_POSTAL_DOMAIN
- Optionally customize the domain for the Postal install. Defaults to https://postal.oderland.com
BM_WP_POSTAL_API_KEY
- Add the API key for the Postal service. Without it, Postal is not active.
BM_WP_POSTAL_OUTSIDE_PRODUCTION
- Set to true
to send e-mail via Postal even if the environment is not set as production.
BM_WP_POSTAL_ENABELD
- Set to true
to send e-mail via Postal. Defaults to true
if the API key is set.
BM_WP_MATOMO_SITE_ID
- Set the site id from Matomo.
bm_wpexp_matomo_enabled
- Return this filter false to disable the Matomo module completely (by default it is enabled if the site ID is set).
bm_wpexp_matomo_url
- Return a string URL with the Matomo instance base URL.
bm_wpexp_matomo_require_cookie_consent
- Return false to disable the automatic cookie consent requirement (integrates with Ilmenite Cookie Consent)
bm_wpexp_matomo_enable_user_id
- Return true to track the user ID. This is not compatible with cookie-less.
bm_wpexp_matomo_enable_subdomains
- Return true to enable subdomain tracking.
bm_wpexp_matomo_subdomains_domain
- Return the domain name for subdomain tracking (for example: example.com). Requires for subdomain tracking.
bm_wpexp_matomo_load_outside_production
- Return true to load the tracking code outside of a defined production environment.
bm_wpexp_matomo_configuration_before_pageview
- This action lets you further customize and configure the tracking code.
Choose API restriction level: By default, the REST API requires authentication for all endpoints. By setting the BM_WP_RESTRICT_REST_API
constant you may change this. all
(
default) restricts all endpoints. users
restricts only the users endpoint. none
doesn't restrict any endpoint.
Enforce Two Factor Authentication: By default two-factor authentication is an opt-in option for users. To force it, please define BM_WP_REQUIRE_TWO_FACTOR
to true in your
config. By default all core roles with admin access are required to opt in.
bm_wpexp_weak_passwords
- Customize the array of passwords that are always considered weak.
bm_wpexp_roles_requiring_two_factor
- Customize the array of roles which are required to have two-factor authentication enabled.
bm_wpexp_modify_htaccess_on_install
- Return false to stop the .htaccess file from being modified on install.
bm_wpexp_sspodcast_posts_in_feed
- Customize how many posts should show up in the podcasting feeds. Defaults to 100 000.
Hide update notices: By default all update notices are showing, however for websites on a maintenance plan it is nice if users doesn't see any updates in the admin as they are
managed anyway (just not daily). Define BM_WP_HAS_MAINTENANCE_PLAN
to true
in the config to disable updates.
bm_wpexp_allow_bm_author_index
- Define as true
to allow indexing of agency users.
bm_wpexp_authors_allowlisted_domains
- Allows you to customize the array of domains where agency users are always allowed (our own websites).
bm_wpexp_authors_email_domains
- Allows you to customize the array of email domains that designate agency users.
bm_wpexp_remove_color_scheme_picker
- Return false
to override the default behavior of hide, and instead show the color scheme picker.
bm_wpexp_woocommerce_widgets
- Customize the list of widgets to unregister.
bm_wpexp_woocommerce_disable_password_strength_meter
- Return as false
to enable the password strength meter.
bm_wpexp_woocommerce_disable_assets_on_non_woo_pages
- Return as false
to load assets even on non-WooCommerce pages.
bm_wpexp_woocommerce_disable_fragments_on_non_woo_pages
- Return as false
to load fragments even on non-WooCommerce pages. For example if you have a dynamic cart on all pages.
To set up monitoring via OhDear.app you need to add the REST API endpoint to the website in OhDear's application monitoring settings. The URL
is https://yourdomain.com/wp-json/bm-wp-experience/v1/application-health
.
To run this endpoint, a secret must be configured and defined in your config:
define( 'BM_WP_OH_DEAR_SECRET', 'my-secret-here' );
The same secret needs to be defined in OhDear's settings. It will then be sent via all requests to the API. The secrets in OhDear and the application must match for proper authentication.