WP Manifestindependent plugin directory
manifest / utilities / embold-wordpress-tweaks

emBold WordPress Tweaks WP Registry grade D+. High-severity findings · 4 findingsWP RegistryHigh-severity findings · 4 findingsOpen the reportD+

A collection of our common Wordpress tweaks and improvements.

★ 0stars
660release downloads
≈30active sites
1.11.0latest · 17d ago

Install

Download embold-wordpress-tweaks.1.11.0.zip From the 1.11.0 release on GitHub, Oct 5, 2026

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/emboldagency/embold-wordpress-tweaks/releases/download/1.11.0/embold-wordpress-tweaks.1.11.0.zip
Updates itself. It ships its own updater (Plugin Update Checker), so new versions appear under Dashboard → Updates.

Note: This is the development documentation. WordPress plugins use readme.txt for their official plugin information and changelog, not this README.md file.

WordPress plugin that provides common tweaks and changes we normally have to make in every generic WordPress website.

Features

  1. Allow SVG uploads in the admin panel.
  2. Local only: Defer and async various Gutenberg scripts to avoid Coders 502 errors.
  3. Non-prod only: Disable all "wp_mail" functions by default so Mailgun can't randomly mass email users. This will also break the test email sent out from local. Override SMTP settings with constants or plugin options.
  4. Disable the XML-RPC functionality.
  5. Remove line breaks from img tags if litespeed cache plugin is active.
  6. Allow searching for posts/pages by slug in the admin panel using the prefix 'slug:' before the search term.
  7. Adds a slug column to the posts/pages tables in the admin panel.
  8. Disables plugin, theme, and file management unless email is our set email. Additional emails can be set in the wp-config.
  9. Disables the built-in WordPress emoji JavaScript and styles.
  10. Disables Dashicons on the front end for logged out users.
  11. Removes the RSD (Really Simple Discovery) link tag from the page head.
  12. Removes the shortlink tag from the page head.
  13. Removes the WordPress version generator meta tag from the page head and RSS/Atom feeds.
  14. Removes the RSS/Atom feed link tags from the page head.
  15. Removes WP REST API metadata (discovery link tag and HTTP header) from the page head without disabling the REST API.
  16. Disables automatic oEmbed embedding (YouTube, Tweets, etc.) when pasting a URL into post content. Off by default.

Strict requirements

  1. Define the 'WP_ENVIRONMENT_TYPE' as 'development', 'staging', or 'production' in the corresponding wp-config.php
define('WP_ENVIRONMENT_TYPE', 'development');
  1. Make sure that our user account for the site is set to info@embold.com or info@wphaven.app.

Disable user account restrictions

To disable all of our theme, plugin, and file protections, allowing any user to make dangerous changes:

define('LOOSE_USER_RESTRICTIONS', true);

Additional elevated user accounts

Define the ELEVATED_EMAILS as an array in your local wp-config.php - these account emails will be able to manage plugins and themes, but they will still be disabled from editing php files directly.

define('ELEVATED_EMAILS', ['worf@embold.com', 'spock@embold.com']);

This only needs set on production if we don't have an info@embold.com or info@wphaven.app account there or if the client requests permissions.

Disable/override mail on staging/local

Mail is blocked by default in non-production environments to prevent accidental emailing of real users.

Default behavior:

  • Production: Mail is allowed.
  • Staging/Development: Mail is blocked.
  • Local: Mail uses local Mailpit if detected.

Controlling mail behavior

You can control this behavior using constants in wp-config.php.

Block all mail Strictly block all mail, regardless of environment.

define('DISABLE_MAIL', true);

Override with SMTP Defining EMBOLD_SMTP_HOST will automatically enable "SMTP Override" mode if DISABLE_MAIL is not set to true. This is useful for using tools like Mailpit on staging.

define('EMBOLD_SMTP_HOST', 'mailpit');
define('EMBOLD_SMTP_PORT', 1025);
define('EMBOLD_SMTP_FROM_EMAIL', 'admin@local.test');
define('EMBOLD_SMTP_FROM_NAME', 'Local Test');
define('EMBOLD_SMTP_USERNAME', '');
define('EMBOLD_SMTP_PASSWORD', '');
define('EMBOLD_SMTP_SECURE', '');

Allow mail If you simply want to allow mail to function normally (using the server's default mailer) on a staging/dev site:

define('DISABLE_MAIL', false);

Precedence order:

  1. DISABLE_MAIL (true) -> Block everything.
  2. EMBOLD_SMTP_HOST (defined) -> Use SMTP settings.
  3. DISABLE_MAIL (false) -> Allow normal mail flow unless.
  4. Plugin Options (Settings Page).
  5. Environment Defaults.

Constants

Core & security

Control core behavior and security settings via constants in wp-config.php:

  • LOOSE_USER_RESTRICTIONS: Disable theme, plugin, and file protections
  • ELEVATED_EMAILS: Array of additional admin emails
  • EMBOLD_ALLOW_SVG: Enable SVG uploads (Warning: Security Risk)
  • EMBOLD_DISABLE_XMLRPC: Re-enable XML-RPC (Disabled by default)
  • EMBOLD_DISABLE_ACF_ESCAPING: Disable ACF shortcode escaping

Performance & debugging

Control debug logging and performance tweaks:

  • EMBOLD_SUPPRESS_LOGS: Suppress debug logs
  • EMBOLD_SUPPRESS_LOGS_EXTRA: Array of extra strings to suppress
  • EMBOLD_DEFER_SCRIPTS: Defer non-critical scripts to avoid 502s
  • EMBOLD_ASYNC_SCRIPTS: Async admin scripts
  • EMBOLD_CLEAN_IMG_TAGS: Remove line breaks from img tags (Litespeed Cache)
  • EMBOLD_DISABLE_WP_EMOJI: Disable built-in WP emoji JS/styles (Disabled by default)
  • EMBOLD_DISABLE_DASHICONS: Disable Dashicons for logged out users (Disabled by default)
  • EMBOLD_DISABLE_RSD_LINK: Disable the RSD link tag (Disabled by default)
  • EMBOLD_DISABLE_SHORTLINK: Disable the shortlink tag (Disabled by default)
  • EMBOLD_DISABLE_GENERATOR_TAG: Disable the generator meta tag (Disabled by default)
  • EMBOLD_DISABLE_RSS_LINKS: Disable the RSS feed link tags (Disabled by default)
  • EMBOLD_DISABLE_REST_METADATA: Disable WP REST API metadata in the head (Disabled by default; does not disable the REST API)
  • EMBOLD_DISABLE_OEMBED: Disable automatic oEmbed embedding of pasted URLs (Off by default — oEmbed stays enabled unless this is turned on)

Admin interface

Configure admin panel features:

  • EMBOLD_ENABLE_SLUG_SEARCH: Enable slug search
  • EMBOLD_ENABLE_SLUG_COLUMN: Enable slug column
  • EMBOLD_REMOVE_HOWDY: Remove "Howdy" greeting

Installation through git

From the wp-content/plugins directory:

git clone git@github.com:emboldagency/embold-wordpress-tweaks.git && \
cd embold-wordpress-tweaks && \
bash scripts/clean-dist.sh --yes && \
wp plugin activate embold-wordpress-tweaks

scripts/clean-dist.sh strips the dev-only files listed in .distignore (including .git itself) so the installed copy matches what the release ZIP would have contained. As a safety check, it refuses to run against a git working tree that has uncommitted changes or unpushed commits — that's the signature of an active development checkout, not a fresh site install — so it won't accidentally wipe out .git in a repo you're actively working in. Run it with no arguments first to preview what would be removed; pass --force to bypass that check if you really mean to clean a dev checkout.

Development setup

This project uses Docker Compose for local development.

Prerequisites

  • Docker and Docker Compose
  • Git

Getting started

  1. Clone the repository
  2. Start the development environment:
    docker compose up -d
  3. Access WordPress at http://localhost:8080

WP-CLI usage

The project includes a persistent CLI container for easier package management:

# Start the CLI container (if not already running)
docker compose up cli -d

# Run WP-CLI commands
docker compose exec cli wp --info

# Install WP-CLI packages (they persist across restarts)
docker compose exec cli wp package install <package-name>

Building for distribution

GitHub Actions (automated)

Every time a new semver tag (e.g., v1.2.3) is pushed to the repository, a GitHub Action automatically runs to build and release the plugin.

  1. Syncs Version: Updates the plugin file header version to match the git tag.
  2. Builds Archive: Uses wp dist-archive to create a production-ready ZIP file.
  3. Creates Release: Publishes a GitHub Release with the ZIP attached.

You can download the latest build from the Releases page.

Manual build

To manually build the plugin for distribution (excluding development files):

  1. Ensure the CLI container is running:

    docker compose up cli -d
  2. Build the plugin to the dist directory:

    # Option 1: Use the build script (recommended)
    ./scripts/build.sh
    
    # Option 2: Manual steps
    # Create distribution archive and extract to dist/
    docker compose exec cli sh -c "cd /var/www/html/wp-content/plugins/embold-wordpress-tweaks && wp dist-archive . /tmp/ --format=zip"
    
    # Set up directory structure
    mkdir -p dist/archives dist/extracted
    
    # Copy versioned archive (replace ${VERSION} with actual version)
    docker cp embold-wordpress-tweaks-cli-1:/tmp/embold-wordpress-tweaks.${VERSION}.zip ./dist/archives/embold-wordpress-tweaks.${VERSION}.zip
    
    # Extract to dist/extracted/
    cd dist/extracted && unzip -q ../archives/embold-wordpress-tweaks.${VERSION}.zip && cd ../..
  3. The build creates this structure:

    dist/
    ├── archives/
    │   └── embold-wordpress-tweaks-v1.0.0.zip  (WordPress-ready)
    └── extracted/
        ├── embold-wordpress-tweaks.php
        ├── includes/
        └── ... (all plugin files)

Note: On Windows, you can use WSL to run the bash script.

Creating distribution archives

The project includes the wp dist-archive command for creating clean distribution archives that respect the .distignore file.

Creating an archive

  1. Ensure the containers are running:

    docker compose up -d
  2. Create a distribution archive:

    # Navigate to the plugin directory and create archive
    docker compose exec cli sh -c "cd /var/www/html/wp-content/plugins/embold-wordpress-tweaks && wp dist-archive . /tmp/ --format=zip"
  3. Copy the archive to your host machine:

    docker cp embold-wordpress-tweaks-cli-1:/tmp/embold-wordpress-tweaks.${VERSION}.zip .

The zip format is used as it's the standard format for WordPress plugin installation via the admin interface.

What gets excluded

The .distignore file excludes development files such as:

  • .git/ directory and Git files
  • node_modules/ and package management files
  • Testing and build configuration files
  • Documentation files like README.md
  • Development scripts and tools

The resulting archive contains only the files needed for production WordPress installation.

Plugin structure

  • includes/ - Main plugin source code
  • plugin-update-checker/ - Plugin update functionality
  • scripts/ - Build and deployment scripts (if using Docker setup)
  • dist/ - Distribution builds (excluded from Git except .gitkeep files)
    • archives/ - Versioned archive files (.zip)
    • extracted/ - Extracted plugin files ready for deployment
  • docker-compose.yml - Local development environment
  • Dockerfile.cli - CLI container Dockerfile with zip utility
  • docker.env - Docker environment configuration

Releases

Newest 25 of 37 recorded releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
1.11.0 latest
Oct 5, 2026 17d ago
embold-wordpress-tweaks.1.11.0.zip
61
Oct 2, 2026 20d ago
embold-wordpress-tweaks.1.10.4.zip
10
Sep 15, 2026 1mo ago
embold-wordpress-tweaks.1.10.3.zip
15
Aug 25, 2026 1mo ago
embold-wordpress-tweaks.1.10.1.zip
51
Aug 20, 2026 2mo ago
embold-wordpress-tweaks.1.10.0.zip
28
Jun 15, 2026 4mo ago
embold-wordpress-tweaks.1.9.0.zip
59
Apr 24, 2026 6mo ago
embold-wordpress-tweaks.1.8.1.zip
58
Feb 4, 2026 8mo ago
embold-wordpress-tweaks.1.8.0.zip
65
Jan 29, 2026 8mo ago
embold-wordpress-tweaks.1.7.0.zip
39
Dec 12, 2025 10mo ago
embold-wordpress-tweaks.1.6.0.zip
79
Jul 29, 2025 1 year ago
embold-wordpress-tweaks.1.5.0.zip
82
Jun 23, 2025 1 year ago
embold-wordpress-tweaks.1.4.0.zip
52
Apr 10, 2025 1 year ago
tag only
—
Mar 13, 2025 1 year ago
tag only
—
Mar 13, 2025 1 year ago
tag only
—
Dec 19, 2024 1 year ago
tag only
—
Dec 18, 2024 1 year ago
tag only
—
Dec 10, 2024 1 year ago
embold-wordpress-tweaks.1.1.1.zip
53
Dec 6, 2024 1 year ago
embold-wordpress-tweaks.1.1.0.zip
8
Mar 29, 2024 2 years ago
tag only
—
Mar 28, 2024 2 years ago
tag only
—
Feb 29, 2024 2 years ago
tag only
—
Feb 27, 2024 2 years ago
tag only
—
Feb 26, 2024 2 years ago
tag only
—
Jan 12, 2024 2 years ago
tag only
—
All releases on GitHub →

Active-site estimate ≈30 comes from the median of recent superseded releases. Method.

D+ grade

Security

emBold WordPress Tweaks 1.11.0 · audited by WP Registry

High-severity findings.

2 high 2 medium
Audited release
1.11.0
Findings
4
Worst severity
high
Content hash
a7fdbb273862cc913f2e0822…

Findings

  • high Duplicate action clones posts the user cannot edit, including passwords and drafts

    missing_capability

    Reachable by any logged-in Contributor or Author (they have edit_posts; Subscribers, Customers, and logged-out visitors do not). enable_duplicate_post defaults on. addDuplicateRowAction() prints a per-post nonce on every posts list row when the user has the post type's edit_posts cap, not edit_post for that ID. Core shows other users' published posts to authors and contributors, including password-protected posts whose content and post_password they cannot read, and edit.php?post_status=draft|pending|future runs with perm=readable, which does not limit those non-private statuses to the current author. handleDuplicatePost() checks only that same edit_posts cap after check_admin_referer(). It then wp_insert_post()s a draft owned by the attacker with the original post_content, post_content_filtered, excerpt, post_password, and parent, copies taxonomy terms, and copies every post meta value except _edit_lock, _edit_last, _wp_old_slug, and _wp_old_date. The attacker opens that draft and reads unpublished content, the password, and meta.

    includes/EmboldWordpressTweaks.php:687-781

    Recommendation

    Require current_user_can( 'edit_post', $post_id ) (and read_post) before issuing the nonce and again in handleDuplicatePost. Do not copy post_password or meta the user cannot edit. Keep the per-post nonce.

  • high SVG uploads are enabled by default without sanitization

    xss_stored

    addSvgSupport() runs on plugins_loaded and, unless EMBOLD_ALLOW_SVG or the enable_svg option turns it off, both default to on, adds image/svg+xml to upload_mimes. There is no wp_check_filetype_and_ext callback and no SVG sanitizer. An Author (upload_files; Contributors lack it) can upload an SVG that fileinfo reports as image/svg+xml, which is what libmagic returns for a normal SVG that uses onload or an embedded script. WordPress stores it under wp-content/uploads and the web server serves it as image/svg+xml. Opening that URL executes script in the site origin. Authors do not have unfiltered_html, so they cannot put the script in post content, but they can link the file; an admin who opens it runs the script with their session.

    includes/EmboldWordpressTweaks.php:158-170

    Recommendation

    Default enable_svg off. If SVG uploads stay, sanitize the file (strip script, event handlers, and foreignObject) and serve it with Content-Disposition: attachment or a CSP that blocks script.

  • medium ACF shortcode HTML escaping is forced off by default

    wp_kses_bypass

    When Advanced Custom Fields or ACF Pro is active, disableEscapingAcfShortcodes() adds acf/shortcode/allow_unsafe_html => __return_true. disable_acf_escaping defaults on (isFeatureEnabled default and the settings defaults). ACF's [acf] shortcode then returns the unescaped field value from acf_shortcode() into post content, which the_content prints. A Contributor or Author who can set a text-like ACF field and place the shortcode (Authors can publish; a Contributor's payload runs when an editor previews or publishes) gets stored HTML/JS on the front. The plugin does not bypass ACF's separate non-public post_id check, but it re-opens the escaping control ACF 6.2.5 added for users without unfiltered_html.

    includes/EmboldWordpressTweaks.php:599-610

    Recommendation

    Default disable_acf_escaping to false and do not force the filter on. If an admin opts in, still escape shortcode output for users who lack unfiltered_html.

  • medium Spoofed Host header switches non-production mail mode and deactivates mail plugins

    insecure_config

    On any request, DisableMailService::resolveEnvironmentDefault() reads $_SERVER['HTTP_HOST']. If wp_get_environment_type() is not production (development, staging, local, or maintenance) and the host is embold.dev or ends in .embold.dev, mail mode becomes smtp_override. configureSMTP() then calls disableKnownMailPlugins(), which includes wp-admin/includes/plugin.php and deactivate_plugins() on mailgun/mailgun.php and sparkpost/sparkpost.php. That writes active_plugins. No login, nonce, or capability is required. PHPMailer is also forced to the stored SMTP host or the default mailpit:1025, so mail that auto mode would have blocked can leave the staging site. Production is not affected: Environment::get() uses wp_get_environment_type(), which only returns an allowed value, and the Host branch requires env !== production. The separate .net/.local host guess in Environment::get() never runs on WordPress 6+.

    includes/Services/DisableMailService.php:241-252

    Recommendation

    Decide mail mode only from WP_ENVIRONMENT_TYPE or an explicit option, never HTTP_HOST. Deactivate other mail plugins only from an admin request by a manage_options user, not on plugins_loaded.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.