Select Page

Deploy WordPress Updates from a Private Repository

To push code to a private repository and trigger a pending WordPress update badge, you need to follow a systematic approach involving version control, continuous integration/deployment, and the appropriate use of WordPress hooks and filters. Here’s a step-by-step guide to accomplish this:

Step 1: Set Up Your Private Repository

  1. Create a Repository:

    • On platforms like GitHub, GitLab, or Bitbucket, create a new private repository.
    • Clone the repository to your local machine using git clone.
  2. Organize Your Plugin Files:

    • Ensure your WordPress plugin files are structured correctly in the local repository.
    • Follow the standard WordPress plugin file structure.

Step 2: Update Version and Push Code

  1. Update Plugin Version:

    • In your plugin's main file, update the version number in the plugin header comment.
    • Example:
      Plugin Name: My Plugin
      Plugin URI:
      Description: A description of my plugin.
      Version: 1.1.0
      Author: Your Name
      Author URI:
      License: GPL2
  2. Commit and Push Changes:

    • Add, commit, and push your changes to the repository:
      git add .
      git commit -m "Update plugin to version 1.1.0"
      git push origin main

Step 3: Configure Webhooks for CI/CD

To automate the deployment process and trigger the update badge, you need to set up continuous integration and deployment (CI/CD) using webhooks.

  1. Set Up CI/CD Pipeline:

    • Use a service like GitHub Actions, GitLab CI/CD, or Bitbucket Pipelines to set up a pipeline that triggers on push events.
    • Example GitHub Actions workflow (.github/workflows/deploy.yml):

      name: Deploy Plugin
            - main
          runs-on: ubuntu-latest
          - name: Checkout code
            uses: actions/checkout@v2
          - name: Deploy to WordPress
            run: |
              # Add deployment scripts here, for example:
              # scp -r ./my-plugin user@server:/path/to/wordpress/wp-content/plugins/
              echo "Deploying plugin to WordPress..."

Step 4: Create a Custom Endpoint to Check for Updates

To display the update badge in the WordPress admin area, you need to create a custom endpoint that WordPress can query to check for updates.

  1. Create an Endpoint:

    • Host an endpoint on your server or use a cloud function service.
    • The endpoint should return the latest version and other update information in JSON format.

    Example PHP code for a custom update server:

    add_action('rest_api_init', function () {
        register_rest_route('my-plugin/v1', '/update-check', [
            'methods' => 'GET',
            'callback' => 'my_plugin_update_check',
    function my_plugin_update_check() {
        return new WP_REST_Response([
            'version' => '1.1.0',
            'url' => '',
            'requires' => '5.0',
            'tested' => '5.7',
            'requires_php' => '7.2',

Step 5: Modify Your Plugin to Check for Updates

Modify your plugin to check for updates from your custom endpoint and trigger the update badge.

  1. Add Update Checker:

    • Use a library like the Plugin Update Checker to check for updates.
    • Example:

      require 'path/to/plugin-update-checker/plugin-update-checker.php';
      $updateChecker = Puc_v4_Factory::buildUpdateChecker(

Step 6: Test the Entire Process

  1. Trigger an Update:

    • Push a new version to your repository.
    • Ensure the CI/CD pipeline deploys the update correctly.
  2. Check for Updates in WordPress:

    • Log in to your WordPress admin area.
    • Navigate to Plugins and see if the update badge appears for your plugin.

By following these steps, you can successfully push code to a private repository, deploy the updates, and trigger a pending update badge in WordPress. This approach leverages version control, CI/CD pipelines, and custom update mechanisms to ensure smooth and secure plugin updates.

Check out more articles

Create a Custom API Endpoint in WordPress

Creating a custom endpoint in WordPress to check for plugin updates involves several steps. This process includes setting up a custom REST API endpoint, creating a function to handle requests to this endpoint, and ensuring that the response contains the necessary...

How to Generate a Ranger Config File

ranger --copy-config=all This will copy all the default config files from /usr/local/lib so you can make edits without messing anything up. Huge shout out to for explaining this and so much more. Took me a...

First Open Source Contribution

Surprise! I genuinely did not plan on making my first ever open source contribution today. In fact, I didn't plan on a lot of things happening this week at all. I recently got an awesome opportunity to work on a site that is being hosted on a platform called Pantheon,...

How to Exclude Specific Posts and Pages from WP_QUERY

For the sake of having something to work with, let's suppose we've got the following query:In this query, inside the $args array, there's a special parameter that allows you to exclude specific posts and pages from the query. This parameter is called post__not_in and...

Configure SSH For Password-less Connections

Preamble I'm slightly embarrassed to admit this, but it was a long time before I figured out how amazing this little file is and how exactly to put it to good use. The file I'm talking about is the SSH config file. By default, when you first connect to a server via...

WordPress Site Stuck in Maintenance Mode

Plugin Error Code 500 During Update While I was updating a WordPress plugin locally, something happened on my local server to trigger a 500 error code as the plugin was updating. On the frontend, I refreshed the page and was greeted with "Briefly Unavailable for...

Creating a WordPress Plugin Downloader

How it Started I was recently tasked with the challenge of creating a WordPress theme generator. The idea being, instead of writing your style.css file from scratch, you'd be able to just answer a few simple questions about how you'd like your theme set up, and those...

Fix Audio on XFCE Chromebook

The Problem After moving from GalliumOS to Xubuntu, I noticed that playing YouTube videos on both Firefox and Chromium would result in decent playback for a few minutes, but suddenly the audio would turn into a solid beeping tone while the YouTube video displayed the...

Adjust Trackpad Sensitivity XFCE

xinput set-prop "Elan Touchpad" "Synaptics Finger" 1 1 1 What are the values 1 1 1? This sets the sensitivity as close to the original ChromeOS as possible. Larger numbers will decrease sensitivity of various aspects. I never looked into which individual value...

Fireworks (Short Film) About the film Year: 2020 Director/DP: Tim Searfoss Writers: Matt Jones, Tim Searfoss Sound Mix: Matt Jones

Looking for a place to host your next project or design?

Use this link to get your first 4 months of WP Engine for free: WP Engine – Plans (With 4 months free)