function optionsframework_init() { // If user can't edit theme options, exit if (!current_user_can('edit_theme_options')) { return; } // Loads the required Options Framework classes. tokopress_require_file(plugin_dir_path(__FILE__) . 'includes/class-options-framework.php'); tokopress_require_file(plugin_dir_path(__FILE__) . 'includes/class-options-framework-admin.php'); tokopress_require_file(plugin_dir_path(__FILE__) . 'includes/class-options-interface.php'); tokopress_require_file(plugin_dir_path(__FILE__) . 'includes/class-options-media-uploader.php'); tokopress_require_file(plugin_dir_path(__FILE__) . 'includes/class-options-sanitization.php'); // Instantiate the main plugin class. $options_framework = new Options_Framework(); $options_framework->init(); // Instantiate the options page. $options_framework_admin = new Options_Framework_Admin(); $options_framework_admin->init(); // Instantiate the media uploader class $options_framework_media_uploader = new Options_Framework_Media_Uploader(); $options_framework_media_uploader->init(); }
/** * Get Default Options For Option Framework */ function optionsframework_defaults() { $options = null; $location = apply_filters('options_framework_location', array(get_template_directory() . '/inc/theme/options.php')); if ($optionsfile = locate_template($location)) { $maybe_options = tokopress_require_file($optionsfile); if (is_array($maybe_options)) { $options = $maybe_options; } else { if (function_exists('optionsframework_options')) { $options = optionsframework_options(); } } } $options = apply_filters('of_options', $options); $defaults = array(); foreach ($options as $key => $value) { if (isset($value['id']) && isset($value['std'])) { $defaults[$value['id']] = $value['std']; } } return $defaults; }
/* load theme options */ tokopress_require_file(trailingslashit(THEME_DIR) . 'inc/theme/options.php'); tokopress_require_file(trailingslashit(THEME_DIR) . 'inc/theme/plugins.php'); tokopress_require_file(trailingslashit(THEME_DIR) . 'inc/theme/metabox.php'); } else { /* frontend function */ tokopress_require_file(trailingslashit(THEME_DIR) . 'inc/functions/hybrid-media-grabber.php'); tokopress_require_file(trailingslashit(THEME_DIR) . 'inc/functions/tokopress_nav_walker.php'); tokopress_require_file(trailingslashit(THEME_DIR) . 'inc/theme/frontend.php'); } /** * Contact Form */ tokopress_require_file(trailingslashit(THEME_DIR) . 'inc/functions/contact-form.php'); /** * WooCommerce Function. */ if (class_exists('woocommerce')) { if (is_admin()) { /* include woocommerce setup */ tokopress_require_file(trailingslashit(THEME_DIR) . 'inc/woocommerce/setup.php'); /* include woocommerce options */ tokopress_require_file(trailingslashit(THEME_DIR) . 'inc/woocommerce/options.php'); } else { /* include frontend function */ tokopress_require_file(trailingslashit(THEME_DIR) . 'inc/woocommerce/frontend.php'); } if (class_exists('WC_Vendors')) { tokopress_require_file(trailingslashit(THEME_DIR) . 'inc/woocommerce/wcvendors-settings.php'); } }
/** * Processes bulk installation and activation actions. * * The bulk installation process looks either for the $_POST * information or for the plugin info within the $_GET variable if * a user has to use WP_Filesystem to enter their credentials. * * @since 2.2.0 */ public function process_bulk_actions() { // Bulk installation process. if ('tgmpa-bulk-install' === $this->current_action() || 'tgmpa-bulk-update' === $this->current_action()) { check_admin_referer('bulk-' . $this->_args['plural']); // Prep variables to be populated. $plugins_to_install = array(); $plugin_installs = array(); $plugin_path = array(); $plugin_name = array(); // Look first to see if information has been passed via WP_Filesystem. if (isset($_GET['plugins'])) { $plugins = explode(',', stripslashes($_GET['plugins'])); } elseif (isset($_POST['plugin'])) { $plugins = (array) $_POST['plugin']; } else { $plugins = array(); } // Grab information from $_POST if available. if (isset($_POST['plugin'])) { foreach ($plugins as $plugin_data) { $plugins_to_install[] = explode(',', $plugin_data); } foreach ($plugins_to_install as $plugin_data) { $plugin_installs[] = $plugin_data[0]; $plugin_path[] = $plugin_data[1]; $plugin_name[] = $plugin_data[2]; } } else { foreach ($plugins as $key => $value) { // Grab plugin slug for each plugin. if (0 == $key % 3 || 0 == $key) { $plugins_to_install[] = $value; $plugin_installs[] = $value; } } } // Look first to see if information has been passed via WP_Filesystem. if (isset($_GET['plugin_paths'])) { $plugin_paths = explode(',', stripslashes($_GET['plugin_paths'])); } elseif (isset($_POST['plugin'])) { $plugin_paths = (array) $plugin_path; } else { $plugin_paths = array(); } // Look first to see if information has been passed via WP_Filesystem. if (isset($_GET['plugin_names'])) { $plugin_names = explode(',', stripslashes($_GET['plugin_names'])); } elseif (isset($_POST['plugin'])) { $plugin_names = (array) $plugin_name; } else { $plugin_names = array(); } // Loop through plugin slugs and remove already installed plugins from the list. $i = 0; foreach ($plugin_installs as $key => $plugin) { if (preg_match('|.php$|', $plugin && 'tgmpa-bulk-update' !== $this->current_action())) { unset($plugin_installs[$key]); // If the plugin path isn't in the $_GET variable, we can unset the corresponding path. if (!isset($_GET['plugin_paths'])) { unset($plugin_paths[$i]); } // If the plugin name isn't in the $_GET variable, we can unset the corresponding name. if (!isset($_GET['plugin_names'])) { unset($plugin_names[$i]); } } $i++; } // No need to proceed further if we have no plugins to install. if (empty($plugin_installs)) { echo '<div id="message" class="error"><p>' . __('No plugins are available to be installed at this time.', 'tokopress') . '</p></div>'; return false; } // Reset array indexes in case we removed already installed plugins. $plugin_installs = array_values($plugin_installs); $plugin_paths = array_values($plugin_paths); $plugin_names = array_values($plugin_names); // If we grabbed our plugin info from $_GET, we need to decode it for use. $plugin_installs = array_map('urldecode', $plugin_installs); $plugin_paths = array_map('urldecode', $plugin_paths); $plugin_names = array_map('urldecode', $plugin_names); // Pass all necessary information via URL if WP_Filesystem is needed. $url = wp_nonce_url(add_query_arg(array('page' => TGM_Plugin_Activation::$instance->menu, 'tgmpa-action' => 'install-selected', 'plugins' => urlencode(implode(',', $plugins)), 'plugin_paths' => urlencode(implode(',', $plugin_paths)), 'plugin_names' => urlencode(implode(',', $plugin_names))), admin_url('themes.php')), 'bulk-plugins'); $method = ''; // Leave blank so WP_Filesystem can populate it as necessary. $fields = array('action', '_wp_http_referer', '_wpnonce'); // Extra fields to pass to WP_Filesystem. if (false === ($creds = request_filesystem_credentials($url, $method, false, false, $fields))) { return true; } if (!WP_Filesystem($creds)) { request_filesystem_credentials($url, $method, true, false, $fields); // Setup WP_Filesystem. return true; } tokopress_require_file(ABSPATH . 'wp-admin/includes/plugin-install.php'); // Need for plugins_api tokopress_require_file(ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'); // Need for upgrade classes // Store all information in arrays since we are processing a bulk installation. $api = array(); $sources = array(); $install_path = array(); // Loop through each plugin to install and try to grab information from WordPress API, if not create 'tgmpa-empty' scalar. $i = 0; foreach ($plugin_installs as $plugin) { $api[$i] = plugins_api('plugin_information', array('slug' => $plugin, 'fields' => array('sections' => false))) ? plugins_api('plugin_information', array('slug' => $plugin, 'fields' => array('sections' => false))) : (object) ($api[$i] = 'tgmpa-empty'); $i++; } if (is_wp_error($api)) { wp_die(TGM_Plugin_Activation::$instance->strings['oops'] . var_dump($api)); } // Capture download links from $api or set install link to pre-packaged/private repo. $i = 0; foreach ($api as $object) { $sources[$i] = isset($object->download_link) && 'repo' == $plugin_paths[$i] ? $object->download_link : $plugin_paths[$i]; $i++; } // Finally, all the data is prepared to be sent to the installer. $url = add_query_arg(array('page' => TGM_Plugin_Activation::$instance->menu), admin_url('themes.php')); $nonce = 'bulk-plugins'; $names = $plugin_names; // Create a new instance of TGM_Bulk_Installer. $installer = new TGM_Bulk_Installer($skin = new TGM_Bulk_Installer_Skin(compact('url', 'nonce', 'names'))); // Wrap the install process with the appropriate HTML. // echo '<div class="tgmpa wrap">'; // echo '<h2>' . esc_html( get_admin_page_title() ) . '</h2>'; // Process the bulk installation submissions. $installer->bulk_install($sources); // echo '</div>'; return true; } // Bulk activation process. if ('tgmpa-bulk-activate' === $this->current_action()) { check_admin_referer('bulk-' . $this->_args['plural']); // Grab plugin data from $_POST. $plugins = isset($_POST['plugin']) ? (array) $_POST['plugin'] : array(); $plugins_to_activate = array(); // Split plugin value into array with plugin file path, plugin source and plugin name. foreach ($plugins as $i => $plugin) { $plugins_to_activate[] = explode(',', $plugin); } foreach ($plugins_to_activate as $i => $array) { if (!preg_match('|.php$|', $array[0])) { unset($plugins_to_activate[$i]); } } // Return early if there are no plugins to activate. if (empty($plugins_to_activate)) { echo '<div id="message" class="error"><p>' . __('No plugins are available to be activated at this time.', 'tokopress') . '</p></div>'; return false; } $plugins = array(); $plugin_names = array(); foreach ($plugins_to_activate as $plugin_string) { $plugins[] = $plugin_string[0]; $plugin_names[] = $plugin_string[2]; } $count = count($plugin_names); // Count so we can use _n function. $last_plugin = array_pop($plugin_names); // Pop off last name to prep for readability. $imploded = empty($plugin_names) ? '<strong>' . $last_plugin . '</strong>' : '<strong>' . (implode(', ', $plugin_names) . '</strong> and <strong>' . $last_plugin . '</strong>.'); // Now we are good to go - let's start activating plugins. $activate = activate_plugins($plugins); if (is_wp_error($activate)) { echo '<div id="message" class="error"><p>' . $activate->get_error_message() . '</p></div>'; } else { printf('<div id="message" class="updated"><p>%1$s %2$s</p></div>', _n('The following plugin was activated successfully:', 'The following plugins were activated successfully:', $count, 'tokopress'), $imploded); } // Update recently activated plugins option. $recent = (array) get_option('recently_activated'); foreach ($plugins as $plugin => $time) { if (isset($recent[$plugin])) { unset($recent[$plugin]); } } update_option('recently_activated', $recent); unset($_POST); // Reset the $_POST variable in case user wants to perform one action after another. return true; } }
<?php /** * This file represents an example of the code that themes would use to register * the required plugins. */ /** * Include the TGM_Plugin_Activation class. */ tokopress_require_file(get_template_directory() . '/inc/tgm/class-tgm-plugin-activation.php'); add_action('tgmpa_register', 'tokopress_register_required_plugins'); function tokopress_register_required_plugins() { /** * Array of plugin arrays. Required keys are name and slug. * If the source is NOT from the .org repo, then source is also required. */ $plugins = array(array('name' => 'WooCommerce', 'slug' => 'woocommerce', 'required' => true), array('name' => 'TokoPress - Marketica VC & Shortcodes', 'slug' => 'tokopress-multipurpose-shortcode', 'source' => get_template_directory() . '/inc/plugins/tokopress-multipurpose-shortcode-v2.5.1.zip', 'version' => '2.5.1', 'required' => true), array('name' => 'Visual Composer', 'slug' => 'js_composer', 'source' => get_template_directory() . '/inc/plugins/js_composer-v4.6.2.zip', 'version' => '4.6.2', 'required' => true), array('name' => 'MailChimp for WordPress', 'slug' => 'mailchimp-for-wp', 'required' => true), array('name' => 'Revolution Slider', 'slug' => 'revslider', 'source' => get_template_directory() . '/inc/plugins/revslider-v4.6.93.zip', 'version' => '4.6.93', 'required' => false), array('name' => 'WordPress Importer', 'slug' => 'wordpress-importer', 'source' => get_template_directory() . '/inc/plugins/wordpress-importer-v2.0.zip', 'version' => '2.0', 'required' => false), array('name' => 'Widget Importer Exporter', 'slug' => 'widget-importer-exporter', 'required' => false), array('name' => 'Regenerate Thumbnails', 'slug' => 'regenerate-thumbnails', 'required' => false)); if (class_exists('WooCommerce_Product_Vendors')) { $show_wcvendors = false; } elseif (class_exists('FPMultiVendor')) { $show_wcvendors = false; } elseif (class_exists('WeDevs_Dokan')) { $show_wcvendors = false; } else { $show_wcvendors = true; } if ($show_wcvendors) { $plugins[] = array('name' => 'WC Vendors', 'slug' => 'wc-vendors', 'required' => false); } if (class_exists('woocommerce')) {
/** * Wrapper for optionsframework_options() * * Allows for manipulating or setting options via 'of_options' filter * For example: * * <code> * add_filter( 'of_options', function( $options ) { * $options[] = array( * 'name' => 'Input Text Mini', * 'desc' => 'A mini text input field.', * 'id' => 'example_text_mini', * 'std' => 'Default', * 'class' => 'mini', * 'type' => 'text' * ); * * return $options; * }); * </code> * * Also allows for setting options via a return statement in the * options.php file. For example (in options.php): * * <code> * return array(...); * </code> * * @return array (by reference) */ static function &_optionsframework_options() { static $options = null; if (!$options) { // Load options from options.php file (if it exists) $location = apply_filters('options_framework_location', array('options.php')); if ($optionsfile = locate_template($location)) { $maybe_options = tokopress_require_file($optionsfile); if (is_array($maybe_options)) { $options = $maybe_options; } else { if (function_exists('optionsframework_options')) { $options = optionsframework_options(); } } } // Allow setting/manipulating options via filters $options = apply_filters('of_options', $options); } return $options; }