331 lines
15 KiB
PHP
331 lines
15 KiB
PHP
<?php
|
|
if(!defined("WOOCOMPOSER_VERSION")){
|
|
define("WOOCOMPOSER_VERSION",'1.0');
|
|
}
|
|
if(!class_exists("WooComposer")){
|
|
class WooComposer{
|
|
var $module_dir;
|
|
function __construct()
|
|
{
|
|
$this->module_dir = plugin_dir_path( __FILE__ ).'modules/';
|
|
add_action('admin_enqueue_scripts',array($this,'admin_scripts'));
|
|
add_action('wp_enqueue_scripts',array($this,'front_scripts'),1);
|
|
add_action('admin_init',array($this,'generate_shortcode_params'));
|
|
} /* end constructor */
|
|
function generate_shortcode_params(){
|
|
/* Generate param type "woocomposer" */
|
|
if(defined('WPB_VC_VERSION') && version_compare(WPB_VC_VERSION, 4.8) >= 0) {
|
|
if(function_exists('vc_add_shortcode_param'))
|
|
{
|
|
vc_add_shortcode_param('woocomposer', array($this,'woo_query_builder'), plugins_url("admin/js/mapping.js",__FILE__));
|
|
vc_add_shortcode_param('product_search', array($this,'woo_product_search'));
|
|
vc_add_shortcode_param('product_categories', array($this,'woo_product_categories'));
|
|
}
|
|
}
|
|
else {
|
|
if(function_exists('add_shortcode_param')) {
|
|
add_shortcode_param('woocomposer', array($this,'woo_query_builder'), plugins_url("admin/js/mapping.js",__FILE__));
|
|
add_shortcode_param('product_search', array($this,'woo_product_search'));
|
|
add_shortcode_param('product_categories', array($this,'woo_product_categories'));
|
|
}
|
|
}
|
|
}
|
|
|
|
function woo_query_builder($settings, $value)
|
|
{
|
|
$output = $asc = $desc = $post_count = $shortcode_str = $cat_id = '';
|
|
$labels = isset($settings['labels']) ? $settings['labels'] : '';
|
|
$pattern = get_shortcode_regex();
|
|
if($value !== ""){
|
|
$shortcode = rawurldecode( base64_decode( strip_tags( $value ) ) );
|
|
preg_match_all("/".$pattern."/",$shortcode,$matches);
|
|
$shortcode_str = str_replace('"','',str_replace(" ","&",trim($matches[3][0])));
|
|
}
|
|
parse_str($shortcode_str, $short_atts);//explode("&",$shortcode_str);
|
|
if(isset($matches[2][0])): $display_type = $matches[2][0]; else: $display_type = ''; endif;
|
|
if(!isset($columns)): $columns = '4'; endif;
|
|
if(!isset($per_page)): $post_count = '12'; else: $post_count = $per_page; endif;
|
|
if(!isset($number)): $per_page = '12'; else: $post_count = $number; endif;
|
|
if(!isset($order)): $order = 'asc'; endif;
|
|
if(!isset($orderby)): $orderby = 'date'; endif;
|
|
if(!isset($category)): $category = ''; endif;
|
|
$catObj = get_term_by('name',$category,'product_cat');
|
|
if(is_object($catObj)){
|
|
$cat_id = $catObj->term_id;
|
|
}
|
|
$param_name = isset($settings['param_name']) ? $settings['param_name'] : '';
|
|
$type = isset($settings['type']) ? $settings['type'] : '';
|
|
$class = isset($settings['class']) ? $settings['class'] : '';
|
|
$module = isset($settings['module']) ? $settings['module'] : '';
|
|
$displays = array(
|
|
__("Recent products","ultimate_vc") => "recent_products",
|
|
__("Featured Products","ultimate_vc") => "featured_products",
|
|
__("Top Rated Products","ultimate_vc") => "top_rated_products",
|
|
__("Product Category","ultimate_vc") => "product_category",
|
|
__("Product Categories","ultimate_vc") => "product_categories",
|
|
__("Products on Sale","ultimate_vc") => "sale_products",
|
|
__("Best Selling Products","ultimate_vc") => "best_selling_products",
|
|
);
|
|
$orderby_arr = array(
|
|
__("Date","ultimate_vc") => "date",
|
|
__("Title","ultimate_vc") => "title",
|
|
__("Product ID","ultimate_vc") => "ID",
|
|
__("Name","ultimate_vc") => "name",
|
|
__("Price","ultimate_vc") => "price",
|
|
__("Sales","ultimate_vc") => "sales",
|
|
__("Random","ultimate_vc") => "rand",
|
|
);
|
|
$output .= '<div class="display_type"><label for="display_type"><strong>'.__($labels['products_from'],'ultimate_vc').'</strong></label>';
|
|
$output .='<select id="display_type">';
|
|
foreach($displays as $title => $display){
|
|
if($display == $display_type)
|
|
$output .= '<option value="'.$display.'" selected="selected">'.__($title,'ultimate_vc').'</option>';
|
|
else
|
|
$output .= '<option value="'.$display.'">'.__($title,'ultimate_vc').'</option>';
|
|
}
|
|
$output .= '</select></div>';
|
|
$output .= '<div class="per_page"><label for="per_page"><strong>'.__($labels['per_page'],'ultimate_vc').'</strong></label>';
|
|
$output .= '<input type="number" min="2" max="1000" id="per_page" value="'.$post_count.'"></div>';
|
|
if($module == "grid"){
|
|
$output .= '<div class="columns"><label for="columns"><strong>'.__($labels['columns'],'ultimate_vc').'</strong></label>';
|
|
$output .= '<input type="number" min="2" max="4" id="columns" value="'.$columns.'"></div>';
|
|
}
|
|
$output .= '<div class="orderby"><label for="orderby"><strong>'.__($labels['order_by'],'ultimate_vc').'</strong></label>';
|
|
$output .= '<select id="orderby">';
|
|
foreach($orderby_arr as $key => $val){
|
|
if($orderby == $val)
|
|
$output .= '<option value="'.$val.'" selected="selected">'.__($key,'ultimate_vc').'</option>';
|
|
else
|
|
$output .= '<option value="'.$val.'">'.__($key,'ultimate_vc').'</option>';
|
|
}
|
|
$output .= '</select></div>';
|
|
$output .= '<div class="order"><label for="order"><strong>'.__($labels['order'],'ultimate_vc').'</strong></label>';
|
|
$output .= '<select id="order">';
|
|
if($order == "asc")
|
|
$asc = 'selected="selected"';
|
|
else
|
|
$desc = 'selected="selected"';
|
|
$output .= '<option value="asc" '.$asc.'>'.__('Ascending','ultimate_vc').'</option>';
|
|
$output .= '<option value="desc" '.$desc.'>'.__('Descending','ultimate_vc').'</option>';
|
|
$output .= '</select></div>';
|
|
$output .= '<div class="cat"><label for="cat"><strong>'.__($labels['category'],'ultimate_vc').'</strong></label>';
|
|
$output .= wp_dropdown_categories( array('taxonomy'=>'product_cat','selected'=>$cat_id,'echo' => false,)).'</div>';
|
|
$output .= '<!-- '.$value.' -->';
|
|
$output .= "<input type='hidden' name='".$param_name."' value='".$value."' class='wpb_vc_param_value ".$param_name." ".$type." ".$class."' id='shortcode'>";
|
|
return $output;
|
|
} /* end woo_query_builder */
|
|
function woo_product_search($settings, $value){
|
|
$param_name = isset($settings['param_name']) ? $settings['param_name'] : '';
|
|
$type = isset($settings['type']) ? $settings['type'] : '';
|
|
$class = isset($settings['class']) ? $settings['class'] : '';
|
|
|
|
$products_array = new WP_Query(array(
|
|
'post_type' => 'product',
|
|
'posts_per_page' => -1,
|
|
'post_status' => 'publish'
|
|
));
|
|
$output = '';
|
|
$output .= '<select id="products" name="'.$param_name.'" class="wpb_vc_param_value '.$param_name.' '.$type.' '.$class.'">';
|
|
while ($products_array->have_posts()) : $products_array->the_post();
|
|
if($value == get_the_ID()){
|
|
$selected = "selected='selected'";
|
|
} else {
|
|
$selected = '';
|
|
}
|
|
$output .= '<option '.$selected.' value="'.get_the_ID().'">'.__(get_the_title(),'ultimate_vc').'</option>';
|
|
endwhile;
|
|
$output .= '</select>';
|
|
|
|
// Disable WooComposer select2 js to break incompatibility with WooCommerce 3.0.0 +
|
|
// $output .= '<script type="text/javascript">
|
|
// jQuery(document).ready(function(){
|
|
// if ( jQuery(".wpb_el_type_product_search #products").data("select2") ) {
|
|
// jQuery(".wpb_el_type_product_search #products").select2("destroy");
|
|
// }
|
|
|
|
// // WooComposer is depracated.
|
|
// // jQuery(".wpb_el_type_product_search #products").select2({
|
|
// // placeholder: "Select a Product",
|
|
// // allowClear: true
|
|
// // });
|
|
// });
|
|
// </script>';
|
|
return $output;
|
|
} /* end woo_product_search */
|
|
function woo_product_categories($settings, $value){
|
|
$param_name = isset($settings['param_name']) ? $settings['param_name'] : '';
|
|
$type = isset($settings['type']) ? $settings['type'] : '';
|
|
$class = isset($settings['class']) ? $settings['class'] : '';
|
|
$product_categories = get_terms( 'product_cat', '' );
|
|
$output = $selected = $ids = '';
|
|
if ( $value !== '' ) {
|
|
$ids = explode( ',', $value );
|
|
$ids = array_map( 'trim', $ids );
|
|
} else {
|
|
$ids = array();
|
|
}
|
|
$output .= '<select id="sel2_cat" multiple="multiple" style="min-width:200px;">';
|
|
foreach($product_categories as $cat){
|
|
if(in_array($cat->term_id, $ids)){
|
|
$selected = 'selected="selected"';
|
|
} else {
|
|
$selected = '';
|
|
}
|
|
$output .= '<option '.$selected.' value="'.$cat->term_id.'">'. __($cat->name,'ultimate_vc') .'</option>';
|
|
}
|
|
$output .= '</select>';
|
|
|
|
$output .= "<input type='hidden' name='".$param_name."' value='".$value."' class='wpb_vc_param_value ".$param_name." ".$type." ".$class."' id='sel_cat'>";
|
|
|
|
// Disable WooComposer select2 js to break incompatibility with WooCommerce 3.0.0 +
|
|
// $output .= '<script type="text/javascript">
|
|
// jQuery("#sel2_cat").select2({
|
|
// placeholder: "Select Categories",
|
|
// allowClear: true
|
|
// });
|
|
// jQuery("#sel2_cat").on("change",function(){
|
|
// jQuery("#sel_cat").val(jQuery(this).val());
|
|
// });
|
|
// </script>';
|
|
return $output;
|
|
|
|
} /* end woo_product_categories*/
|
|
function admin_scripts($hook)
|
|
{
|
|
if($hook == "post.php" || $hook == "post-new.php"){
|
|
if(defined('WOOCOMMERCE_VERSION') && version_compare( '2.1.0', WOOCOMMERCE_VERSION, '<' )) {
|
|
$bsf_dev_mode = bsf_get_option('dev_mode');
|
|
if($bsf_dev_mode === 'enable') {
|
|
wp_register_style("woocomposer-admin",plugins_url("admin/css/admin.css",__FILE__));
|
|
wp_register_style("woocomposer-select2-bootstrap",plugins_url("admin/css/select2-bootstrap.css",__FILE__));
|
|
wp_register_style("woocomposer-select2",plugins_url("admin/css/select2.css",__FILE__));
|
|
wp_enqueue_style("woocomposer-admin");
|
|
|
|
// Disable WooComposer select2 js to break incompatibility with WooCommerce 3.0.0 +
|
|
// wp_enqueue_style("woocomposer-select2-bootstrap");
|
|
// wp_enqueue_style("woocomposer-select2");
|
|
// wp_register_script("woocomposer-select2-js",plugins_url("admin/js/select2.js",__FILE__),array('jquery'),'',true);
|
|
// wp_enqueue_script("woocomposer-select2-js");
|
|
}
|
|
else {
|
|
|
|
// Disable WooComposer select2 js to break incompatibility with WooCommerce 3.0.0 +
|
|
// wp_register_style("woocomposer-admin-style",plugins_url("admin/css/ultimate-woocomposer-backend.min.css",__FILE__));
|
|
// wp_enqueue_style("woocomposer-admin-style");
|
|
|
|
// wp_enqueue_script("woocomposer-admin-script",plugins_url("admin/js/ultimate-woocomposer-backend.min.js",__FILE__),array('jquery'),'',true);
|
|
// wp_enqueue_style("woocomposer-admin-script");
|
|
}
|
|
}
|
|
}
|
|
} /* end admin scripts */
|
|
function front_scripts($post)
|
|
{
|
|
if(!is_404() && !is_search() && !is_archive()){
|
|
global $post;
|
|
$count = 0;
|
|
if ( NULL !== $post ) {
|
|
$content = $post->post_content;
|
|
$shortcodes = array('woocomposer_product','woocomposer_list','woocomposer_grid','woocomposer_grid_cat','woocomposer_carousel_cat','woocomposer_carousel');
|
|
foreach($shortcodes as $shortcode){
|
|
if(has_shortcode($content, $shortcode)) {
|
|
$count++;
|
|
}
|
|
}
|
|
|
|
wp_register_script('woocomposer-unveil',plugins_url('assets/js/unveil.js',__FILE__),array('jquery'),WOOCOMPOSER_VERSION,true);
|
|
wp_register_script('woocomposer-slick',plugins_url('assets/js/slick.js',__FILE__),array('jquery'),WOOCOMPOSER_VERSION,true);
|
|
wp_register_script('woocomposer-js',plugins_url('assets/js/custom.js',__FILE__),array('jquery','woocomposer-slick'),WOOCOMPOSER_VERSION,true);
|
|
|
|
wp_register_style('woocomposer-front',plugins_url('assets/css/style.css',__FILE__),array(),WOOCOMPOSER_VERSION);
|
|
wp_register_style('woocomposer-front-wooicon',plugins_url('assets/css/wooicon.css',__FILE__),array(),WOOCOMPOSER_VERSION);
|
|
wp_register_style('woocomposer-front-slick',plugins_url('assets/css/slick.css',__FILE__),array(),WOOCOMPOSER_VERSION);
|
|
wp_register_style('woocomposer-animate',plugins_url('assets/css/animate.min.css',__FILE__),array(),WOOCOMPOSER_VERSION);
|
|
|
|
wp_register_script('woocomposer-script',plugins_url('assets/js/woocomposer.min.js',__FILE__),array('jquery'),WOOCOMPOSER_VERSION,true);
|
|
wp_register_style('woocomposer-style',plugins_url('assets/css/woocomposer.min.css',__FILE__),array(),WOOCOMPOSER_VERSION);
|
|
|
|
if(defined('WOOCOMMERCE_VERSION') && version_compare( '2.1.0', WOOCOMMERCE_VERSION, '<' ) && $count !== 0) {
|
|
$ultimate_css = get_option('ultimate_css');
|
|
$bsf_dev_mode = bsf_get_option('dev_mode');
|
|
if($ultimate_css == "enable" && $bsf_dev_mode !== 'enable'){
|
|
wp_enqueue_style("woocomposer-style");
|
|
}
|
|
else {
|
|
wp_enqueue_style("woocomposer-front");
|
|
wp_enqueue_style("woocomposer-front-wooicon");
|
|
wp_enqueue_style("woocomposer-front-slick");
|
|
wp_enqueue_style("woocomposer-animate");
|
|
}
|
|
|
|
$ultimate_js = get_option('ultimate_js');
|
|
wp_enqueue_script('jquery');
|
|
if($ultimate_js == 'enable') {
|
|
wp_enqueue_script("woocomposer-script");
|
|
}
|
|
else {
|
|
wp_enqueue_script("woocomposer-unveil");
|
|
wp_enqueue_script("woocomposer-slick");
|
|
wp_enqueue_script("woocomposer-js");
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}/* end front_scripts */
|
|
}
|
|
new WooComposer;
|
|
add_action('admin_init','init_woocomposer');
|
|
function init_woocomposer()
|
|
{
|
|
$required_vc = '3.7.2';
|
|
if(defined('WPB_VC_VERSION')){
|
|
if( version_compare( $required_vc, WPB_VC_VERSION, '>' )){
|
|
add_action( 'admin_notices', 'woocomposer_admin_notice_for_version');
|
|
add_action( 'network_admin_notices', 'woocomposer_admin_notice_for_version');
|
|
}
|
|
} else {
|
|
add_action( 'admin_notices', 'woocomposer_admin_notice_for_vc_activation');
|
|
add_action( 'network_admin_notices', 'woocomposer_admin_notice_for_vc_activation');
|
|
}
|
|
|
|
}/* end init_addons */
|
|
function woocomposer_admin_notice_for_version()
|
|
{
|
|
$is_multisite = is_multisite();
|
|
$is_network_admin = is_network_admin();
|
|
if(($is_multisite && $is_network_admin) || !$is_multisite)
|
|
echo '<div class="updated"><p>'.__('The','ultimate_vc').' <strong>WooComposer</strong> '.__('plugin requires','ultimate_vc').' <strong>WPBakery Page Builder</strong> '.__('version 3.7.2 or greater.','ultimate_vc').'</p></div>';
|
|
}
|
|
function woocomposer_admin_notice_for_vc_activation()
|
|
{
|
|
$is_multisite = is_multisite();
|
|
$is_network_admin = is_network_admin();
|
|
if(($is_multisite && $is_network_admin) || !$is_multisite)
|
|
echo '<div class="updated"><p>'.__('The','ultimate_vc').' <strong>WooComposer</strong> '.__('plugin requires','ultimate_vc').' <strong>WPBakery Page Builder</strong> '.__('Plugin installed and activated.').'</p></div>';
|
|
}
|
|
}
|
|
|
|
// check the current post for the existence of a short code
|
|
if(!function_exists("has_shortcode")){
|
|
function has_shortcode($shortcode = '') {
|
|
|
|
$post_to_check = get_post(get_the_ID());
|
|
|
|
// false because we have to search through the post content first
|
|
$found = false;
|
|
|
|
// if no short code was provided, return false
|
|
if (!$shortcode) {
|
|
return $found;
|
|
}
|
|
// check the post content for the short code
|
|
if ( stripos($post_to_check->post_content, '[' . $shortcode) !== false ) {
|
|
// we have found the short code
|
|
$found = true;
|
|
}
|
|
|
|
// return our final results
|
|
return $found;
|
|
}
|
|
} |