Wordpress - Add submit button to admin toolar - wordpress

I have my own function fsww_i_add_funds_request_daily that I wrote to perform the addition of a profit by a user based on the role of the user. This function was created / added for one plugin that I use. I am not sending any parameters to the function. I need to call this function using the submit button which will be on the admin toolbar. The function should be implemented in the plugin as it is necessary to use its "library" (maybe I spoke badly, I'm still a beginner in WP). How and where I need these functions implement?
Function
function fsww_i_add_funds_request_daily() {
require_once(dirname(__FILE__) . '/Wallet.php');
global $wpdb;
$query = $wpdb->get_results("SELECT user_id FROM {$wpdb->prefix}fswcwallet ORDER BY user_id ASC");
if($query) {
foreach($query as $user)
{
$user_id = $user->user_id;
$dailyProvision = 0;
if($user_id != 0)
{
$balance = fsww_price(Wallet::get_balance($user_id));
$last_deposit = fswcw_format_date(Wallet::get_last_deposit($user_id));
$status = Wallet::get_status($user_id);
$username = get_user_by('id', $user_id);
}
}
}
}
function fb_add_admin_bar_profit() {
global $wp_admin_bar;
$current_object = get_queried_object();
$wp_admin_bar->add_menu(
array( 'id' => 'addprofit',
'title' => __('Add profit'),
'href' => ?????)
);
}
add_action( 'admin_bar_menu', 'fb_add_admin_bar_profit');
Could you please help me with this?

Create plugin Custom Plugin and add the below code to that plugin. and in you admin bar custom button add URL like this home_url( '/?funds_request_daily=true' ) and check this query string funds_request_daily params on init hook.
<?php
/**
* Plugin Name: Custom Plugin
* Plugin URI: https://example.com/plugins/the-basics/
* Description: Handle the basics with this plugin.
* Version: 1.0.0
* Author: Cleemas
* Author URI: https://author.example.com/
* License: GPL v2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: my-custom-plugin
* Domain Path: /languages
*/
function fsww_i_add_funds_request_daily() {
if( isset( $_GET['funds_request_daily'] ) && $_GET['funds_request_daily'] == 'true' ){
require_once(dirname(__FILE__) . '/Wallet.php');
global $wpdb;
$query = $wpdb->get_results("SELECT user_id FROM {$wpdb->prefix}fswcwallet ORDER BY user_id ASC");
if( $query ) {
foreach( $query as $user ) {
$user_id = $user->user_id;
$dailyProvision = 0;
if($user_id != 0) {
$balance = fsww_price(Wallet::get_balance($user_id));
$last_deposit = fswcw_format_date(Wallet::get_last_deposit($user_id));
$status = Wallet::get_status($user_id);
$username = get_user_by('id', $user_id);
}
}
}
}
}
add_action( 'init', 'fsww_i_add_funds_request_daily', 10, 1 );
function fb_add_admin_bar_profit() {
global $wp_admin_bar;
$current_object = get_queried_object();
$wp_admin_bar->add_menu(
array(
'id' => 'addprofit',
'title' => __('Add profit'),
'href' => home_url( '/?funds_request_daily=true' )
)
);
}
add_action( 'admin_bar_menu', 'fb_add_admin_bar_profit');
?>

Related

Preventing editing of pages with certain IDs

I have created this plugin to prevent certain posts being deleted.
This plugin removes the TRASH option from the page list.
register_activation_hook( __FILE__, 'prevent_page_delete_activate' );
function prevent_page_delete_activate() {
add_action('admin_menu', 'prevent_page_delete');
}
add_filter ('user_has_cap', 'prevent_default_theme_deletion', 10, 3);
function prevent_default_theme_deletion($allcaps, $caps, $args) {
$ids = [2000,2333,4444];
// trash will ve removed for this page IDs
$numElementos = count($ids);
for ($i=0; $i < $numElementos; $i++) {
$post_id = $ids[$i];
if ( isset( $args[0] ) && isset( $args[2] ) && $args[2] == $post_id && $args[0] == 'delete_post' ) {
$allcaps[ $caps[0] ] = false;
}
}
return $allcaps;
}
What would be the equivalent to remove the EDIT link from certain page ids?
As per your last comment, there is a few thing to consider:
Visually hiding any hints to edit/delete ... etc.
Removing any default link styling.
Preventing direct access.
Preventing database update.
You can intercept the post edit via the pre_post_update action hook which fires immediately before an existing post is updated in the database..
We can use post_row_actions which filters the array of row action links on the Posts list table to prevent edits actions.
Finally we use the admin_head-{$hook_suffix} hook to remove any visual style and prevent the direct access through URL.
Everything is wrapped up in a single class to make it easier.
<?php
if ( ! class_exists( 'wpso70412723' ) ) {
class wpso70412723 {
public $protected_posts_IDs = [ //Define the protected posts IDs
2000,
2333,
4444,
];
public function __construct() {
add_action( 'pre_post_update', array( $this, 'wpso_70412723_prevent_database_update_on_specific_post_edit' ), 10, 2 );
add_filter( 'post_row_actions', array( $this, 'wpso_70412723_remove_edit_related_actions_from_post_action_row' ), 10, 2 );
add_action( 'admin_head-edit.php', array( $this, 'wpso_70412723_prevent_link_style_and_click_ability_from_post_title' ));
add_action( 'admin_head-post.php', array( $this, 'wpso_70412723_prevent_direct_access_to_a_specific_post_through_URL' ));
} //public function __construct() {
/**
* Prevent specific posts edits actions.
* Any post modifications (edit, delete, etc.) will be prevented.
*
* #param Integer $post_ID
* #param Array $data
*/
public function wpso_70412723_prevent_database_update_on_specific_post_edit($post_ID, $data) {
if (in_array($post_ID, $this->protected_posts_IDs))
wp_die('You are not allowed to edit this post.', 'Something went wrong...', [
'back_link' => true
]);
} //public function wpso_70412723_prevent_database_update_on_specific_post_edit() {
/**
* Filters-out edit related actions from the array of row action links on the Posts list table.
*
* #param String $actions An array of row action links.
* #param Object (WP_Post) The post object.
*/
public function wpso_70412723_remove_edit_related_actions_from_post_action_row($actions, $post) {
if (in_array($post->ID, $this->protected_posts_IDs)) {
unset( $actions['edit'] );
unset( $actions['inline hide-if-no-js'] );
unset( $actions['trash'] );
};
return $actions;
} //public function wpso_70412723_prevent_database_update_on_specific_post_edit() {
/**
* Prevent link style and click ability from the post title.
* Fires in head section for a specific admin page.
* In our case, the admin posts listing edit page.
*
* #see https://developer.wordpress.org/reference/hooks/admin_head-hook_suffix/
*/
public function wpso_70412723_prevent_link_style_and_click_ability_from_post_title() {
if ( 'edit' !== get_current_screen()->base )
return;
global $wp_query;
$posts = $wp_query->posts;
foreach ($posts as $post) {
if (in_array($post->ID, $this->protected_posts_IDs)) {
echo '<style type="text/css">
#the-list .post-' . $post->ID . ' strong a {
pointer-events: none;
color: initial;
text-decoration: none;
}
</style>';
};
};
} //public function wpso_70412723_prevent_link_style_and_click_ability_from_post_title() {
/**
* Prevent direct access to a specific post through URL.
* Fires in head section for a specific admin page.
* In our case, the admin posts listing edit page.
*
* #see https://developer.wordpress.org/reference/hooks/admin_head-hook_suffix/
*/
public function wpso_70412723_prevent_direct_access_to_a_specific_post_through_URL() {
if ( 'post' !== get_current_screen()->base )
return;
if (in_array(get_the_ID(), $this->protected_posts_IDs)) {
wp_die('You are not allowed to edit this post.', 'Something went wrong...', [
'back_link' => true
]);
};
} //public function wpso_70412723_prevent_direct_access_to_a_specific_post_through_URL() {
}; //class wpso70412723 {
new wpso70412723();
}; //if ( ! class_exists( 'wpso70412723' ) ) {
By the way, deleting a post is considered an edit.
You don't need your prevent_default_theme_deletion() function.
You could be tempted to use the edit_post action hook tho this wouldn't work because:
edit_post: Fires once an existing post has been updated.
The "once" statement is why we need to use pre_post_update.
pre_post_update: Fires immediately before an existing post is updated in the database.

Woocommerce REST API extending order response

I'm looking for a way to extend the wc-api/vX/orders/ reponse. I've added multiple custom fields to the checkout (for eg: relation number, delivery date etc). These meta are saved within the order (wp_postmeta table). But why are they not returned with the api?
Normally you can extend the api response with some code like:
add_action( 'rest_api_init', 'custom_register_api_fields' );
function custom_register_api_fields() {
register_rest_field( 'shop_order','relation_number',
array(
'get_callback' => 'custom_api_meta_callback',
'update_callback' => null,
'schema' => null,
)
);
}
/**
*
* #param array $object Details of current post.
* #param string $field_name Name of field.
* #param WP_REST_Request $request Current request
*
* #return mixed
*/
function custom_api_meta_callback( $object, $field_name, $request ) {
return get_post_meta( $object[ 'id' ], $field_name, true );
}
But when I test the response (with Postman and the php lib), my-website.co/wc-api/v2/orders the custom meta are not visible.
Is there a way to register api fields for the wc-api?
Tnx!
i have the same requirement, add new value to "line_items" in order response
am using wc api v2
https://website.com/wp-json/wc/v2/orders
function get_product_order_image( $response, $object, $request ) {
if( empty( $response->data ) )
return $response;
$order_pid= $response->data['line_items'][0]['product_id'];
$l_w_product_meta = get_post_meta($response->data['line_items'][0]['product_id']);
$order_imgUrl= wp_get_attachment_url( $l_w_product_meta['_thumbnail_id'][0], 'full' );
$response->data['line_items'][0]['cover_image'] = $order_imgUrl;
return $response;
}
add_filter( "woocommerce_rest_prepare_shop_order_object", array( $this, "get_product_order_image"), 10, 3 );
Result
cover image added to line item result
i hope this will help someone in future.
REST API hook for add new value (product image) to "line_items" in order response for simple product and variable product both
Also Use for multiple products
function get_product_order_image( $response, $object, $request ) {
if( empty( $response->data ) )
return $response;
$images = array();
foreach($response->data['line_items'] as $key => $productItems){
$productID = $productItems['product_id'];
$variationID = $productItems['variation_id'];
if($variationID == 0){
$thumbnailID = get_post_meta( $productID, '_thumbnail_id', true);
$attachment = wp_get_attachment_image_src($thumbnailID, 'woocommerce_thumbnail' );
$image = $attachment[0];
}else{
$variation = new WC_Product_Variation( $variationID );
$image_id = $variation->get_image_id();
$attachment = wp_get_attachment_image_src($image_id, 'woocommerce_thumbnail' );
$image = $attachment[0];
}
$response->data['line_items'][$key]['image'] = $image;
}
return $response;
}
add_filter( "woocommerce_rest_prepare_shop_order_object", "get_product_order_image", 10, 3 );
Request:
wp-json/wc/v3/orders
wp-json/wc/v3/orders/XXX
wp-json/wc/v3/orders/?customers=XXX

How to run my class object with ajax jquery in PHP

I am developing a theme and currently working on import data process. Radium one click import working really fine for my but I want to add some minor change. I have two demos for my client, family law and personal law. I want to give her a choice so that she can install which one she wants in single install. Currently me demo was installed with button click, I just disabled that functionality by jquery e.perventDefault() function to check which button is clicked so that I can set my demo files accordingly.
Its working good and I am able to send my file names properly through ajax $_POST and getting those values in my PHP file.
The real issue is that it never imports my data any more. It sets my file names but does not start my import process. How can I start my import process again ?
Here is my code.
$('.import-process .import-start').click(function(e){
e.preventDefault();
alert('family-law');
$.ajax ({
type: "POST",
url:"path to my file",
data: "family=family",
success: function(data) {
console.log("message sent!");
alert(data);
}
});
});
With this data I am just getting my file names and nothing else at all. Now kindly let me know how can I start my import process either in PHP file or in js file I am totally no where by now. Thanks
Here is full code:
<?php
/**
* Class Radium_Theme_Importer
*
* This class provides the capability to import demo content as well as import widgets and WordPress menus
*
* #since 0.0.2
*
* #category RadiumFramework
* #package NewsCore WP
* #author Franklin M Gitonga
* #link http://radiumthemes.com/
*
*/
// Exit if accessed directly
if ( !defined( 'ABSPATH' ) ) exit;
// Don't duplicate me!
if ( !class_exists( 'Radium_Theme_Importer' ) ) {
class Radium_Theme_Importer {
public $theme_options_framework = 'radium'; //supports radium framework and option tree
public $theme_options_file;
public $widgets;
public $content_demo;
public $flag_as_imported = array( 'content' => false, 'menus' => false, 'options' => false, 'widgets' =>false );
public $imported_demos = array();
public $add_admin_menu = true;
private static $instance;
public function __construct() {
self::$instance = $this;
echo $this->demo_files_path = apply_filters('radium_theme_importer_demo_files_path', $this->demo_files_path);
if($this->me == 'kami'){
echo $this->theme_options_file = apply_filters('radium_theme_importer_theme_options_file', $this->demo_files_path . $this->theme_options_file_name);
} else {
echo $this->theme_options_file = apply_filters('radium_theme_importer_theme_options_file', $this->demo_files_path . $this->theme_options_file_name1);
}
echo $this->widgets = apply_filters('radium_theme_importer_widgets_file', $this->demo_files_path . $this->widgets_file_name);
$this->content_demo = apply_filters('radium_theme_importer_content_demo_file', $this->demo_files_path . $this->content_demo_file_name);
$this->imported_demos = get_option( 'radium_imported_demo' );
if( $this->theme_options_framework == 'optiontree' ) {
$this->theme_option_name = ot_options_id();
}
if( $this->add_admin_menu ) add_action( 'admin_menu', array($this, 'add_admin') );
add_filter( 'add_post_metadata', array( $this, 'check_previous_meta' ), 10, 5 );
add_action( 'radium_import_end', array( $this, 'after_wp_importer' ) );
}
public function add_admin() {
add_submenu_page('themes.php', "Import Demo Data", "Import Demo Data", 'switch_themes', 'radium_demo_installer', array($this, 'demo_installer'));
}
public function check_previous_meta( $continue, $post_id, $meta_key, $meta_value, $unique ) {
$old_value = get_metadata( 'post', $post_id, $meta_key );
if ( count( $old_value ) == 1 ) {
if ( $old_value[0] === $meta_value ) {
return false;
} elseif ( $old_value[0] !== $meta_value ) {
update_post_meta( $post_id, $meta_key, $meta_value );
return false;
}
}
}
public function after_wp_importer() {
do_action( 'radium_importer_after_content_import');
update_option( 'radium_imported_demo', $this->flag_as_imported );
}
public function intro_html() {
?>
<div style="background-color: #F5FAFD; margin:10px 0;padding: 5px 10px;color: #0C518F;border: 2px solid #CAE0F3; clear:both; width:90%; line-height:18px;">
<p class="tie_message_hint">Importing demo data (post, pages, images, theme settings, ...) is the easiest way to setup your theme. It will
allow you to quickly edit everything instead of creating content from scratch. When you import the data following things will happen:</p>
<ul style="padding-left: 20px;list-style-position: inside;list-style-type: square;}">
<li>No existing posts, pages, categories, images, custom post types or any other data will be deleted or modified .</li>
<li>No WordPress settings will be modified .</li>
<li>Posts, pages, some images, some widgets and menus will get imported .</li>
<li>Images will be downloaded from our server, these images are copyrighted and are for demo use only .</li>
<li>Please click import only once and wait, it can take a couple of minutes</li>
</ul>
</div>
<div style="background-color: #F5FAFD; margin:10px 0;padding: 5px 10px;color: #0C518F;border: 2px solid #CAE0F3; clear:both; width:90%; line-height:18px;"><p class="tie_message_hint">Before you begin, make sure all the required plugins are activated.</p></div>
<?php
if( !empty($this->imported_demos) ) { ?>
<div style="background-color: #FAFFFB; margin:10px 0;padding: 5px 10px;color: #8AB38A;border: 2px solid #a1d3a2; clear:both; width:90%; line-height:18px;">
<p><?php _e('Demo already imported', 'radium'); ?></p>
</div><?php
//return;
}
}
public function demo_installer() {
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';
if( !empty($this->imported_demos ) ) {
$button_text = __('Import Again', 'radium');
} else {
$button_text = __('Import Demo Data', 'radium');
}
?><div id="icon-tools" class="icon32"><br></div>
<h2>Import Demo Data</h2>
<div class="radium-importer-wrap" data-demo-id="1" data-nonce="<?php echo wp_create_nonce('radium-demo-code'); ?>">
<form method="post">
<?php $this->intro_html(); ?>
<input type="hidden" name="demononce" value="<?php echo wp_create_nonce('radium-demo-code'); ?>" />
<input name="reset" class="panel-save button-primary radium-import-start" type="submit" value="<?php echo $button_text ; ?>" />
<input type="hidden" name="action" value="demo-data" />
<br />
<br />
<div class="radium-importer-message clear">
<?php if( 'demo-data' == $action && check_admin_referer('radium-demo-code' , 'demononce')){
$this->process_imports();
} ?>
</div>
</form>
</div>
<br />
<br /><?php
}
public function process_imports($mine = true, $content = true, $options = true, $widgets = true) {
if ( $content && !empty( $this->content_demo ) && is_file( $this->content_demo ) ) {
$this->set_demo_data( $this->content_demo );
}
if ( $options && !empty( $this->theme_options_file ) && is_file( $this->theme_options_file ) ) {
$this->set_demo_theme_options( $this->theme_options_file );
}
if ( $options ) {
$this->set_demo_menus();
}
if ( $widgets && !empty( $this->widgets ) && is_file( $this->widgets ) ) {
$this->process_widget_import_file( $this->widgets );
}
if($mine){
$this->import_options();
}
do_action( 'radium_import_end');
}
public function add_widget_to_sidebar($sidebar_slug, $widget_slug, $count_mod, $widget_settings = array()){
$sidebars_widgets = get_option('sidebars_widgets');
if(!isset($sidebars_widgets[$sidebar_slug]))
$sidebars_widgets[$sidebar_slug] = array('_multiwidget' => 1);
$newWidget = get_option('widget_'.$widget_slug);
if(!is_array($newWidget))
$newWidget = array();
$count = count($newWidget)+1+$count_mod;
$sidebars_widgets[$sidebar_slug][] = $widget_slug.'-'.$count;
$newWidget[$count] = $widget_settings;
update_option('sidebars_widgets', $sidebars_widgets);
update_option('widget_'.$widget_slug, $newWidget);
}
public function set_demo_data( $file ) {
if ( !defined('WP_LOAD_IMPORTERS') ) define('WP_LOAD_IMPORTERS', true);
require_once ABSPATH . 'wp-admin/includes/import.php';
$importer_error = false;
if ( !class_exists( 'WP_Importer' ) ) {
$class_wp_importer = ABSPATH . 'wp-admin/includes/class-wp-importer.php';
if ( file_exists( $class_wp_importer ) ){
require_once($class_wp_importer);
} else {
$importer_error = true;
}
}
if ( !class_exists( 'WP_Import' ) ) {
$class_wp_import = dirname( __FILE__ ) .'/wordpress-importer.php';
if ( file_exists( $class_wp_import ) )
require_once($class_wp_import);
else
$importer_error = true;
}
if($importer_error){
die("Error on import");
} else {
if(!is_file( $file )){
echo "The XML file containing the dummy content is not available or could not be read .. You might want to try to set the file permission to chmod 755.<br/>If this doesn't work please use the Wordpress importer and import the XML file (should be located in your download .zip: Sample Content folder) manually ";
} else {
$wp_import = new WP_Import();
$wp_import->fetch_attachments = true;
$wp_import->import( $file );
$this->flag_as_imported['content'] = true;
}
}
do_action( 'radium_importer_after_theme_content_import');
}
/** Import Options Hook added by kami*/
public function import_options() {
//$data = $_POST['data'];
$data = $options_export;
$data = base64_decode( $data );
$data = json_decode( $data, true );
if ( isset( $data ) ) {
foreach ( $data as $key => $value ) {
update_option( $key, wp_kses_post( stripcslashes( $value) ) );
}
}
//die();
}
/** import action ends **/
public function set_demo_menus() {}
public function set_demo_theme_options( $file ) {
// Does the File exist?
if ( file_exists( $file ) ) {
// Get file contents and decode
$data = file_get_contents( $file );
if( $this->theme_options_framework == 'radium') {
//radium framework
$data = unserialize( trim($data, '###') );
} elseif( $this->theme_options_framework == 'optiontree' ) {
//option tree import
$data = $this->optiontree_decode($data);
update_option( ot_options_id(), $data );
$this->flag_as_imported['options'] = true;
} else {
//other frameworks
//$data = json_decode( $data, true );
$data = maybe_unserialize( $data );
}
// Only if there is data
if ( !empty( $data ) || is_array( $data ) ) {
// Hook before import
$data = apply_filters( 'radium_theme_import_theme_options', $data );
update_option( $this->theme_option_name, $data );
$this->flag_as_imported['options'] = true;
}
do_action( 'radium_importer_after_theme_options_import', $this->demo_files_path );
} else {
wp_die(
__( 'Theme options Import file could not be found. Please try again.', 'radium' ),
'',
array( 'back_link' => true )
);
}
}
function available_widgets() {
global $wp_registered_widget_controls;
$widget_controls = $wp_registered_widget_controls;
$available_widgets = array();
foreach ( $widget_controls as $widget ) {
if ( ! empty( $widget['id_base'] ) && ! isset( $available_widgets[$widget['id_base']] ) ) { // no dupes
$available_widgets[$widget['id_base']]['id_base'] = $widget['id_base'];
$available_widgets[$widget['id_base']]['name'] = $widget['name'];
}
}
return apply_filters( 'radium_theme_import_widget_available_widgets', $available_widgets );
}
function process_widget_import_file( $file ) {
// File exists?
if ( ! file_exists( $file ) ) {
wp_die(
__( 'Widget Import file could not be found. Please try again.', 'radium' ),
'',
array( 'back_link' => true )
);
}
// Get file contents and decode
$data = file_get_contents( $file );
$data = json_decode( $data );
// Delete import file
//unlink( $file );
// Import the widget data
// Make results available for display on import/export page
$this->widget_import_results = $this->import_widgets( $data );
}
public function import_widgets( $data ) {
global $wp_registered_sidebars;
// Have valid data?
// If no data or could not decode
if ( empty( $data ) || ! is_object( $data ) ) {
return;
}
// Hook before import
$data = apply_filters( 'radium_theme_import_widget_data', $data );
// Get all available widgets site supports
$available_widgets = $this->available_widgets();
// Get all existing widget instances
$widget_instances = array();
foreach ( $available_widgets as $widget_data ) {
$widget_instances[$widget_data['id_base']] = get_option( 'widget_' . $widget_data['id_base'] );
}
// Begin results
$results = array();
// Loop import data's sidebars
foreach ( $data as $sidebar_id => $widgets ) {
// Skip inactive widgets
// (should not be in export file)
if ( 'wp_inactive_widgets' == $sidebar_id ) {
continue;
}
// Check if sidebar is available on this site
// Otherwise add widgets to inactive, and say so
if ( isset( $wp_registered_sidebars[$sidebar_id] ) ) {
$sidebar_available = true;
$use_sidebar_id = $sidebar_id;
$sidebar_message_type = 'success';
$sidebar_message = '';
} else {
$sidebar_available = false;
$use_sidebar_id = 'wp_inactive_widgets'; // add to inactive if sidebar does not exist in theme
$sidebar_message_type = 'error';
$sidebar_message = __( 'Sidebar does not exist in theme (using Inactive)', 'radium' );
}
// Result for sidebar
$results[$sidebar_id]['name'] = ! empty( $wp_registered_sidebars[$sidebar_id]['name'] ) ? $wp_registered_sidebars[$sidebar_id]['name'] : $sidebar_id; // sidebar name if theme supports it; otherwise ID
$results[$sidebar_id]['message_type'] = $sidebar_message_type;
$results[$sidebar_id]['message'] = $sidebar_message;
$results[$sidebar_id]['widgets'] = array();
// Loop widgets
foreach ( $widgets as $widget_instance_id => $widget ) {
$fail = false;
// Get id_base (remove -# from end) and instance ID number
$id_base = preg_replace( '/-[0-9]+$/', '', $widget_instance_id );
$instance_id_number = str_replace( $id_base . '-', '', $widget_instance_id );
// Does site support this widget?
if ( ! $fail && ! isset( $available_widgets[$id_base] ) ) {
$fail = true;
$widget_message_type = 'error';
$widget_message = __( 'Site does not support widget', 'radium' ); // explain why widget not imported
}
// Filter to modify settings before import
// Do before identical check because changes may make it identical to end result (such as URL replacements)
$widget = apply_filters( 'radium_theme_import_widget_settings', $widget );
// Does widget with identical settings already exist in same sidebar?
if ( ! $fail && isset( $widget_instances[$id_base] ) ) {
// Get existing widgets in this sidebar
$sidebars_widgets = get_option( 'sidebars_widgets' );
$sidebar_widgets = isset( $sidebars_widgets[$use_sidebar_id] ) ? $sidebars_widgets[$use_sidebar_id] : array(); // check Inactive if that's where will go
// Loop widgets with ID base
$single_widget_instances = ! empty( $widget_instances[$id_base] ) ? $widget_instances[$id_base] : array();
foreach ( $single_widget_instances as $check_id => $check_widget ) {
// Is widget in same sidebar and has identical settings?
if ( in_array( "$id_base-$check_id", $sidebar_widgets ) && (array) $widget == $check_widget ) {
$fail = true;
$widget_message_type = 'warning';
$widget_message = __( 'Widget already exists', 'radium' ); // explain why widget not imported
break;
}
}
}
// No failure
if ( ! $fail ) {
// Add widget instance
$single_widget_instances = get_option( 'widget_' . $id_base ); // all instances for that widget ID base, get fresh every time
$single_widget_instances = ! empty( $single_widget_instances ) ? $single_widget_instances : array( '_multiwidget' => 1 ); // start fresh if have to
$single_widget_instances[] = (array) $widget; // add it
// Get the key it was given
end( $single_widget_instances );
$new_instance_id_number = key( $single_widget_instances );
// If key is 0, make it 1
// When 0, an issue can occur where adding a widget causes data from other widget to load, and the widget doesn't stick (reload wipes it)
if ( '0' === strval( $new_instance_id_number ) ) {
$new_instance_id_number = 1;
$single_widget_instances[$new_instance_id_number] = $single_widget_instances[0];
unset( $single_widget_instances[0] );
}
// Move _multiwidget to end of array for uniformity
if ( isset( $single_widget_instances['_multiwidget'] ) ) {
$multiwidget = $single_widget_instances['_multiwidget'];
unset( $single_widget_instances['_multiwidget'] );
$single_widget_instances['_multiwidget'] = $multiwidget;
}
// Update option with new widget
update_option( 'widget_' . $id_base, $single_widget_instances );
// Assign widget instance to sidebar
$sidebars_widgets = get_option( 'sidebars_widgets' ); // which sidebars have which widgets, get fresh every time
$new_instance_id = $id_base . '-' . $new_instance_id_number; // use ID number from new widget instance
$sidebars_widgets[$use_sidebar_id][] = $new_instance_id; // add new instance to sidebar
update_option( 'sidebars_widgets', $sidebars_widgets ); // save the amended data
// Success message
if ( $sidebar_available ) {
$widget_message_type = 'success';
$widget_message = __( 'Imported', 'radium' );
} else {
$widget_message_type = 'warning';
$widget_message = __( 'Imported to Inactive', 'radium' );
}
}
// Result for widget instance
$results[$sidebar_id]['widgets'][$widget_instance_id]['name'] = isset( $available_widgets[$id_base]['name'] ) ? $available_widgets[$id_base]['name'] : $id_base; // widget name or ID if name not available (not supported by site)
$results[$sidebar_id]['widgets'][$widget_instance_id]['title'] = $widget->title ? $widget->title : __( 'No Title', 'radium' ); // show "No Title" if widget instance is untitled
$results[$sidebar_id]['widgets'][$widget_instance_id]['message_type'] = $widget_message_type;
$results[$sidebar_id]['widgets'][$widget_instance_id]['message'] = $widget_message;
}
}
$this->flag_as_imported['widgets'] = true;
// Hook after import
do_action( 'radium_theme_import_widget_after_import' );
// Return results
return apply_filters( 'radium_theme_import_widget_results', $results );
}
public function optiontree_decode( $value ) {
$func = 'base64' . '_decode';
$prepared_data = maybe_unserialize( $func( $value ) );
return $prepared_data;
}
}//class
}//function_exists
?>
Here is my INIT class
<?php
if($_POST){
$theHash = $_POST['hashString'];
echo $theHash; echo "the hash value is";
}
/**
* Version 0.0.3
*
* This file is just an example you can copy it to your theme and modify it to fit your own needs.
* Watch the paths though.
*/
// Exit if accessed directly
if ( !defined( 'ABSPATH' ) ) exit;
// Don't duplicate me!
if ( !class_exists( 'Radium_Theme_Demo_Data_Importer' ) ) {
require_once( dirname( __FILE__ ) . '/importer/radium-importer.php' ); //load admin theme data importer
class Radium_Theme_Demo_Data_Importer extends Radium_Theme_Importer {
/**
* Set framewok
*
* options that can be used are 'default', 'radium' or 'optiontree'
*
* #since 0.0.3
*
* #var string
*/
public $theme_options_framework = 'radium';
public $me = 'dani';
/**
* Holds a copy of the object for easy reference.
*
* #since 0.0.1
*
* #var object
*/
private static $instance;
/**
* Set the key to be used to store theme options
*
* #since 0.0.2
*
* #var string
*/
public $theme_option_name = 'my_theme_options_name'; //set theme options name here (key used to save theme options). Optiontree option name will be set automatically
/**
* Set name of the theme options file
*
* #since 0.0.2
*
* #var string
*/
public $theme_options_file_name = 'theme_options.txt';
public $theme_options_file_name1 = 'theme_options1.txt';
/**
* Set name of the widgets json file
*
* #since 0.0.2
*
* #var string
*/
public $widgets_file_name = 'widgets.json';
/**
* Set name of the content file
*
* #since 0.0.2
*
* #var string
*/
public $content_demo_file_name = 'content.xml';
/**
* Holds a copy of the widget settings
*
* #since 0.0.2
*
* #var string
*/
public $widget_import_results;
/**
* Constructor. Hooks all interactions to initialize the class.
*
* #since 0.0.1
*/
public function __construct() {
$this->demo_files_path = dirname(__FILE__) . '/demo-files/'; //can
self::$instance = $this;
parent::__construct();
}
/**
* Add menus - the menus listed here largely depend on the ones registered in the theme
*
* #since 0.0.1
*/
public function set_demo_menus(){
// Menus to Import and assign - you can remove or add as many as you want
$top_menu = get_term_by('name', 'Top Menu', 'nav_menu');
$main_menu = get_term_by('name', 'Main Menu', 'nav_menu');
$footer_menu = get_term_by('name', 'Main Menu', 'nav_menu');
set_theme_mod( 'nav_menu_locations', array(
'top-menu' => $top_menu->term_id,
'primary' => $main_menu->term_id,
'footer-menu' => $footer_menu->term_id
)
);
$this->flag_as_imported['menus'] = true;
}
}
new Radium_Theme_Demo_Data_Importer;
}
Now here is my question again ... How can I extend this code so that I can import data based on my selection. For that I can send that selection by ajax post as well. Thanks hope that's enough info by now.

How to create more than one demo import button in WordPress?

I am working on WordPress theme in which user has option to import demo data, It does import fine and goal is done. But, I have to provide user with two available options to select with, 1: family law, 2: injury law.
If user selects family law then demo content related to family law website will be imported and if user clicks on injury law drop down then content of injury law website will be imported. How can I achieve this in WordPress? Is it possible in WordPress or not?
Here is my import page code:
<?php
/**
* Class Radium_Theme_Importer
* #since 0.0.2
*/
// Exit if accessed directly
if ( !defined( 'ABSPATH' ) ) exit;
// Don't duplicate me!
if ( !class_exists( 'Radium_Theme_Importer' ) ) {
class Radium_Theme_Importer {
/**
* Set the theme framework in use
*/
public $theme_options_framework = 'radium'; //supports radium framework and option tree
/**
* Holds a copy of the object for easy reference.
*
* #since 0.0.2
*
* #var object
*/
public $theme_options_file;
/**
* Holds a copy of the object for easy reference.
*
* #since 0.0.2
*
* #var object
*/
public $widgets;
/**
* Holds a copy of the object for easy reference.
*
* #since 0.0.2
*
* #var object
*/
public $content_demo;
/**
* Flag imported to prevent duplicates
*
* #since 0.0.3
*
* #var array
*/
public $flag_as_imported = array( 'content' => false, 'menus' => false, 'options' => false, 'widgets' =>false );
/**
* imported sections to prevent duplicates
*
* #since 0.0.3
*
* #var array
*/
public $imported_demos = array();
/**
* Flag imported to prevent duplicates
*
* #since 0.0.3
*
* #var bool
*/
public $add_admin_menu = true;
/**
* Holds a copy of the object for easy reference.
*
* #since 0.0.2
*
* #var object
*/
private static $instance;
/**
* Constructor. Hooks all interactions to initialize the class.
*
* #since 0.0.2
*/
public function __construct() {
self::$instance = $this;
$this->demo_files_path = apply_filters('radium_theme_importer_demo_files_path', $this->demo_files_path);
$this->theme_options_file = apply_filters('radium_theme_importer_theme_options_file', $this->demo_files_path . $this->theme_options_file_name);
$this->widgets = apply_filters('radium_theme_importer_widgets_file', $this->demo_files_path . $this->widgets_file_name);
$this->content_demo = apply_filters('radium_theme_importer_content_demo_file', $this->demo_files_path . $this->content_demo_file_name);
$this->imported_demos = get_option( 'radium_imported_demo' );
if( $this->theme_options_framework == 'optiontree' ) {
$this->theme_option_name = ot_options_id();
}
if( $this->add_admin_menu ) add_action( 'admin_menu', array($this, 'add_admin') );
add_filter( 'add_post_metadata', array( $this, 'check_previous_meta' ), 10, 5 );
add_action( 'radium_import_end', array( $this, 'after_wp_importer' ) );
}
/**
* Add Panel Page
*
* #since 0.0.2
*/
public function add_admin() {
add_submenu_page('themes.php', "Import Demo Data", "Import Demo Data", 'switch_themes', 'radium_demo_installer', array($this, 'demo_installer'));
}
/**
* Avoids adding duplicate meta causing arrays in arrays from WP_importer
*
* #param null $continue
* #param unknown $post_id
* #param unknown $meta_key
* #param unknown $meta_value
* #param unknown $unique
*
* #since 0.0.2
*
* #return
*/
public function check_previous_meta( $continue, $post_id, $meta_key, $meta_value, $unique ) {
$old_value = get_metadata( 'post', $post_id, $meta_key );
if ( count( $old_value ) == 1 ) {
if ( $old_value[0] === $meta_value ) {
return false;
} elseif ( $old_value[0] !== $meta_value ) {
update_post_meta( $post_id, $meta_key, $meta_value );
return false;
}
}
}
/**
* Add Panel Page
*
* #since 0.0.2
*/
public function after_wp_importer() {
do_action( 'radium_importer_after_content_import');
update_option( 'radium_imported_demo', $this->flag_as_imported );
}
public function intro_html() {
?>
<div style="background-color: #F5FAFD; margin:10px 0;padding: 5px 10px;color: #0C518F;border: 2px solid #CAE0F3; clear:both; width:90%; line-height:18px;">
<p class="tie_message_hint">Importing demo data (post, pages, images, theme settings, ...) is the easiest way to setup your theme. It will
allow you to quickly edit everything instead of creating content from scratch. When you import the data following things will happen:</p>
<ul style="padding-left: 20px;list-style-position: inside;list-style-type: square;}">
<li>No existing posts, pages, categories, images, custom post types or any other data will be deleted or modified .</li>
<li>No WordPress settings will be modified .</li>
<li>Posts, pages, some images, some widgets and menus will get imported .</li>
<li>Images will be downloaded from our server, these images are copyrighted and are for demo use only .</li>
<li>Please click import only once and wait, it can take a couple of minutes</li>
</ul>
</div>
<div style="background-color: #F5FAFD; margin:10px 0;padding: 5px 10px;color: #0C518F;border: 2px solid #CAE0F3; clear:both; width:90%; line-height:18px;"><p class="tie_message_hint">Before you begin, make sure all the required plugins are activated.</p></div>
<?php
if( !empty($this->imported_demos) ) { ?>
<div style="background-color: #FAFFFB; margin:10px 0;padding: 5px 10px;color: #8AB38A;border: 2px solid #a1d3a2; clear:both; width:90%; line-height:18px;">
<p><?php _e('Demo already imported', 'radium'); ?></p>
</div><?php
//return;
}
}
public function demo_installer() {
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';
if( !empty($this->imported_demos ) ) {
$button_text = __('Import Again', 'radium');
} else {
$button_text = __('Import Demo Data', 'radium');
}
?><div id="icon-tools" class="icon32"><br></div>
<h2>Import Demo Data</h2>
<div class="radium-importer-wrap" data-demo-id="1" data-nonce="<?php echo wp_create_nonce('radium-demo-code'); ?>">
<form method="post">
<?php $this->intro_html(); ?>
<input type="hidden" name="demononce" value="<?php echo wp_create_nonce('radium-demo-code'); ?>" />
<input name="reset" class="panel-save button-primary radium-import-start" type="submit" value="<?php echo $button_text ; ?>" />
<input type="hidden" name="action" value="demo-data" />
<br />
<br />
<div class="radium-importer-message clear">
<?php if( 'demo-data' == $action && check_admin_referer('radium-demo-code' , 'demononce')){
$this->process_imports();
} ?>
</div>
</form>
</div>
<br />
<br /><?php
}
public function process_imports($mine = true, $content = true, $options = true, $widgets = true) {
if ( $content && !empty( $this->content_demo ) && is_file( $this->content_demo ) ) {
$this->set_demo_data( $this->content_demo );
}
if ( $options && !empty( $this->theme_options_file ) && is_file( $this->theme_options_file ) ) {
$this->set_demo_theme_options( $this->theme_options_file );
}
if ( $options ) {
$this->set_demo_menus();
}
if ( $widgets && !empty( $this->widgets ) && is_file( $this->widgets ) ) {
$this->process_widget_import_file( $this->widgets );
}
if($mine){
$this->import_options();
}
do_action( 'radium_import_end');
}
/** Import Options Hook added by kami*/
public function import_options() {
//$data = $_POST['data'];
$options_export = file_get_contents(get_stylesheet_directory_uri().'/framework/inc/theme-options/theme_options.txt');
$data = $options_export;
$data = base64_decode( $data );
$data = json_decode( $data, true );
if ( isset( $data ) ) {
foreach ( $data as $key => $value ) {
update_option( $key, wp_kses_post( stripcslashes( $value) ) );
}
}
die();
}
/** import action ends **/
/**
* add_widget_to_sidebar Import sidebars
* #param string $sidebar_slug Sidebar slug to add widget
* #param string $widget_slug Widget slug
* #param string $count_mod position in sidebar
* #param array $widget_settings widget settings
*
* #since 0.0.2
*
* #return null
*/
public function add_widget_to_sidebar($sidebar_slug, $widget_slug, $count_mod, $widget_settings = array()){
$sidebars_widgets = get_option('sidebars_widgets');
if(!isset($sidebars_widgets[$sidebar_slug]))
$sidebars_widgets[$sidebar_slug] = array('_multiwidget' => 1);
$newWidget = get_option('widget_'.$widget_slug);
if(!is_array($newWidget))
$newWidget = array();
$count = count($newWidget)+1+$count_mod;
$sidebars_widgets[$sidebar_slug][] = $widget_slug.'-'.$count;
$newWidget[$count] = $widget_settings;
update_option('sidebars_widgets', $sidebars_widgets);
update_option('widget_'.$widget_slug, $newWidget);
}
public function set_demo_data( $file ) {
if ( !defined('WP_LOAD_IMPORTERS') ) define('WP_LOAD_IMPORTERS', true);
require_once ABSPATH . 'wp-admin/includes/import.php';
$importer_error = false;
if ( !class_exists( 'WP_Importer' ) ) {
$class_wp_importer = ABSPATH . 'wp-admin/includes/class-wp-importer.php';
if ( file_exists( $class_wp_importer ) ){
require_once($class_wp_importer);
} else {
$importer_error = true;
}
}
if ( !class_exists( 'WP_Import' ) ) {
$class_wp_import = dirname( __FILE__ ) .'/wordpress-importer.php';
if ( file_exists( $class_wp_import ) )
require_once($class_wp_import);
else
$importer_error = true;
}
if($importer_error){
die("Error on import");
} else {
if(!is_file( $file )){
echo "The XML file containing the dummy content is not available or could not be read .. You might want to try to set the file permission to chmod 755.<br/>If this doesn't work please use the Wordpress importer and import the XML file (should be located in your download .zip: Sample Content folder) manually ";
} else {
$wp_import = new WP_Import();
$wp_import->fetch_attachments = true;
$wp_import->import( $file );
$this->flag_as_imported['content'] = true;
}
}
do_action( 'radium_importer_after_theme_content_import');
}
public function set_demo_menus() {}
public function set_demo_theme_options( $file ) {
// Does the File exist?
if ( file_exists( $file ) ) {
// Get file contents and decode
$data = file_get_contents( $file );
if( $this->theme_options_framework == 'radium') {
//radium framework
$data = unserialize( trim($data, '###') );
} elseif( $this->theme_options_framework == 'optiontree' ) {
//option tree import
$data = $this->optiontree_decode($data);
update_option( ot_options_id(), $data );
$this->flag_as_imported['options'] = true;
} else {
//other frameworks
//$data = json_decode( $data, true );
$data = maybe_unserialize( $data );
}
// Only if there is data
if ( !empty( $data ) || is_array( $data ) ) {
// Hook before import
$data = apply_filters( 'radium_theme_import_theme_options', $data );
update_option( $this->theme_option_name, $data );
$this->flag_as_imported['options'] = true;
}
do_action( 'radium_importer_after_theme_options_import', $this->demo_files_path );
} else {
wp_die(
__( 'Theme options Import file could not be found. Please try again.', 'radium' ),
'',
array( 'back_link' => true )
);
}
}
/**
* Available widgets
*
* Gather site's widgets into array with ID base, name, etc.
* Used by export and import functions.
*
* #since 0.0.2
*
* #global array $wp_registered_widget_updates
* #return array Widget information
*/
function available_widgets() {
global $wp_registered_widget_controls;
$widget_controls = $wp_registered_widget_controls;
$available_widgets = array();
foreach ( $widget_controls as $widget ) {
if ( ! empty( $widget['id_base'] ) && ! isset( $available_widgets[$widget['id_base']] ) ) { // no dupes
$available_widgets[$widget['id_base']]['id_base'] = $widget['id_base'];
$available_widgets[$widget['id_base']]['name'] = $widget['name'];
}
}
return apply_filters( 'radium_theme_import_widget_available_widgets', $available_widgets );
}
/**
* Process import file
*
* This parses a file and triggers importation of its widgets.
*
* #since 0.0.2
*
* #param string $file Path to .wie file uploaded
* #global string $widget_import_results
*/
function process_widget_import_file( $file ) {
// File exists?
if ( ! file_exists( $file ) ) {
wp_die(
__( 'Widget Import file could not be found. Please try again.', 'radium' ),
'',
array( 'back_link' => true )
);
}
// Get file contents and decode
$data = file_get_contents( $file );
$data = json_decode( $data );
// Delete import file
//unlink( $file );
// Import the widget data
// Make results available for display on import/export page
$this->widget_import_results = $this->import_widgets( $data );
}
/**
* Import widget JSON data
*
* #since 0.0.2
* #global array $wp_registered_sidebars
* #param object $data JSON widget data from .json file
* #return array Results array
*/
public function import_widgets( $data ) {
global $wp_registered_sidebars;
// Have valid data?
// If no data or could not decode
if ( empty( $data ) || ! is_object( $data ) ) {
return;
}
// Hook before import
$data = apply_filters( 'radium_theme_import_widget_data', $data );
// Get all available widgets site supports
$available_widgets = $this->available_widgets();
// Get all existing widget instances
$widget_instances = array();
foreach ( $available_widgets as $widget_data ) {
$widget_instances[$widget_data['id_base']] = get_option( 'widget_' . $widget_data['id_base'] );
}
// Begin results
$results = array();
// Loop import data's sidebars
foreach ( $data as $sidebar_id => $widgets ) {
// Skip inactive widgets
// (should not be in export file)
if ( 'wp_inactive_widgets' == $sidebar_id ) {
continue;
}
// Check if sidebar is available on this site
// Otherwise add widgets to inactive, and say so
if ( isset( $wp_registered_sidebars[$sidebar_id] ) ) {
$sidebar_available = true;
$use_sidebar_id = $sidebar_id;
$sidebar_message_type = 'success';
$sidebar_message = '';
} else {
$sidebar_available = false;
$use_sidebar_id = 'wp_inactive_widgets'; // add to inactive if sidebar does not exist in theme
$sidebar_message_type = 'error';
$sidebar_message = __( 'Sidebar does not exist in theme (using Inactive)', 'radium' );
}
// Result for sidebar
$results[$sidebar_id]['name'] = ! empty( $wp_registered_sidebars[$sidebar_id]['name'] ) ? $wp_registered_sidebars[$sidebar_id]['name'] : $sidebar_id; // sidebar name if theme supports it; otherwise ID
$results[$sidebar_id]['message_type'] = $sidebar_message_type;
$results[$sidebar_id]['message'] = $sidebar_message;
$results[$sidebar_id]['widgets'] = array();
// Loop widgets
foreach ( $widgets as $widget_instance_id => $widget ) {
$fail = false;
// Get id_base (remove -# from end) and instance ID number
$id_base = preg_replace( '/-[0-9]+$/', '', $widget_instance_id );
$instance_id_number = str_replace( $id_base . '-', '', $widget_instance_id );
// Does site support this widget?
if ( ! $fail && ! isset( $available_widgets[$id_base] ) ) {
$fail = true;
$widget_message_type = 'error';
$widget_message = __( 'Site does not support widget', 'radium' ); // explain why widget not imported
}
// Filter to modify settings before import
// Do before identical check because changes may make it identical to end result (such as URL replacements)
$widget = apply_filters( 'radium_theme_import_widget_settings', $widget );
// Does widget with identical settings already exist in same sidebar?
if ( ! $fail && isset( $widget_instances[$id_base] ) ) {
// Get existing widgets in this sidebar
$sidebars_widgets = get_option( 'sidebars_widgets' );
$sidebar_widgets = isset( $sidebars_widgets[$use_sidebar_id] ) ? $sidebars_widgets[$use_sidebar_id] : array(); // check Inactive if that's where will go
// Loop widgets with ID base
$single_widget_instances = ! empty( $widget_instances[$id_base] ) ? $widget_instances[$id_base] : array();
foreach ( $single_widget_instances as $check_id => $check_widget ) {
// Is widget in same sidebar and has identical settings?
if ( in_array( "$id_base-$check_id", $sidebar_widgets ) && (array) $widget == $check_widget ) {
$fail = true;
$widget_message_type = 'warning';
$widget_message = __( 'Widget already exists', 'radium' ); // explain why widget not imported
break;
}
}
}
// No failure
if ( ! $fail ) {
// Add widget instance
$single_widget_instances = get_option( 'widget_' . $id_base ); // all instances for that widget ID base, get fresh every time
$single_widget_instances = ! empty( $single_widget_instances ) ? $single_widget_instances : array( '_multiwidget' => 1 ); // start fresh if have to
$single_widget_instances[] = (array) $widget; // add it
// Get the key it was given
end( $single_widget_instances );
$new_instance_id_number = key( $single_widget_instances );
// If key is 0, make it 1
// When 0, an issue can occur where adding a widget causes data from other widget to load, and the widget doesn't stick (reload wipes it)
if ( '0' === strval( $new_instance_id_number ) ) {
$new_instance_id_number = 1;
$single_widget_instances[$new_instance_id_number] = $single_widget_instances[0];
unset( $single_widget_instances[0] );
}
// Move _multiwidget to end of array for uniformity
if ( isset( $single_widget_instances['_multiwidget'] ) ) {
$multiwidget = $single_widget_instances['_multiwidget'];
unset( $single_widget_instances['_multiwidget'] );
$single_widget_instances['_multiwidget'] = $multiwidget;
}
// Update option with new widget
update_option( 'widget_' . $id_base, $single_widget_instances );
// Assign widget instance to sidebar
$sidebars_widgets = get_option( 'sidebars_widgets' ); // which sidebars have which widgets, get fresh every time
$new_instance_id = $id_base . '-' . $new_instance_id_number; // use ID number from new widget instance
$sidebars_widgets[$use_sidebar_id][] = $new_instance_id; // add new instance to sidebar
update_option( 'sidebars_widgets', $sidebars_widgets ); // save the amended data
// Success message
if ( $sidebar_available ) {
$widget_message_type = 'success';
$widget_message = __( 'Imported', 'radium' );
} else {
$widget_message_type = 'warning';
$widget_message = __( 'Imported to Inactive', 'radium' );
}
}
// Result for widget instance
$results[$sidebar_id]['widgets'][$widget_instance_id]['name'] = isset( $available_widgets[$id_base]['name'] ) ? $available_widgets[$id_base]['name'] : $id_base; // widget name or ID if name not available (not supported by site)
$results[$sidebar_id]['widgets'][$widget_instance_id]['title'] = $widget->title ? $widget->title : __( 'No Title', 'radium' ); // show "No Title" if widget instance is untitled
$results[$sidebar_id]['widgets'][$widget_instance_id]['message_type'] = $widget_message_type;
$results[$sidebar_id]['widgets'][$widget_instance_id]['message'] = $widget_message;
}
}
$this->flag_as_imported['widgets'] = true;
// Hook after import
do_action( 'radium_theme_import_widget_after_import' );
// Return results
return apply_filters( 'radium_theme_import_widget_results', $results );
}
/**
* Helper function to return option tree decoded strings
*
* #return string
*
* #access public
* #since 0.0.3
* #updated 0.0.3.1
*/
public function optiontree_decode( $value ) {
$func = 'base64' . '_decode';
$prepared_data = maybe_unserialize( $func( $value ) );
return $prepared_data;
}
}//class
}//function_exists
?>

Woocommerce Checkout not Working with No CAPTCHA reCAPTCHA for WooCommerce Plugin

when i active 'No CAPTCHA reCAPTCHA for WooCommerce' plugin, so on checkout page of WooCommerce when customer checked the 'Create an account?' check-box and than Place Order, it does not work. the page just scroll on to the top and nothing action.
any idea?
Reagrds
Faizan
The plugin is just written to protect the Woocommerce Registration and Login, not the Checkout Process.
In order to protect the Checkout Process, I tweaked registration.php like this
class WC_Ncr_Registration_Captcha extends WC_Ncr_No_Captcha_Recaptcha {
/** Initialize actions and filters */
public static function initialize() {
// initialize if login is activated
if ( isset( self::$plugin_options['captcha_wc_registration'] ) || self::$plugin_options['captcha_wc_registration'] == 'yes' ) {
// adds the captcha to the registration form
add_action( 'register_form', array( __CLASS__, 'display_captcha' ) );
}
//added the following lines to the plugin
add_action('woocommerce_after_checkout_billing_form', array( __CLASS__, 'display_captcha' ));
add_action('woocommerce_checkout_process', array(
__CLASS__,
'validate_captcha_wc_checkout'
), 10, 3 );
//added the previous lines to the plugin
}
/**
* Verify the captcha answer
*
* #param $validation_errors
* #param $username
* #param $email
*
* #return WP_Error
*/
public static function validate_captcha_wc_registration( $validation_errors, $username, $email ) {
if ( ! isset( $_POST['g-recaptcha-response'] ) || ! self::captcha_wc_verification() ) {
$validation_errors = new WP_Error( 'failed_verification', self::$error_message );
}
return $validation_errors;
}
//added the following lines to the plugin
public static function validate_captcha_wc_checkout( $validation_errors, $username, $email ) {
if ( ! isset( $_POST['g-recaptcha-response'] ) || ! self::captcha_wc_verification() ) {
wc_add_notice(__( 'Please verify you are not a robot.' ), 'error' );
}
}
//added the previous lines to the plugin
}
Add to functions.php
function my_woocommerce_before_checkout_process() {
remove_filter( 'woocommerce_registration_errors', array('WC_Ncr_Registration_Captcha', 'validate_captcha_wc_registration'), 10 );
}
add_action('woocommerce_before_checkout_process', 'my_woocommerce_before_checkout_process');

Resources