wp_get_plugin_action_button( string $name, array|object $data, bool $compatible_php, bool $compatible_wp ): string

In this article

Gets the markup for the plugin install action button.

Parameters

$namestringrequired
Plugin name.
$dataarray|objectrequired
An array or object of plugin data. Can be retrieved from the API.
  • slug string
    The plugin slug.
  • requires_plugins string[]
    An array of plugin dependency slugs.
  • version string
    The plugin’s version string. Used when getting the install status.
$compatible_phpboolrequired
The result of a PHP compatibility check.
$compatible_wpboolrequired
The result of a WP compatibility check.

Return

string The markup for the dependency row button. An empty string if the user does not have capabilities.

Source

function wp_get_plugin_action_button( $name, $data, $compatible_php, $compatible_wp ) {	$button = '';	$data = (object) $data;	$status = install_plugin_install_status( $data );	$requires_plugins = $data->requires_plugins ?? array();	// Determine the status of plugin dependencies.	$installed_plugins = get_plugins();	$active_plugins = get_option( 'active_plugins', array() );	$plugin_dependencies_count = count( $requires_plugins );	$installed_plugin_dependencies_count = 0;	$active_plugin_dependencies_count = 0;	foreach ( $requires_plugins as $dependency ) {	foreach ( array_keys( $installed_plugins ) as $installed_plugin_file ) {	if ( str_contains( $installed_plugin_file, '/' ) && explode( '/', $installed_plugin_file )[0] === $dependency ) {	++$installed_plugin_dependencies_count;	}	}	foreach ( $active_plugins as $active_plugin_file ) {	if ( str_contains( $active_plugin_file, '/' ) && explode( '/', $active_plugin_file )[0] === $dependency ) {	++$active_plugin_dependencies_count;	}	}	}	$all_plugin_dependencies_installed = $installed_plugin_dependencies_count === $plugin_dependencies_count;	$all_plugin_dependencies_active = $active_plugin_dependencies_count === $plugin_dependencies_count;	if ( current_user_can( 'install_plugins' ) || current_user_can( 'update_plugins' ) ) {	switch ( $status['status'] ) {	case 'install':	if ( $status['url'] ) {	if ( $compatible_php && $compatible_wp && $all_plugin_dependencies_installed && ! empty( $data->download_link ) ) {	$button = sprintf(	'<a class="install-now button" data-slug="%s" href="%s" aria-label="%s" data-name="%s" role="button">%s</a>',	esc_attr( $data->slug ),	esc_url( $status['url'] ),	/* translators: %s: Plugin name and version. */	esc_attr( sprintf( _x( 'Install %s now', 'plugin' ), $name ) ),	esc_attr( $name ),	_x( 'Install Now', 'plugin' )	);	} else {	$button = sprintf(	'<button type="button" class="install-now button button-disabled" disabled="disabled">%s</button>',	_x( 'Install Now', 'plugin' )	);	}	}	break;	case 'update_available':	if ( $status['url'] ) {	if ( $compatible_php && $compatible_wp ) {	$button = sprintf(	'<a class="update-now button aria-button-if-js" data-plugin="%s" data-slug="%s" href="%s" aria-label="%s" data-name="%s" role="button">%s</a>',	esc_attr( $status['file'] ),	esc_attr( $data->slug ),	esc_url( $status['url'] ),	/* translators: %s: Plugin name and version. */	esc_attr( sprintf( _x( 'Update %s now', 'plugin' ), $name ) ),	esc_attr( $name ),	_x( 'Update Now', 'plugin' )	);	} else {	$button = sprintf(	'<button type="button" class="button button-disabled" disabled="disabled">%s</button>',	_x( 'Update Now', 'plugin' )	);	}	}	break;	case 'latest_installed':	case 'newer_installed':	if ( is_plugin_active( $status['file'] ) ) {	$button = sprintf(	'<button type="button" class="button button-disabled" disabled="disabled">%s</button>',	_x( 'Active', 'plugin' )	);	} elseif ( current_user_can( 'activate_plugin', $status['file'] ) ) {	if ( $compatible_php && $compatible_wp && $all_plugin_dependencies_active ) {	$button_text = _x( 'Activate', 'plugin' );	/* translators: %s: Plugin name. */	$button_label = _x( 'Activate %s', 'plugin' );	$activate_url = add_query_arg(	array(	'_wpnonce' => wp_create_nonce( 'activate-plugin_' . $status['file'] ),	'action' => 'activate',	'plugin' => $status['file'],	),	network_admin_url( 'plugins.php' )	);	if ( is_network_admin() ) {	$button_text = _x( 'Network Activate', 'plugin' );	/* translators: %s: Plugin name. */	$button_label = _x( 'Network Activate %s', 'plugin' );	$activate_url = add_query_arg( array( 'networkwide' => 1 ), $activate_url );	}	$button = sprintf(	'<a href="%1$s" data-name="%2$s" data-slug="%3$s" data-plugin="%4$s" class="button button-primary activate-now" aria-label="%5$s" role="button">%6$s</a>',	esc_url( $activate_url ),	esc_attr( $name ),	esc_attr( $data->slug ),	esc_attr( $status['file'] ),	esc_attr( sprintf( $button_label, $name ) ),	$button_text	);	} else {	$button = sprintf(	'<button type="button" class="button button-disabled" disabled="disabled">%s</button>',	is_network_admin() ? _x( 'Network Activate', 'plugin' ) : _x( 'Activate', 'plugin' )	);	}	} else {	$button = sprintf(	'<button type="button" class="button button-disabled" disabled="disabled">%s</button>',	_x( 'Installed', 'plugin' )	);	}	break;	}	}	return $button; } 

Changelog

VersionDescription
6.5.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.