<?php namespace Automattic\WooCommerce\Blueprint; /** * Trait UseWPFunctions */ trait UseWPFunctions { /** * Whether the filesystem has been initialized. * * @var bool */ private $filesystem_initialized = false; /** * Adds a filter to a specified tag. * * @param string $tag The name of the filter to hook the $function_to_add to. * @param callable $function_to_add The callback to be run when the filter is applied. * @param int $priority Optional. Used to specify the order in which the functions * associated with a particular action are executed. Default 10. * @param int $accepted_args Optional. The number of arguments the function accepts. Default 1. */ public function wp_add_filter( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) { add_filter( $tag, $function_to_add, $priority, $accepted_args ); } /** * Adds an action to a specified tag. * * @param string $tag The name of the action to hook the $function_to_add to. * @param callable $function_to_add The callback to be run when the action is triggered. * @param int $priority Optional. Used to specify the order in which the functions * associated with a particular action are executed. Default 10. * @param int $accepted_args Optional. The number of arguments the function accepts. Default 1. */ public function wp_add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) { add_action( $tag, $function_to_add, $priority, $accepted_args ); } /** * Calls the functions added to a filter hook. * * @param string $tag The name of the filter hook. * @param mixed $value The value on which the filters hooked to $tag are applied on. * @return mixed The filtered value after all hooked functions are applied to it. */ // phpcs:ignore public function wp_apply_filters( $tag, $value ) { $args = func_get_args(); return call_user_func_array( 'apply_filters', $args ); } /** * Executes the functions hooked on a specific action hook. * * @param string $tag The name of the action to be executed. * @param mixed ...$args Optional. Additional arguments which are passed on to the functions hooked to the action. */ public function wp_do_action( $tag, ...$args ) { // phpcs:ignore do_action( $tag, ...$args ); } /** * Checks if a plugin is active. * * @param string $plugin Path to the plugin file relative to the plugins directory. * @return bool True if the plugin is active, false otherwise. */ public function wp_is_plugin_active( string $plugin ) { if ( ! function_exists( 'is_plugin_active' ) || ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } return is_plugin_active( $plugin ); } /** * Retrieves plugin information from the WordPress Plugin API. * * @param string $action The type of information to retrieve from the API. * @param array $args Optional. Arguments to pass to the API. * @return object|WP_Error The API response object or WP_Error on failure. */ public function wp_plugins_api( $action, $args = array() ) { if ( ! function_exists( 'plugins_api' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; } return plugins_api( $action, $args ); } /** * Retrieves all plugins. * * @param string $plugin_folder Optional. Path to the plugin folder to scan. * @return array Array of plugins. */ public function wp_get_plugins( string $plugin_folder = '' ) { if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } return get_plugins( $plugin_folder ); } /** * Retrieves all themes. * * @param array $args Optional. Arguments to pass to the API. * @return array Array of themes. */ public function wp_get_themes( $args = array() ) { return wp_get_themes( $args ); } /** * Retrieves a theme. * * @param string|null $stylesheet Optional. The theme's stylesheet name. * @return WP_Theme The theme object. */ public function wp_get_theme( $stylesheet = null ) { return wp_get_theme( $stylesheet ); } /** * Retrieves theme information from the WordPress Theme API. * * @param string $action The type of information to retrieve from the API. * @param array $args Optional. Arguments to pass to the API. * @return object|WP_Error The API response object or WP_Error on failure. */ public function wp_themes_api( $action, $args = array() ) { if ( ! function_exists( 'themes_api' ) ) { require_once ABSPATH . 'wp-admin/includes/theme.php'; } return themes_api( $action, $args ); } /** * Activates a plugin. * * @param string $plugin Path to the plugin file relative to the plugins directory. * @param string $redirect Optional. URL to redirect to after activation. * @param bool $network_wide Optional. Whether to enable the plugin for all sites in the network. * @param bool $silent Optional. Whether to prevent calling activation hooks. * @return WP_Error|null WP_Error on failure, null on success. */ public function wp_activate_plugin( $plugin, $redirect = '', $network_wide = false, $silent = false ) { if ( ! function_exists( 'activate_plugin' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } return activate_plugin( $plugin, $redirect, $network_wide, $silent ); } /** * Deletes plugins. * * @param array $plugins List of plugins to delete. * @return array|WP_Error Array of results or WP_Error on failure. */ public function wp_delete_plugins( $plugins ) { if ( ! function_exists( 'delete_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } return delete_plugins( $plugins ); } /** * Updates an option in the database. * * @param string $option Name of the option to update. * @param mixed $value New value for the option. * @param string|null $autoload Optional. Whether to load the option when WordPress starts up. * @return bool True if option was updated, false otherwise. */ public function wp_update_option( $option, $value, $autoload = null ) { return update_option( $option, $value, $autoload ); } /** * Retrieves an option from the database. * * @param string $option Name of the option to retrieve. * @param mixed $default_value Optional. Default value to return if the option does not exist. * @return mixed Value of the option or $default if the option does not exist. */ public function wp_get_option( $option, $default_value = false ) { return get_option( $option, $default_value ); } /** * Switches the current theme. * * @param string $name The name of the theme to switch to. */ public function wp_switch_theme( $name ) { return switch_theme( $name ); } /** * Initializes the WordPress filesystem. * * @return bool */ public function wp_init_filesystem() { if ( ! $this->filesystem_initialized ) { if ( ! class_exists( 'WP_Filesystem' ) ) { require_once ABSPATH . 'wp-admin/includes/file.php'; } WP_Filesystem(); $this->filesystem_initialized = true; } return true; } /** * Unzips a file to a specified location. * * @param string $path Path to the ZIP file. * @param string $to Destination directory. * @return bool|WP_Error True on success, WP_Error on failure. */ public function wp_unzip_file( $path, $to ) { $this->wp_init_filesystem(); return unzip_file( $path, $to ); } /** * Retrieves the upload directory information. * * @return array Array of upload directory information. */ public function wp_upload_dir() { return \wp_upload_dir(); } /** * Retrieves the root directory of the current theme. * * @return string The root directory of the current theme. */ public function wp_get_theme_root() { return \get_theme_root(); } /** * Checks if a variable is a WP_Error. * * @param mixed $thing Variable to check. * @return bool True if the variable is a WP_Error, false otherwise. */ public function is_wp_error( $thing ) { return is_wp_error( $thing ); } /** * Downloads a file from a URL. * * @param string $url The URL of the file to download. * @return string|WP_Error The local file path on success, WP_Error on failure. */ public function wp_download_url( $url ) { if ( ! function_exists( 'download_url' ) ) { include ABSPATH . '/wp-admin/includes/file.php'; } return download_url( $url ); } /** * Alias for WP_Filesystem::put_contents(). * * @param string $file_path The path to the file to write. * @param mixed $content The data to write to the file. * * @return mixed */ public function wp_filesystem_put_contents( $file_path, $content ) { global $wp_filesystem; $this->wp_init_filesystem(); return $wp_filesystem->put_contents( $file_path, $content ); } }