/** * Add tabs to the widget dialog * * @param $tabs * * @return array */ function siteorigin_panels_add_widgets_dialog_tabs($tabs) { $tabs['widgets_bundle'] = array('title' => __('Widgets Bundle', 'siteorigin-panels'), 'filter' => array('groups' => array('so-widgets-bundle'))); if (class_exists('SiteOrigin_Widgets_Bundle')) { // Add a message about enabling more widgets $tabs['widgets_bundle']['message'] = sprintf(preg_replace(array('/1\\{ *(.*?) *\\}/'), array('<a href="' . admin_url('plugins.php?page=so-widgets-plugins') . '">$1</a>'), __('Enable more widgets in the 1{Widgets Bundle settings}.', 'siteorigin-panels'))); } else { // Add a message about installing the widgets bundle $tabs['widgets_bundle']['message'] = preg_replace('/1\\{ *(.*?) *\\}/', '<a href="' . siteorigin_panels_plugin_activation_install_url('so-widgets-bundle', __('SiteOrigin Widgets Bundle', 'siteorigin-panels')) . '">$1</a>', __('Install the 1{Widgets Bundle} to get extra widgets.', 'siteorigin-panels')); } $tabs['page_builder'] = array('title' => __('Page Builder Widgets', 'siteorigin-panels'), 'message' => preg_replace(array('/1\\{ *(.*?) *\\}/'), array('<a href="' . admin_url('options-general.php?page=siteorigin_panels') . '">$1</a>'), __('You can enable the legacy (PB) widgets in the 1{Page Builder settings}.', 'siteorigin-panels')), 'filter' => array('groups' => array('panels'))); $tabs['wordpress'] = array('title' => __('WordPress Widgets', 'siteorigin-panels'), 'filter' => array('groups' => array('wordpress'))); // Check for woocommerce plugin. if (defined('WOOCOMMERCE_VERSION')) { $tabs['woocommerce'] = array('title' => __('WooCommerce', 'woocommerce'), 'filter' => array('groups' => array('woocommerce'))); } // Check for jetpack plugin. if (defined('JETPACK__VERSION')) { $tabs['jetpack'] = array('title' => __('Jetpack', 'jetpack'), 'filter' => array('groups' => array('jetpack'))); } // Check for bbpress plugin. if (function_exists('bbpress')) { $tabs['bbpress'] = array('title' => __('BBPress', 'bbpress'), 'filter' => array('groups' => array('bbpress'))); } $tabs['recommended'] = array('title' => __('Recommended Widgets', 'siteorigin-panels'), 'filter' => array('groups' => array('recommended'))); return $tabs; }
/** * Render a widget form with all the Page Builder specific fields * * @param string $widget The class of the widget * @param array $instance Widget values * @param bool $raw * @param string $widget_number * @return mixed|string The form */ function siteorigin_panels_render_form($widget, $instance = array(), $raw = false, $widget_number = '{$id}') { global $wp_widget_factory; // This is a chance for plugins to replace missing widgets $the_widget = !empty($wp_widget_factory->widgets[$widget]) ? $wp_widget_factory->widgets[$widget] : false; $the_widget = apply_filters('siteorigin_panels_widget_object', $the_widget, $widget); if (empty($the_widget) || !is_a($the_widget, 'WP_Widget')) { $widgets = siteorigin_panels_get_widgets(); if (!empty($widgets[$widget]) && !empty($widgets[$widget]['plugin'])) { // We know about this widget, show a form about installing it. $install_url = siteorigin_panels_plugin_activation_install_url($widgets[$widget]['plugin']['slug'], $widgets[$widget]['plugin']['name']); $form = '<div class="panels-missing-widget-form">' . '<p>' . preg_replace(array('/1\\{ *(.*?) *\\}/', '/2\\{ *(.*?) *\\}/'), array('<a href="' . $install_url . '" target="_blank">$1</a>', '<strong>$1</strong>'), sprintf(__('You need to install 1{%1$s} to use the widget 2{%2$s}.', 'siteorigin-panels'), $widgets[$widget]['plugin']['name'], $widget)) . '</p>' . '<p>' . __("Save and reload this page to start using the widget after you've installed it.", 'siteorigin-panels') . '</p>' . '</div>'; } else { // This widget is missing, so show a missing widgets form. $form = '<div class="panels-missing-widget-form"><p>' . preg_replace(array('/1\\{ *(.*?) *\\}/', '/2\\{ *(.*?) *\\}/'), array('<strong>$1</strong>', '<a href="https://siteorigin.com/thread/" target="_blank">$1</a>'), sprintf(__('The widget 1{%1$s} is not available. Please try locate and install the missing plugin. Post on the 2{support forums} if you need help.', 'siteorigin-panels'), esc_html($widget))) . '</p></div>'; } // Allow other themes and plugins to change the missing widget form return apply_filters('siteorigin_panels_missing_widget_form', $form, $widget, $instance); } if ($raw) { $instance = $the_widget->update($instance, $instance); } $the_widget->id = 'temp'; $the_widget->number = $widget_number; ob_start(); $return = $the_widget->form($instance); do_action_ref_array('in_widget_form', array(&$the_widget, &$return, $instance)); $form = ob_get_clean(); // Convert the widget field naming into ones that Page Builder uses $exp = preg_quote($the_widget->get_field_name('____')); $exp = str_replace('____', '(.*?)', $exp); $form = preg_replace('/' . $exp . '/', 'widgets[' . preg_replace('/\\$(\\d)/', '\\\\$$1', $widget_number) . '][$1]', $form); $form = apply_filters('siteorigin_panels_widget_form', $form, $widget, $instance); // Add all the information fields return $form; }
/** * Render a widget form with all the Page Builder specific fields * * @param string $widget The class of the widget * @param array $instance Widget values * @param bool $raw * @return mixed|string The form */ function siteorigin_panels_render_form($widget, $instance = array(), $raw = false) { global $wp_widget_factory; // This is a chance for plugins to replace missing widgets $the_widget = !empty($wp_widget_factory->widgets[$widget]) ? $wp_widget_factory->widgets[$widget] : false; $the_widget = apply_filters('siteorigin_panels_widget_object', $the_widget, $widget); if (empty($the_widget) || !is_a($the_widget, 'WP_Widget')) { $widgets = siteorigin_panels_get_widgets(); if (!empty($widgets[$widget]) && !empty($widgets[$widget]['plugin'])) { // We know about this widget, show a form about installing it. $install_url = siteorigin_panels_plugin_activation_install_url($widgets[$widget]['plugin']['slug'], $widgets[$widget]['plugin']['name']); $form = '<div class="panels-missing-widget-form">' . '<p>' . sprintf(__("You need to <a href='%s' target='_blank'>install %s</a> to use the widget <strong>%s</strong>. It's a free plugin available off the official WordPress plugin directory.", 'siteorigin-panels'), $install_url, $widgets[$widget]['plugin']['name'], $widget) . '</p>' . '<p>' . __("Save and reload this page to start using the widget after you've installed it.") . '</p>' . '</div>'; } else { // This widget is missing, so show a missing widgets form. $form = '<div class="panels-missing-widget-form"><p>' . sprintf(__('The widget <strong>%s</strong> is not available. Please try locate and install the missing plugin. Post on the <a href="%s" target="_blank">support forums</a> if you need help.', 'siteorigin-panels'), esc_html($widget), 'http://siteorigin.com/thread/') . '</p></div>'; } // Allow other themes and plugins to change the missing widget form return apply_filters('siteorigin_panels_missing_widget_form', $form, $widget, $instance); } if ($raw) { $instance = $the_widget->update($instance, $instance); } $the_widget->id = 'temp'; $the_widget->number = '{$id}'; ob_start(); $the_widget->form($instance); $form = ob_get_clean(); // Convert the widget field naming into ones that Page Builder uses $exp = preg_quote($the_widget->get_field_name('____')); $exp = str_replace('____', '(.*?)', $exp); $form = preg_replace('/' . $exp . '/', 'widgets[{$id}][$1]', $form); $form = apply_filters('siteorigin_panels_widget_form', $form, $widget, $instance); // Add all the information fields return $form; }