Skip to content

Connectors: Add is_active callback support to plugin registration#11565

Closed
Adi-ty wants to merge 5 commits intoWordPress:trunkfrom
Adi-ty:backport/connector-is-active-callback
Closed

Connectors: Add is_active callback support to plugin registration#11565
Adi-ty wants to merge 5 commits intoWordPress:trunkfrom
Adi-ty:backport/connector-is-active-callback

Conversation

@Adi-ty
Copy link
Copy Markdown

@Adi-ty Adi-ty commented Apr 13, 2026

Backport of WordPress/gutenberg#76994. Adds an optional is_active callable to the plugin definition when
registering a connector via WP_Connector_Registry::register().

The Connectors screen previously resolved a connector's active/installed status by checking is_plugin_active() and file_exists() against WP_PLUGIN_DIR only. Plugins installed as must-use plugins — or loaded from non-standard paths could not be detected this way, causing their connectors to disappear from the screen even though the plugin was in use.

Trac ticket: https://core.trac.wordpress.org/ticket/65020


This Pull Request is for code review only. Please keep all other discussion in the Trac ticket. Do not merge this Pull Request. See GitHub Pull Requests for Code Review in the Core Handbook for more details.

@github-actions
Copy link
Copy Markdown

Test using WordPress Playground

The changes in this pull request can previewed and tested using a WordPress Playground instance.

WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser.

Some things to be aware of

  • All changes will be lost when closing a tab with a Playground instance.
  • All changes will be lost when refreshing the page.
  • A fresh instance is created each time the link below is clicked.
  • Every time this pull request is updated, a new ZIP file containing all changes is created. If changes are not reflected in the Playground instance,
    it's possible that the most recent build failed, or has not completed. Check the list of workflow runs to be sure.

For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation.

Test this pull request with WordPress Playground.

@Adi-ty Adi-ty marked this pull request as ready for review April 14, 2026 05:45
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 14, 2026

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

Core Committers: Use this line as a base for the props when committing in SVN:

Props iamadisingh, jorgefilipecosta, mukesh27, gziolo.

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

Comment thread src/wp-includes/class-wp-connector-registry.php
Comment thread src/wp-includes/connectors.php Outdated
@Adi-ty Adi-ty requested a review from mukeshpanchal27 April 20, 2026 07:15
@Adi-ty Adi-ty force-pushed the backport/connector-is-active-callback branch from 6377fdc to 341e216 Compare April 21, 2026 09:49
@gziolo
Copy link
Copy Markdown
Member

gziolo commented Apr 27, 2026

Can you add an unit test that covers this new option? This would be similar to:

/**
* @ticket 64791
*/
public function test_register_includes_plugin_data() {
$args = self::$default_args;
$args['plugin'] = array( 'file' => 'my-plugin/my-plugin.php' );
$result = $this->registry->register( 'with-plugin', $args );
$this->assertArrayHasKey( 'plugin', $result );
$this->assertSame( array( 'file' => 'my-plugin/my-plugin.php' ), $result['plugin'] );
}

In particular it would be useful to cover the path when is_active doesn't have callable type.

Otherwise, this looks to go and should be included in WordPress 7.0 release.

Comment thread src/wp-includes/connectors.php Outdated
$is_installed = file_exists( wp_normalize_path( WP_PLUGIN_DIR . '/' . $file ) );
$is_activated = $is_installed && is_plugin_active( $file );
$is_activated = (bool) call_user_func( $connector_data['plugin']['is_active'] );
$is_installed = $is_activated || file_exists( WP_PLUGIN_DIR . '/' . $file );
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two notes:

  • the default is_active call is __return_true which always returns true, so when not defined, it will always assume the plugin is installed
  • file_exists no longer normalizes the path

@gziolo
Copy link
Copy Markdown
Member

gziolo commented Apr 28, 2026

Some additional feedback to evaluate. The rest looks good to me. I would appreciate confirmation from @jorgefilipecosta, too.

@jorgefilipecosta jorgefilipecosta force-pushed the backport/connector-is-active-callback branch from 598847d to 31eb00b Compare April 30, 2026 10:51
@jorgefilipecosta
Copy link
Copy Markdown
Member

Hi @gziolo I pushed a commit addressing your feedback and passing an is_active callback for the ai providers.

}
}

if ( ! isset( $args['plugin']['is_active'] ) ) {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That one is very important 👍🏻

pento pushed a commit that referenced this pull request Apr 30, 2026
Adds an optional `is_active` callable to the `plugin` definition accepted by
`WP_Connector_Registry::register()`. The callback receives no arguments, must
return a boolean, and is used by the Connectors screen to decide whether a
connector's backing plugin is currently active. When omitted, it defaults to
`__return_true`; when provided but not callable, registration fails with a
`_doing_it_wrong()` notice.

Developed in: #11565

Props iamadisingh, jorgefilipecosta, mukesh27, gziolo.
Fixes #65020.

git-svn-id: https://develop.svn.wordpress.org/trunk@62288 602fd350-edb4-49c9-b593-d223f7449a82
@github-actions
Copy link
Copy Markdown

A commit was made that fixes the Trac ticket referenced in the description of this pull request.

SVN changeset: 62288
GitHub commit: b3b40be

This PR will be closed, but please confirm the accuracy of this and reopen if there is more work to be done.

@github-actions github-actions Bot closed this Apr 30, 2026
markjaquith pushed a commit to markjaquith/WordPress that referenced this pull request Apr 30, 2026
Adds an optional `is_active` callable to the `plugin` definition accepted by
`WP_Connector_Registry::register()`. The callback receives no arguments, must
return a boolean, and is used by the Connectors screen to decide whether a
connector's backing plugin is currently active. When omitted, it defaults to
`__return_true`; when provided but not callable, registration fails with a
`_doing_it_wrong()` notice.

Developed in: WordPress/wordpress-develop#11565

Props iamadisingh, jorgefilipecosta, mukesh27, gziolo.
Fixes #65020.
Built from https://develop.svn.wordpress.org/trunk@62288


git-svn-id: http://core.svn.wordpress.org/trunk@61568 1a063a9b-81f0-0310-95a4-ce76da25c4cd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants