diff --git a/admin/action-hook.php b/admin/action-hook.php index cef07d69..00a893f2 100644 --- a/admin/action-hook.php +++ b/admin/action-hook.php @@ -1646,7 +1646,7 @@ function wpto_admin_configuration_form_top_free($settings,$current_config_value)
Enable Table on Archive Page. Such as: Archive Page, Tag Page, Taxonomy Page. First Select a table and check [On] to show in shop/archive page.
Enable Table on Shop/Archive/Taxonomy Page. Such as: Archive Page, Tag Page, Taxonomy Page. First Select a table and check [On] to show in shop/archive page.
Notice: Product table will display products according to WooCommerce default query and Advance Search box is not available on Archive page. diff --git a/admin/admin-loader.php b/admin/admin-loader.php index 9112624b..7698cd48 100644 --- a/admin/admin-loader.php +++ b/admin/admin-loader.php @@ -32,13 +32,13 @@ public function __construct(){ $features->run(); - add_action('admin_init', [$this, 'admin_init']); + // add_action('admin_init', [$this, 'admin_init']); } public function admin_init(){ - $tracker = new Tracker(); - $tracker->run(); + // $tracker = new Tracker(); + // $tracker->run(); } } \ No newline at end of file diff --git a/admin/configuration_page.php b/admin/configuration_page.php index aa3b0839..68204b14 100644 --- a/admin/configuration_page.php +++ b/admin/configuration_page.php @@ -1,5 +1,10 @@ is_pro = defined( 'WPT_PRO_DEV_VERSION' ); if($this->is_pro && class_exists( '\WOO_Product_Table' ) ){ $this->pro_version = WPT_PRO_DEV_VERSION; - // $this->license = \WOO_Product_Table::$direct; + $this->handle_license_n_update(); } $this->page_folder_dir = $this->base_dir . 'admin/page/'; $this->topbar_file = $this->page_folder_dir . 'topbar.php'; @@ -47,12 +47,14 @@ public function configure_page_render() } public function admin_menu() { - add_submenu_page( $this->main_slug, esc_html__( 'Configuration', 'woo-product-table' ), esc_html__( 'Configure', 'woo-product-table' ), WPT_CAPABILITY, 'woo-product-table-config', [$this, 'configure_page_render'] ); - add_submenu_page( $this->main_slug, esc_html__( 'Tutorials', 'woo-product-table' ), __( 'Tutorial', 'woo-product-table' ), WPT_CAPABILITY, 'wpt-live-support', [$this, 'html_tutorial_page'] ); + $proString = $this->is_pro ? esc_html__( ' Pro', 'woo-product-table' ) : ''; + add_submenu_page( $this->main_slug, esc_html__( 'Configuration ', 'woo-product-table' ) . $proString, esc_html__( 'Configure', 'woo-product-table' ), WPT_CAPABILITY, 'woo-product-table-config', [$this, 'configure_page_render'] ); + add_submenu_page( $this->main_slug, esc_html__( 'Tutorials', 'woo-product-table' ). $proString, __( 'Tutorial', 'woo-product-table' ), WPT_CAPABILITY, 'wpt-live-support', [$this, 'html_tutorial_page'] ); - add_submenu_page( $this->main_slug, esc_html__( 'Browse Plugins', 'woo-product-table' ), __( 'Browse Plugins', 'woo-product-table' ), WPT_CAPABILITY, 'wpt-browse-plugins',[$this, 'browse_plugins_html'] ); - add_submenu_page( $this->main_slug, esc_html__( 'Issue Submit', 'woo-product-table' ), __( 'Issue Submit', 'woo-product-table' ), WPT_CAPABILITY, 'https://github.com/codersaiful/woo-product-table/issues/new' ); + add_submenu_page( $this->main_slug, esc_html__( 'Browse Plugins', 'woo-product-table' ). $proString, __( 'Browse Plugins', 'woo-product-table' ), WPT_CAPABILITY, 'wpt-browse-plugins',[$this, 'browse_plugins_html'] ); + add_submenu_page( $this->main_slug, esc_html__( 'Addons', 'woo-product-table' ). $proString, __( 'Addons', 'woo-product-table' ), WPT_CAPABILITY, 'wpt-addons-list',[$this, 'addons_list_html'] ); + add_submenu_page( $this->main_slug, esc_html__( 'Issue Submit', 'woo-product-table' ). $proString, __( 'Issue Submit', 'woo-product-table' ), WPT_CAPABILITY, 'https://github.com/codersaiful/woo-product-table/issues/new' ); if( ! $this->is_pro ){ add_submenu_page( $this->main_slug, esc_html__( 'Try Pro Version', 'woo-product-table' ), esc_html__( 'Try Pro Version', 'woo-product-table' ), WPT_CAPABILITY, 'https://try.wooproducttable.com/wp-admin/?utm=PluginDashboard' ); add_submenu_page( $this->main_slug, esc_html__( 'GET PRO VERSION', 'woo-product-table' ), __( 'Get Pro', 'woo-product-table' ), WPT_CAPABILITY, 'https://wooproducttable.com/pricing/' ); @@ -120,6 +122,15 @@ public function browse_plugins_html() } include $this->page_folder_dir . 'browse-plugins.php'; } + public function addons_list_html() + { + $this->topbar_sub_title = __( 'Addons','woo-product-table' ); + include $this->topbar_file; + if( ! $this->is_pro ){ + include $this->page_folder_dir . 'premium-link-header.php'; + } + include $this->page_folder_dir . 'addons-list.php'; + } public function html_tutorial_page() { //In future, I will make it like min max plugin - which I already did @@ -131,4 +142,85 @@ public function html_tutorial_page() } include $this->page_folder_dir . 'tutorials.php'; } + + /** + * If will work, when only found pro version + * + * @since 3.4.3.0 + * @author Saiful Islam + * + * @return void + */ + public function handle_license_n_update() + { + $this->license_key = get_option( 'wpt_pro_license_key' ); + if(empty($this->license_key)) return; + $this->license_data_key = 'wpt_license_data'; + $this->license_status_key = 'wpt_pro_license_status'; + $this->license_status = get_option( $this->license_status_key ); + $this->license_data = get_option($this->license_data_key); + /** + * Actually if not found lisen data, we will return null here + * + * @since 3.4.3.0 + * @author Saiful Islam + */ + if( empty( $this->license_status ) || empty( $this->license_data ) ) return; + + $expires = isset($this->license_data->expires) ? $this->license_data->expires : ''; + $this->item_id = isset($this->license_data->item_id) ? $this->license_data->item_id : ''; + if('lifetime' == $expires) return; + $exp_timestamp = strtotime($expires); + /** + * keno ami ei timestamp niyechi. + * asole expire a zodi faka ase, tahole ta 1 jan, 1970 as strtotime er output. + * + * ar jehetu amora 2010 er por kaj suru korechi. tai sei expire date ba ager date asar kOnO karonoi nai. + * tai zodi 2012 er kom timestamp ase amora return null kore debo. + * za already diyechi: if( $exp_timestamp < $year2010_timestamp ) return; by this line. niche follow korun. + */ + $year2010_timestamp = strtotime('2023-09-08 23:59:59'); + if( $exp_timestamp < $year2010_timestamp ) return; + + //ekhon amora bortoman date er sathe tulona korbo + if($exp_timestamp < time()){ + + $this->exp_timestamp = $exp_timestamp; + // var_dump($this->license_data); + if($this->license_status == 'valid'){ + $this->invalid_status = 'invalid'; + $this->license_data->license = $this->invalid_status; + update_option( $this->license_status_key, $this->invalid_status ); + update_option( $this->license_data_key, $this->license_data ); + + + } + add_action( 'admin_notices', [$this, 'renew_license_notice'] ); + } + + + } + + public function renew_license_notice() + { + + if(empty($this->item_id)) return; + $wpt_logo = WPT_ASSETS_URL . 'images/logo.png'; + $expired_date = date( 'd M, Y', $this->exp_timestamp ); + $link_label = __( 'Renew License', 'wpt_pro' ); + $link = "https://codeastrology.com/checkout/?edd_license_key={$this->license_key}&download_id={$this->item_id}"; + $message = esc_html__( ' Renew it to get latest update.', 'wpt_pro' ) . ''; + ob_start(); + ?> + + + + Your License of Woo Product Table pro has been expired at + %1$s %3$s + + + + .wpt-6539 .wpt-element.wpt-element-56ceac07>.wpt-widget-container-flued { + padding: 20px 0px 35px 0px; + } + + .wpt-column.wpt-col-100, + .wpt-column[data-col="100"] { + width: 100%; + } + + .wpt-widget-wrap>.wpt-element { + width: 100%; + } + + .wpt-element { + --widgets-spacing: 20px; + } + + .wpt-widget { + position: relative; + } + + .wpt-column-gap-default>.wpt-column>.wpt-element-populated { + padding: 10px; + } + + .wpt-6539 .wpt-element.wpt-element-727a4d7a { + text-align: center; + } + + .elementor *, + .elementor :after, + .elementor :before { + -webkit-box-sizing: border-box; + box-sizing: border-box; + } + + .home-docs .col-md-4 { + display: flex; + transition: transform 0.3s ease; + } + .home-docs .col-md-4:hover { + transform: scale(1.01); + } + + .home-docs .categories_guide_item { + width: 100%; + } + + .wpt-element .wpt-widget-container-flued { + -webkit-transition: background .3s, border .3s, border-radius .3s, -webkit-box-shadow .3s; + transition: background .3s, border .3s, border-radius .3s, -webkit-box-shadow .3s; + -o-transition: background .3s, border .3s, border-radius .3s, box-shadow .3s; + transition: background .3s, border .3s, border-radius .3s, box-shadow .3s; + transition: background .3s, border .3s, border-radius .3s, box-shadow .3s, -webkit-box-shadow .3s; + } + + .wpt-widget-container-flued .tuts-box-wrapper { + display: flex; + gap: 25px; + flex-wrap: wrap; + } + + .row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + } + + .col-md-4 { + flex: 0 0 auto; + width: 380px; + } + + .fadeInUp { + animation-name: fadeInUp; + animation-duration: 0.6s !important; + } + + .categories_guide_item { + border-radius: 0; + background: #fff; + box-shadow: 0 50px 120px 0 rgba(4, 73, 89, 0.08); + padding: 25px 25px 35px 25px; + display: flex; + flex-direction: column; + flex-wrap: wrap; + } + + /* .categories_guide_item .doc_tag_title { + margin-bottom: 24px; + } */ + + .categories_guide_item .tag_list { + margin-bottom: 42px; + margin-top: 22px; + } + + .tag_list li { + margin-top: 15px; + } + + .tag_list li a { + font-size: 16px; + color: var(--p_color); + line-height: 22px; + transition: color 0.2s linear; + display: flex; + } + + .list-unstyled { + padding-left: 0; + list-style: none; + } + + + .categories_guide_item img { + margin-bottom: 10px; + height: 34px !important; + } + + .categories_guide_item .doc_tag_title h4 { + margin-bottom: 0; + } + + .doc_tag_title h4 { + font-size: 24px; + line-height: 26px; + margin-bottom: 20px; + } + + /*! elementor - v3.7.2 - 21-08-2022 */ + .wpt-widget-text-editor.wpt-drop-cap-view-stacked .wpt-drop-cap { + background-color: #818a91; + color: #fff + } + + .wpt-widget-text-editor.wpt-drop-cap-view-framed .wpt-drop-cap { + color: #818a91; + border: 3px solid; + background-color: transparent + } + + .wpt-widget-text-editor:not(.wpt-drop-cap-view-default) .wpt-drop-cap { + margin-top: 8px + } + + .wpt-widget-text-editor:not(.wpt-drop-cap-view-default) .wpt-drop-cap-letter { + width: 1em; + height: 1em + } + + .wpt-widget-text-editor .wpt-drop-cap { + float: left; + text-align: center; + line-height: 1; + font-size: 50px + } + + .wpt-widget-text-editor .wpt-drop-cap-letter { + display: inline-block + } + + .home-docs .container-flued>.row { + display: flex; + align-items: stretch; + gap: 25px; + } + + .home-docs .col-md-4 a { + text-decoration: none; + margin-top: auto; + } + + .home-docs .col-md-4 a.wpt-button.reset { + text-decoration: none; + margin-top: auto; + padding: 5px 10px; + text-align: center; + text-transform: none; + } + + h2.wpt-heading-title.wpt-size-default { + font-size: 3em; + } + + a.get-addons-btn { + width: fit-content; + } + .wpt-addons-desc p { + font-size: 16px; + line-height: 1.6; + } + + + + + + + + + + + + + + + Group Products By Category + + + + Gone are the days of scrolling through an endless list of products β now you can effortlessly group products based on their respective categories, creating a clear hierarchy that helps customers navigate and explore your offerings more efficiently. + + + + + Get it now + + + + + + + + + Simple and Variation Products + + + + This will help you to display variable and simple products together. This plugin will convert every variation as a row and display it among the simple products.Now customers will get a more visual presentation. + + + + + Get it now + + + + + + + + Comming Soon + + + More add-ons for Woo Product Table have been coming... + + + + + + + + + + + \ No newline at end of file diff --git a/admin/page/configure.php b/admin/page/configure.php index 9cbbe93d..0d61f2db 100644 --- a/admin/page/configure.php +++ b/admin/page/configure.php @@ -50,14 +50,15 @@ function ($field) { - + + - + - Running Discount - Enjoy all awesome feature. + BLACK FRIDAY + Checkout our Offer. - Get Premium Offer + Get Offer and Bundle - + Money Back Guarantee 100% No-Risk 30-Days Money Back Guarantee @@ -131,7 +131,7 @@ text-transform: uppercase; letter-spacing: -0.025em; line-height: 1; - color: #c0f !important; + color: #FFC107 !important; } .wpt-premium-notice-panel .wpt-pic-col p { font-size: 16px; diff --git a/admin/page/tutorials.php b/admin/page/tutorials.php index 80596ec1..dd0b631a 100644 --- a/admin/page/tutorials.php +++ b/admin/page/tutorials.php @@ -82,14 +82,14 @@ flex-wrap: wrap; } - .categories_guide_item .doc_tag_title { + /* .categories_guide_item .doc_tag_title { margin-bottom: 24px; - } - + } */ +/* .categories_guide_item .tag_list { margin-bottom: 42px; margin-top: 22px; - } + } */ .tag_list li { margin-top: 15px; @@ -225,10 +225,6 @@ How to create WooCommerce Product Table? - - - Where is my plugin purchase code? (Only for CodeCanyon user) - Get Automatic Updates from CodeCanyon (Only for CodeCanyon user) diff --git a/assets/css/admin.css b/assets/css/admin.css index 27fb4978..255a39d3 100644 --- a/assets/css/admin.css +++ b/assets/css/admin.css @@ -1577,7 +1577,7 @@ form#wpt-main-configuration-form #stick_on_scroll-on { border-radius: unset; z-index: 99999; display: none; - top: 80px; + top: 150px; left: unset; margin: 0; opacity: 1; @@ -2227,6 +2227,66 @@ div.wpt-content p.wpt-issue-submit a:hover { align-items: center; flex: 1 100%; } + +/********Configure Tab Area Start*********/ + +.wpt_tab_content.tab-content .wpt-section-panel { + margin: 0; + margin-top: 15px; +} + +.wpt_tab_content.tab-content .wpt-section-panel .wpt-table-header-inside { + padding: 0; +} + +.wpt_tab_content.tab-content .wpt-section-panel table.wpt-my-table tr.divider-row>td { + padding-top: 2px !important; +} + +.wpt_tab_content.tab-content .wpt-configure-tab-wrapper.wpt-section-panel { + padding: 0 32px; + margin-top: 0; +} + +.wpt_tab_content.tab-content .wpt-configure-tab-wrapper.wpt-section-panel a.tab-button.wpt-button { + border: 1px solid #ddd; +} + +.wpt-configure-tab-wrapper.wpt-section-panel a { + color: black; + background: white; + box-shadow: 1px 1px 8px 0 rgba(170, 157, 137, 0.14); + border: 1px solid white; + border-right-color: #cececea3; + display: inline-block; + margin-bottom: 2px; +} +.wpt-configure-tab-wrapper.wpt-section-panel a:last-child{ + border-right-color: white; +} + +.wpt-configure-tab-wrapper.wpt-section-panel a.active { + background-color: #4caf50; + color: white; + border: 1px solid #4caf50; +} + +.topbar-fixed-on-scroll-main-element .wpt-configure-tab-wrapper.wpt-section-panel.backup { + position: fixed; + top: 130px; + z-index: 999; + background: white !important; + width: 87%; + display: inline-flex; + clear: both; + box-sizing: border-box; + box-shadow: 0px 9px 13px 0 #0000004a; +} +/********Configure Tab Area End*********/ + + + + .wpt-plugin-recommend-area .anywhere-notice.ca-notice.notice-success[data-notice_id="black-friday-22"]:hover { background: #007694; @@ -2308,7 +2368,61 @@ span.wpt-help-icon.wpt-help-focused{ } } +.wpt-renew-license-notice>div { + background: white; + padding: 10px 15px; + display: block !important; + clear: both; + border-left: 5px solid #d00; + margin: 13px 0 0 0; + box-sizing: border-box; + height: max-content; + line-height: 30px; +} +.wpt-renew-license-notice { + display: block; + clear: both; + height: max-content; + background: transparent; +} +.error.wpt-renew-license-notice { + border: 0 none !important; + padding: 0; +} +.wpt-renew-license-notice a { + background: #E91E63; + border-color: #E91E63; + text-transform: uppercase !important; + padding: 6px 10px !important; + border-left: 27px solid #7a052d; + position: relative; + color: white; + text-decoration: none; + white-space: nowrap; +} +.wpt-renew-license-notice a:hover { + + background: #4caf50; + border-color: #38823b; + text-transform: uppercase !important; + padding: 6px 10px !important; + border-left: 27px solid #38823b; + position: relative; +} +.wpt-renew-license-notice a::before { + content: "β"; + position: absolute; + top: -2px; + left: -20px; + color: rgb(255, 255, 255); +} +img.wpt-license-brand-logo { + width: 25px; + height: auto; + display: inline-block; + margin-bottom: -8px; +} a.wpt-doc-lick{ text-decoration: none; padding: 5px; @@ -2343,4 +2457,48 @@ div.wpt_tab_content table th { } .wpt_column_setting_extra>div>label { display: inline !important; +} + +.fieldwrap .anywhere-notice .ca-msg-text p { + display: none; +} + +.fieldwrap .anywhere-notice.ca-notice.notice-offer .ca-msg-text p.ca-links-collection { + display: block; +} + +.fieldwrap .anywhere-notice.ca-notice.notice-offer .ca-msg-text h1 { + color: red; +} + +.fieldwrap .anywhere-notice.ca-notice.notice-offer .ca-msg-text p.ca-links-collection a { + background: #4CAF50; +} + + + +/* black Friday offer */ +.notice.ca-notice.notice-offer[data-notice_id="wpt_BLACKFRIDAY2023_offer"] {background: black;color: #607D8B;} +.notice.ca-notice.notice-offer[data-notice_id="wpt_BLACKFRIDAY2023_offer"] a.ca-logo-link img, +.notice.ca-notice.notice-offer[data-notice_id="wpt_BLACKFRIDAY2023_offer"] a.ca-logo-link img, +.notice.ca-notice.notice-offer[data-notice_id="wpt_BLACKFRIDAY2023_offer"] img, +.notice.ca-notice.notice-offer[data-notice_id="wpt_BLACKFRIDAY2023_offer"] a { + border: 0 none !important; +} +.notice.ca-notice.notice-offer[data-notice_id="wpt_BLACKFRIDAY2023_offer"] .ca-msg-text h1 { + color: #ff0000; + font-size: 19px; +} +.notice.ca-notice.notice-offer[data-notice_id="wpt_BLACKFRIDAY2023_offer"] .ca-msg-text p>b:last-child { + color: red; +} +.notice.ca-notice.notice-offer[data-notice_id="wpt_BLACKFRIDAY2023_offer"] .ca-msg-text p>b>i { + color: #4CAF50; +} +.notice.ca-notice.notice-offer[data-notice_id="wpt_BLACKFRIDAY2023_offer"] .ca-msg-text p { + padding-bottom: 5px; +} + +.fieldwrap .anywhere-notice.ca-notice.notice-offer .ca-msg-text p.ca-links-collection { + display: none; } \ No newline at end of file diff --git a/assets/css/new-admin.css b/assets/css/new-admin.css index 779eade9..4051198f 100644 --- a/assets/css/new-admin.css +++ b/assets/css/new-admin.css @@ -28,6 +28,21 @@ body .wpt-header, body .wpt-content { display: flow-root; /* flex-basis: 100%; */ } +.wpt-header.wpt-clearfix.topbar-fixed-on-scroll { + position: fixed; + width: 100%; + background: white; + z-index: 999; + box-shadow: 0 4px 10px #0000001a; +} +@media (max-width: 779px) { + .wpt-header.wpt-clearfix.topbar-fixed-on-scroll { + top: 0; + } +} +.topbar-fixed-on-scroll-main-element{ + margin-top: 200px; +} .wpt-clearfix:before, .wpt-clearfix:after { display: table; content: " "; diff --git a/assets/css/override-root.css b/assets/css/override-root.css index e90cd4f4..63ffbbbf 100644 --- a/assets/css/override-root.css +++ b/assets/css/override-root.css @@ -90,6 +90,7 @@ button.single_add_to_cart_button >span.wpt_ccount i.animate-spin, a.button.wpt_w color: var(--wpt_primary); } +.wpt_buy_link span.wpt_ccount, a.button.product_type_simple.add_to_cart_button.ajax_add_to_cart>span.wpt_ccount, a.product_type_variation>span.wpt_ccount, button.single_add_to_cart_button >span.wpt_ccount, a.button.wpt_woo_add_cart_button>span.wpt_ccount { diff --git a/assets/css/universal.css b/assets/css/universal.css index 218e5198..9c8e8a9d 100644 --- a/assets/css/universal.css +++ b/assets/css/universal.css @@ -384,11 +384,11 @@ div.wpt_column_sort table#wpt_table.wpt_product_table tr>th.wpt_check::after{ display: none; } div.wpt_column_sort table#wpt_table.wpt_product_table tr>th.this_column_sorted[data-sort_type="ASC"]::after{ - content: '\f161'; + content: '\e823'; opacity: 1; } div.wpt_column_sort table#wpt_table.wpt_product_table tr>th.this_column_sorted[data-sort_type="DESC"]::after{ - content: '\f160'; + content: '\e822'; opacity: 1; } body.wpt_table_body .wpt-wrap table thead tr.wpt_table_header_row th i{ @@ -509,6 +509,7 @@ a.button.wpt_woo_add_cart_button>span.wpt_ccount i.animate-spin::before{ padding: 0; } +.wpt_buy_link span.wpt_ccount, a.button.product_type_simple.add_to_cart_button.ajax_add_to_cart>span.wpt_ccount, a.product_type_variation>span.wpt_ccount, button.single_add_to_cart_button>span.wpt_ccount, @@ -1819,4 +1820,9 @@ td.wpt-replace-td-in-tr.wpt-mobile-label-show a.wpt_product_title_in_td{ body[class^="wpt-"]:before, body[class*=" wpt-"]:before { display: none; -} \ No newline at end of file +} + +.inner-available .item_inside_cell.wpt_category, +.wpt_product_title .item_inside_cell.wpt_category { + display: inline-block; +} diff --git a/assets/images/pro-features/pf_table_configuration.png b/assets/images/pro-features/pf_table_configuration.png index cd052a54..9c9c8720 100644 Binary files a/assets/images/pro-features/pf_table_configuration.png and b/assets/images/pro-features/pf_table_configuration.png differ diff --git a/assets/images/round-logo.png b/assets/images/round-logo.png new file mode 100644 index 00000000..225bfc51 Binary files /dev/null and b/assets/images/round-logo.png differ diff --git a/assets/js/admin.js b/assets/js/admin.js index 831a97a3..e49b2e07 100644 --- a/assets/js/admin.js +++ b/assets/js/admin.js @@ -340,7 +340,7 @@ jQuery.fn.extend({ var prevClass = prev.attr('class'); var next = thisElement.next(); var nextClass = next.attr('class'); - console.log(target); + //console.log(typeof prev, typeof next, typeof thisElement); if( target == 'next' && typeof next.html() !== 'undefined'){ thisElement.before(''+next.html()+''); @@ -918,7 +918,7 @@ jQuery.fn.extend({ */ var colSetsLen = $('form#wpt-main-configuration-form').length; - console.log(colSetsLen); + if( colSetsLen > 0 ){ var saveChangeText = 'Save'; @@ -929,8 +929,9 @@ jQuery.fn.extend({ $('#wpt-main-configuration-form').append(btnHtml); $(window).on('scroll',function(){ - console.log(222222); + let targetElement = $('.float-btn'); + let topbarElement = $('div.wpt-header.wpt-clearfix'); // if(targetElement.length < 1) return; let bodyHeight = $('#wpbody').height(); @@ -953,7 +954,13 @@ jQuery.fn.extend({ }else{ targetElement.removeClass('stick_on_scroll-on'); } - + if(scrollTop > 90){ + configFormElement.addClass('topbar-fixed-on-scroll-main-element'); + topbarElement.addClass('topbar-fixed-on-scroll'); + }else{ + configFormElement.removeClass('topbar-fixed-on-scroll-main-element'); + topbarElement.removeClass('topbar-fixed-on-scroll'); + } if(scrollTop > 100 && colSetsLen > 0){ targetElement.attr('id','stick_on_scroll-on'); }else if(colSetsLen > 0){ @@ -976,7 +983,7 @@ jQuery.fn.extend({ */ var status = $('#original_post_status').val(); - console.log(status, postColSetsLen); + if( postColSetsLen > 0 && status === 'publish'){ var saveChangeText = $('button.button[name="wpt_post_submit"]').text(); //Save Change var myHtml = ''; @@ -984,7 +991,7 @@ jQuery.fn.extend({ myHtml += ''; $('#wpt_configuration_form').append(myHtml); $(window).on('scroll',function(){ - console.log(88888888888); + let targetElement = $('.stick_on_scroll'); if(targetElement.length < 1) return; @@ -1009,7 +1016,7 @@ jQuery.fn.extend({ }else{ targetElement.removeAttr('id'); } - + if(scrollTop > 100 && postColSetsLen > 0){ targetElement.attr('id','stick_on_scroll-on'); }else if(postColSetsLen > 0){ @@ -1024,6 +1031,66 @@ jQuery.fn.extend({ + /** + * Tab Area Handle + */ + configureTabAreaAdded('#wpt-main-configuration-form'); //Specially for Configure Page + configureTabAreaAdded('.fieldwrap.wpt_result_footer.ultraaddons.pro_version'); //From inside on Edit Table + function configureTabAreaAdded( mainSelector = '#wpt-main-configuration-form' ){ + var tabSerial = 0; + var tabArray = new Array(); + var tabHtml = "" + var tabArea = $(mainSelector + ' .wpt-configure-tab-wrapper'); + if(tabArea.length < 1){ + $(mainSelector).prepend(''); + tabArea = $(mainSelector + ' .wpt-configure-tab-wrapper'); + } + var sectionPanel = $(mainSelector + ' div.wpt-section-panel'); + sectionPanel.each(function(index, content){ + + let table = $(this).find('table'); + let tableCount = table.length; + if(tableCount > 0){ + + let firstTable = table.first(); + let tableId = $(this).attr('id'); + let tableTitle = firstTable.find('thead tr th:first-child h3').text(); + tabArray[tableId] = tableTitle; + + if(tabSerial !== 0){ + $(this).hide(); + tabHtml += "" + tableTitle + "" + }else{ + $(this).addClass('active'); + tabHtml += "" + tableTitle + "" + } + + tabSerial++; + + } + + }); + if(tabSerial > 1){ + tabHtml += "Show All"; + tabArea.html(tabHtml); + } + + $(document.body).on('click','.wpt-configure-tab-wrapper a.tab-button',function(e){ + e.preventDefault(); + $('.wpt-configure-tab-wrapper a').removeClass('active'); + $(this).addClass('active'); + $(mainSelector + ' div.wpt-section-panel.active').hide(); + let target = $(this).attr('href'); + if(target == '#show-all'){ + sectionPanel.fadeIn(); + return; + } + $(mainSelector + ' ' + target).fadeIn().addClass('active'); + + }); + } + + })(jQuery); /** diff --git a/assets/js/custom.js b/assets/js/custom.js index bad561a1..400fb40a 100644 --- a/assets/js/custom.js +++ b/assets/js/custom.js @@ -103,7 +103,7 @@ jQuery(function($) { var thisButton = $(this); var thisPagination = thisButton.closest('.wpt_my_pagination'); var page_number = $(thisButton).text(); - // console.log(page_number) + var table_id = thisPagination.data('table_id'); var data = { @@ -137,14 +137,6 @@ jQuery(function($) { var targetTableArgs = targetTable.attr( 'data-data_json' ); targetTableArgs = JSON.parse(targetTableArgs); - // let newArgs = $(this).parents('mypagi').attr('myjson'); - // // console.log(typeof newArgs, newArgs); - // if( typeof newArgs !== 'undefined' && typeof newArgs === 'string' ){ - // targetTableArgs = JSON.parse(newArgs); - // }else{ - // targetTableArgs = JSON.parse(targetTableArgs); - // } - // // console.log(targetTableArgs); var targetTableBody = $('#table_id_' + temp_number + ' table#wpt_table tbody'); @@ -179,7 +171,6 @@ jQuery(function($) { }else{ return; } - // console.log(targetTableArgs,data); $.ajax({ @@ -307,7 +298,7 @@ jQuery(function($) { } return temp_cjson; } - //console.log(config_json); + var footer_cart = config_json.footer_cart; var footer_cart_size = config_json.footer_cart_size; var footer_possition = config_json.footer_possition; @@ -407,7 +398,6 @@ jQuery(function($) { }); if('undefined' !== typeof finalImgObject){ - console.log(fullObject); final_image_url = finalImgObject.full_src; image_width = finalImgObject.full_src_w; IMG_Generator(thisImg,final_image_url, image_width); @@ -996,7 +986,12 @@ jQuery(function($) { targetAttributeObject['product_id'] = product_id; targetAttributeObject['temp_number'] = temp_number; targetAttributeObject['table_id'] = temp_number; - $(document.body).trigger('wpt_changed_variations',targetAttributeObject); + try{ + console.log(targetAttributeObject); + $(document.body).trigger('wpt_changed_variations',targetAttributeObject); + }catch(error){ + console.log("Variation ID not founded. To see error, Please console.log(error) here."); + } } else { //Return to Previous HTML Image @@ -1159,6 +1154,7 @@ jQuery(function($) { var currentAddToCartSelector = $('#table_id_' + temp_number + ' #product_id_' + product_id + ' .wpt_action a.wpt_woo_add_cart_button'); var currentCustomMessage = $('#table_id_' + temp_number + ' #product_id_' + product_id + ' .wpt_message .message').val(); + var additional_json = thisRow.attr('additional_json'); var currentVariaionId = thisRow.attr('data-variation_id');//currentAddToCartSelector.data('variation_id'); var currentVariaion; @@ -1181,6 +1177,7 @@ jQuery(function($) { variation_id: currentVariaionId, variation: currentVariaion, wpt_custom_message: currentCustomMessage, + additional_json:additional_json }; var items = $('#table_id_' + temp_number + ' tr#product_id_' + product_id).attr('data-quantity'); items = parseFloat(items); @@ -1209,7 +1206,7 @@ jQuery(function($) { showAlert(config_json.please_choose_items); return false; } - + uncheckAllCheck(temp_number); currentAllSelectedButtonSelector.html(add_cart_text + ' [ ' + config_json.loading_more_text + ' ]'); $.ajax({ @@ -1480,7 +1477,7 @@ jQuery(function($) { //Generating Custom Field/Meqa Query for Query Args inside wp_query var final_custom_field = {}; Object.keys(custom_field).forEach(function(key,bbb){ - console.log(key,bbb); + if(Object.keys(custom_field[key]).length > 0){ //custom_field[key] !== null && var compare = multiple_attr[key]; @@ -1571,7 +1568,7 @@ jQuery(function($) { if( actionType === 'query' ){ $('#wpt_load_more_wrapper_' + temp_number).remove(); targetTableBody.html( data ); - //console.log(data,data.match('wpt_product_not_found')); + $('#table_id_' + temp_number + ' .wpt_table_tag_wrapper .wpt_product_not_found').remove(); if(data.match('wpt_product_not_found')){ @@ -1691,14 +1688,6 @@ jQuery(function($) { }); - $(document.body).on('click','h1.entry-title-BACKUP',function(){ - var temp_number = '19541'; - var newjsonData = $('#table_id_' + temp_number + ' mypagi').attr('myjson'); - var thisNewPagiWrappers = $('#table_id_' + temp_number + ' .wpt_table_pagination').attr('data-whole_data'); - // console.log('newjsonData',JSON.parse(newjsonData)); - console.log('thisNewPagiWrappers',JSON.parse(thisNewPagiWrappers)); - - }); function loadPaginationLinks($data,temp_number){ var targetTable = $('#table_id_' + temp_number + ' table#wpt_table'); @@ -1728,6 +1717,16 @@ jQuery(function($) { */ $('body').on('change','select.filter_select',function(){ var temp_number = $(this).data('temp_number'); + + /** + * I did it for specially Variable page's variation table. + * If found .wpt-variable-product-options then then we will remove auto current page filter + * because, this time we will load from page reload. + */ + var paginatedMiniFilter = $('.wpt-variable-product-options').length; + if( paginatedMiniFilter > 0 ){ + return; + } filterTableRow(temp_number); }); @@ -1752,7 +1751,7 @@ jQuery(function($) { //Checking FilterBox var filterBoxYesNo = $('#table_id_' + temp_number + ' .wpt-mini-filter').html(); - // console.log(filterBoxYesNo); + /** * Uncheck All, If any change on filter button * @version 2.0 @@ -1763,7 +1762,7 @@ jQuery(function($) { var serial = 0; $('#table_id_' + temp_number + ' .wpt-mini-filter select.filter_select').each(function(){ var currentClass = $(this).val(); - + if(currentClass !==''){ ClassArray[serial] = '.' + currentClass; serial++; @@ -1781,12 +1780,13 @@ jQuery(function($) { if(foundRowCount > 0){ $('.wpt-my-pagination-' + temp_number).hide();//wpt_filter_reset } + //if not found available from before, we will remove it first. + $('#table_id_' + temp_number + ' table#wpt_table tbody tr.product-not-found-tr').remove(); if(foundRowCount < 1){ let newRotHtml = "" + notFundMsg + ""; $('#table_id_' + temp_number + ' table#wpt_table tbody').append(newRotHtml) - }else{ - $('#table_id_' + temp_number + ' table#wpt_table tbody tr.product-not-found-tr').remove(); } + //here was remove notFound on else. we remove it becuase, we have added at the begining always if( filterBoxYesNo ){ @@ -1829,7 +1829,7 @@ jQuery(function($) { $('body').on('change', '.wpt_row input.input-text.qty.text', inputBoxChangeHandle); function inputBoxChangeHandle() { - // console.log(2222); + var temp_number = $(this).parents('tr.wpt_row').data('temp_number'); var Qty_Val = $(this).val(); var product_id = $(this).parents('tr').data('product_id'); @@ -1842,10 +1842,11 @@ jQuery(function($) { $( thisRow + ' input.input-text.qty.text').val(Qty_Val); // input.input-text.qty.text $( thisRow ).attr('data-quantity', Qty_Val); - $( thisRow + ' a.wpt_woo_add_cart_button').attr('data-quantity', Qty_Val); - $( thisRow + ' a.add_to_cart_button').attr('data-quantity', Qty_Val); + $( thisRow + ' .wpt_action a.wpt_woo_add_cart_button').attr('data-quantity', Qty_Val); + $( thisRow + ' .wpt_action a.add_to_cart_button').attr('data-quantity', Qty_Val); + $( thisRow + ' .wpt_buy_link a.add_to_cart_button').attr('data-quantity', Qty_Val); var Item_URL = '?add-to-cart=' + product_id + '&quantity=' + Qty_Val; - $( thisRow + ' a.add_to_cart_button').attr('href', Item_URL); + $( thisRow + ' .wpt_action a.add_to_cart_button').attr('href', Item_URL); var targetTotalSelector = $('#table_id_' + temp_number + ' .product_id_' + product_id + ' .wpt_total_item.total_general'); @@ -1904,7 +1905,6 @@ jQuery(function($) { upateGlobalCheckboxCount(); function upateGlobalCheckboxCount(){ - // console.log('upateGlobalCheckboxCount()'); var add_cart_text = $('.wpt-wrap').data('basic_settings').add_to_cart; var currentAllSelectedButtonSelector = $('body a.wpt-global-added-to-cart>span'); @@ -2008,21 +2008,6 @@ jQuery(function($) { updateCheckBoxCount(temp_number); }); -// $(document).on('wpt_count_updated',function(aaa,args){ -// //console.log(args); -// var btn = args['button_object']; -// var itemAmount = args['itemAmount']; -// var button_text = args['button_text']; -// var custom_text = 'Pay now'; -// itemAmount = parseInt( itemAmount ); -// if( itemAmount > 0 ){ -// btn.html( custom_text); -// //btn.html( custom_text + ' [ ' + itemAmount + ' ' + args['itemText'] + ' ]');; -// }else{ -// btn.html( button_text + ' [ ' + itemAmount + ' ' + args['itemText'] + ' ]'); -// } -// -// }); $('body').on('click', 'input.wpt_check_universal,input.enabled.wpt_tabel_checkbox.wpt_td_checkbox', function() { //wpt_td_checkbox var temp_number = $(this).data('temp_number'); @@ -2217,7 +2202,7 @@ jQuery(function($) { var temp_number = $(this).data('temp_number'); var config_json = getConfig_json( temp_number ); var key = $(this).data('key'); - //console.log(key); + var label = $(this).data('label'); var taxArray = new Array(); var taxValArray = new Array(); @@ -2301,12 +2286,11 @@ jQuery(function($) { ]; var number_class = $('td'+target_class + '>.text_with_number');//.find('.text_with_number'); var content_type = 'normal'; - if(target_class.search('.wpt_price') != -1){ - content_type = 'price'; - }else if(number_class.length > 0 || target_class.search('.wpt_serial_number') != -1 || target_class.search('.wpt_product_id') != -1 || target_class.search('.wpt_total') != -1 ){ + if(number_class.length > 0 || target_class.search('.wpt_serial_number') != -1 || target_class.search('.wpt_product_id') != -1 || target_class.search('.wpt_total') != -1 ){ content_type = 'number'; + }else if(target_class.search('.wpt_price') != -1){ + content_type = 'price'; } - //wpt_serial_number var sort_type = $(this).attr('data-sort_type'); @@ -2339,7 +2323,7 @@ jQuery(function($) { var contentHTMLArray = []; var currentColumnObject = $(target_table_wrapper_id + ' table tbody td' + target_class); - // console.log(currentColumnObject); + currentColumnObject.each(function(index){ @@ -2567,15 +2551,20 @@ jQuery(function($) { var form = $(fullSelcetor); var title = $(this).parents('tr').data('title'); + var additional_json = $(this).parents('tr').attr('additional_json'); var url = form.attr('action');//ajax_url;// let eachProductData = 'product_id=' + product_id + '&' + form.serialize(); var obj = {}; + console.log(eachProductData); eachProductData.replace(/([^=&]+)=([^&]*)/g, function(m, key, value) { obj[decodeURIComponent(key)] = decodeURIComponent(value); }); - + if(additional_json !== ''){ + obj['additional_json'] = additional_json; + } + products_data[product_id] = obj; diff --git a/changelog.txt b/changelog.txt index 1516fbe4..5bfde95f 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,6 +1,9 @@ == Changelog == -== 3.3.6.1 +== 3.3.6.1 == + * Bug Fixed + +== 3.3.6.1 == * New language added - Croatian * Add Collapse/Expand option on Design and configure page diff --git a/framework/handle.php b/framework/handle.php index 3995c975..1dc7cff7 100644 --- a/framework/handle.php +++ b/framework/handle.php @@ -50,11 +50,13 @@ public static function fail() */ public static function display_notice() { - if(time() > 1692167603 + 864000) return; + + //Today: 12.11.2023 - 1698724145 and added 20 days seccond - 1728000 (little change actually) + if(time() > (1699862697 + 2728000)) return; if( defined( 'WPT_PRO_DEV_VERSION' ) ) return; - $temp_numb = rand(1,10); - // var_dump($temp_numb); + $temp_numb = rand(2,10); + /** * small notice for pro plugin, * charect: @@ -71,23 +73,39 @@ public static function display_notice() // if($temp_numb == 3) $small_notc->show(); - - $target = 'https://codeastrology.com/coupons/?campaign=SPECIAL60F10DAYS&ref=1&utm_source=Default_Offer_LINK'; - $my_message = 'COUPON CODE: SPECIAL60F10DAYS - up to 60% OFF A coupon code for you for Woo Product Table Pro) Plugin'; - $offerNc = new Notice('wpt_SPECIAL60F10DAYS_offer'); - $offerNc->set_title( 'SPECIAL OFFER for 10 days' ) - ->set_diff_limit(35) + $coupon_Code = 'BLACKFRIDAY2023'; + $target = 'https://wooproducttable.com/pricing/?discount=' . $coupon_Code . '&campaign=' . $coupon_Code . '&ref=1&utm_source=Default_Offer_LINK'; + $my_message = 'Make Product Table easily with Black Friday offer. COUPON CODE: ' . $coupon_Code . ' - for (Woo Product Table Pro) Plugin'; + $offerNc = new Notice('wpt_'.$coupon_Code.'_offer'); + $offerNc->set_title( 'BLACK FRIDAY OFFER π π' ) + ->set_diff_limit(3) ->set_type('offer') - ->set_img( WPT_BASE_URL. 'assets/images/wpt-logo-sk.png') + ->set_img( WPT_BASE_URL. 'assets/images/round-logo.png') ->set_img_target( $target ) ->set_message( $my_message ) ->add_button([ - 'text' => 'Claim Discount', + 'text' => 'Claim Coupon', + 'type' => 'success', + 'link' => 'https://wooproducttable.com/pricing/?discount=' . $coupon_Code, + ]); + + $offerNc->add_button([ + 'text' => 'Unlimited Access(Lifetime) with Discount', 'type' => 'error', - 'link' => $target, + 'link' => 'https://codeastrology.com/checkout?edd_action=add_to_cart&download_id=6553&edd_options%5Bprice_id%5D=6&discount=' . $coupon_Code, + ]); + + $offerNc->add_button([ + 'text' => 'Checkout Coupon', + 'type' => 'offer', + 'link' => 'https://codeastrology.com/coupons/?discount=' . $coupon_Code . '&campaign=' . $coupon_Code . '&ref=1&utm_source=Default_Offer_LINK', ]); - // if( method_exists($offerNc, 'set_location') ){ - // $offerNc->set_location('wpt_offer_here'); //wpt_premium_image_bottom + + //location a dekhale notice bar a obbossoi dekhabe. + //somossa hocche + // if( method_exists($offerNc, 'set_location') && $temp_numb == 3 ){ //$temp_numb == 5 + // $offerNc->set_location('wpt_premium_image_bottom'); //wpt_premium_image_bottom + // $offerNc->show(); // } if($temp_numb == 5) $offerNc->show(); diff --git a/inc/handle/args.php b/inc/handle/args.php index 94296343..12502526 100644 --- a/inc/handle/args.php +++ b/inc/handle/args.php @@ -233,7 +233,7 @@ public static function manage( Shortcode $shortcode ){ } - if( ! empty( self::$args['tax_query'] ) && $shortcode->basics['query_relation'] ){ + if( ! empty( self::$args['tax_query'] ) && isset( $shortcode->basics['query_relation'] ) && $shortcode->basics['query_relation'] ){ $query_rel = $shortcode->basics['query_relation'] ?? 'OR'; self::$args['tax_query']['relation'] = $query_rel == 'AND' ? $query_rel : 'OR'; } diff --git a/inc/handle/fragment.php b/inc/handle/fragment.php index d05a4610..4cb066d3 100644 --- a/inc/handle/fragment.php +++ b/inc/handle/fragment.php @@ -112,7 +112,8 @@ protected function getFloatingCart(){ table_id, + 'wpt_table_pagination' + ], $shortcode->table_id); + $pagi_class = implode( ' ', $pagi_class_args ); /** * Pagination's this part/method, only need when pagination will number. * and in our plugin, pagination value 'on' means number. for other, @@ -26,7 +32,7 @@ public static function render( Shortcode $shortcode ){ //Actually I have to check. // if( 'on' !== $shortcode->pagination ) return; ?> - + diff --git a/inc/shortcode.php b/inc/shortcode.php index 488bb6f2..9bede78f 100644 --- a/inc/shortcode.php +++ b/inc/shortcode.php @@ -380,8 +380,6 @@ class=""> table_id ); /** * Dev version for Get Vardump to get Object Details Var Dump diff --git a/includes/enqueue.php b/includes/enqueue.php index 9d6a94f4..a26999d6 100644 --- a/includes/enqueue.php +++ b/includes/enqueue.php @@ -121,7 +121,7 @@ function wpt_enqueue_common(){ /** * DataTable enable disable function using enqueue - * Used hook wpt_loaded + * Used hook wpt_after_table * * @since 3.1.9.0 * @author Saiful Islam @@ -164,7 +164,7 @@ function wpt_datatables_enqueue( $table_ID ){ } } -add_action( 'wpt_loaded', 'wpt_datatables_enqueue', 99 ); //wp_enqueue_scripts +add_action( 'wpt_after_table', 'wpt_datatables_enqueue', 99 ); //wp_enqueue_scripts function wpt_datatable_wise_arg_manage( $args, $table_ID ){ $condtion = get_post_meta( $table_ID, 'conditions', true ); diff --git a/includes/functions.php b/includes/functions.php index fa49d548..c51c10ce 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -1584,5 +1584,5 @@ function wpt_default_css_template( $tbl_id ){ $template_file = WPT_Product_Table::getPath('BASE_URL') . 'assets/css/templates/' . $template . '.css'; wp_enqueue_style( 'wpt-template-' . $template , $template_file, array(), WPT_DEV_VERSION, 'all' ); } -// add_action( 'wpt_loaded','wpt_default_css_template', 999 ); +// add_action( 'wpt_after_table','wpt_default_css_template', 999 ); // add_action( 'wpto_action_start_table','wpt_default_css_template', 999 ); \ No newline at end of file diff --git a/includes/items/buy_link.php b/includes/items/buy_link.php new file mode 100644 index 00000000..6d1d14fa --- /dev/null +++ b/includes/items/buy_link.php @@ -0,0 +1,2 @@ +get_description(), true ); \ No newline at end of file +$prod_desc = apply_filters( 'wpto_product_description', $product->get_description(), $id ); +echo do_shortcode( $prod_desc, true ); \ No newline at end of file diff --git a/includes/items/quantity.php b/includes/items/quantity.php index 695bece2..e79d2096 100644 --- a/includes/items/quantity.php +++ b/includes/items/quantity.php @@ -1,24 +1,48 @@ is_sold_individually() ) return false; + /** + * Checking if is_sold_individually + * then wc will not show qty box + * that's why, I return default template + * + * rest will handle from WooCommerce + * + * @since 1.0.8 + */ + + if( $product->is_sold_individually() ) return false; -$t_args = array( - 'input_value' => apply_filters( 'woocommerce_quantity_input_min', 1, $product ), - 'max_value' => apply_filters( 'woocommerce_quantity_input_max', $product->get_stock_quantity(), $product ), - 'min_value' => apply_filters( 'woocommerce_quantity_input_min', 1, $product ), - 'step' => apply_filters( 'woocommerce_quantity_input_step', 1, $product ), -); -woocommerce_quantity_input( $t_args , $product, true ); -?> + $t_args = array( + 'input_value' => apply_filters( 'woocommerce_quantity_input_min', 1, $product ), + 'max_value' => apply_filters( 'woocommerce_quantity_input_max', $product->get_stock_quantity(), $product ), + 'min_value' => apply_filters( 'woocommerce_quantity_input_min', 1, $product ), + 'step' => apply_filters( 'woocommerce_quantity_input_step', 1, $product ), + ); + + /** + * if "Stock management" is checked, backorders is allowed and quantity is one then quantity type is checnge to 'hidden'. + * Therefor quantity box is not showing. + * with this hook we are changing back to 'number' + */ + add_filter('woocommerce_quantity_input_type', function($type){ + $type = 'number'; + return $type; + }); + + /** + * If any product is out of stock then quantity box will hide and stock status will show + * @since 3.4.3.0 + * @author Fazle Bari + */ + $product_type = $product->get_type(); + $stock = $data['stock_status'] ?? ''; + if( 'outofstock' == $stock && ($product_type == 'variation' || $product_type == 'simple')){ // + echo wc_get_stock_html( $product ); + return; + } + + woocommerce_quantity_input( $t_args , $product, true ); + ?> diff --git a/includes/variation_html.php b/includes/variation_html.php index da727581..e20b4b2a 100644 --- a/includes/variation_html.php +++ b/includes/variation_html.php @@ -67,4 +67,4 @@ +Automatically or Manually show all variation as a table for Variable product. See: [Example 1](https://demo.wooproducttable.com/product/samsung-galaxy/), [Example 2](https://demo.wooproducttable.com/product-variation-table-with-product-details/), [Example 3](https://demo.wooproducttable.com/show-variation-name-in-a-single-column/) + **Quick Cart Update** Add a product to the cart, you donβt have to click any button anymore. You just need to update the quantity and that product will automatically add to the cart. The cart will auto-update by Increasing or decreasing quantity. @@ -135,6 +138,25 @@ Our [YouTube Playlist](https://www.youtube.com/channel/UCnrFzReNAohkHglbF91ZEYA/ **Important feature ( Pro and Free )** +* WPML/Loco Translate/Multi Languag +* Product Table to any page and where using shortcode. +* Advance Search and filter option - Search from whole site +* Multi-level Query to show product as table. such as: Category, taxonomy, tag, menu-order, price limit. Anything. +* No need code edit knowledge +* Table template feature +* Variation Table for Variable Product +* Show custom field in table +* Filter with custom field +* Product search by sku +* Product filter by sku +* WooCommerce Product Table +* Quick Order Table +* WooCommerce Shop page as Table +* WooCommerce Archive as Table +* WooCommerce Cateogry as Table +* WooCommerce Tag as Table +* WooCommerce Taxonomy as Table +* Any type customization possible by Existing [Filter and Action hook](https://wooproducttable.com/plugin-api/). * Add custom column * Design columns individually * Columns only for login user @@ -155,6 +177,8 @@ Our [YouTube Playlist](https://www.youtube.com/channel/UCnrFzReNAohkHglbF91ZEYA/ * Product Sorting by values * Showing Popup Notices * Redirect to Checkout Page +* WC Product Table Lite +* woo product table π₯π₯π₯ [Checkout Which Features Are Free And Which Are Not.](https://wooproducttable.com/pricing/) @@ -210,6 +234,7 @@ With a Product Table Plugin, you can feel confident that your business processes * [unikforceit](https://github.com/unikforceit) (42 commits ) * [fatimakhatungit](https://github.com/fatimakhatungit) (38 commits ) * [rafiul](https://github.com/rafiul) (29 commits ) +* [mdibrahimk48](https://github.com/mdibrahimk48) (5 commits ) * [tanyabouman](https://github.com/tanyabouman) (4 commits ) * [zbandhan](https://github.com/zbandhan) (1 commits ) * π [You can join here](https://github.com/codersaiful/woo-product-table/fork) @@ -293,6 +318,30 @@ You can easily show specific category products. While creating new table click o == Changelog == += 3.4.6 = +* Fixed: Asc/Desc icon fixed (Table Title) +* Fixed: additional_json issue on all selected item add has been fixed. +* Admin area organized and Optimized. + += 3.4.5 = +* Added: new filter hook for description colun has been added. `wpto_product_description` filter added. [Code Example](https://gist.github.com/codersaiful/6053bf6b2160b90144fef9748ef28e5c) +* Fixed: JavaScript confliction issue fixed. +* Bug fixed +* Code Optimized + += 3.4.4 = +* Added: new column/item added name: Buy Link. +* Compatibility: Compabile with HPOS. +* Bug Fixed. + += 3.4.3 = +* Speed optimized for product table using shortcode. +* Plugin init loaded on 'plugins_loaded' hook +* Fixed: sku search issue fixed for variable and variation product. +* Fixed: conditional checkbox and conditional Add to cart button - issue fix for All to cart all selected. +* Bug fixed +* Code Optimized + = 3.4.2 = * Added: new filter hook `wpt_subtotal_text` added for Subtotal text of footer cart. * Added: Footer added sub total and line total with class markup, so that user can easily handle. @@ -455,7 +504,7 @@ You can easily show specific category products. While creating new table click o * Empty Cart buttin fixed. * Fontello added. Some cutom icon added to our table. * Added Action_Hook wpt_load for staring product table anywhere. - * Added Action_Hook wpt_loaded at the end product table anywhere. + * Added Action_Hook wpt_after_table at the end product table anywhere. = 3.1.7 = * Audio file issue fixed in table. diff --git a/woo-product-table.php b/woo-product-table.php index fba31509..f5d6626e 100644 --- a/woo-product-table.php +++ b/woo-product-table.php @@ -7,11 +7,11 @@ * Author URI: https://wooproducttable.com/?utm_source=WPT+Plugin+Dashboard&utm_medium=Free+Version * Tags: wooproducttable, woocommerce product list,woocommerce product table, wc product table, product grid view, inventory, shop product table * - * Version: 3.4.3 + * Version: 3.4.5 * Requires at least: 4.0.0 - * Tested up to: 6.3 + * Tested up to: 6.4.2 * WC requires at least: 5.0.0 - * WC tested up to: 8.0.2 + * WC tested up to: 8.3.1 * * * Text Domain: woo-product-table @@ -33,7 +33,7 @@ } if( ! defined( 'WPT_DEV_VERSION' ) ){ - define( 'WPT_DEV_VERSION', '3.4.3.0' ); + define( 'WPT_DEV_VERSION', '3.4.5.0' ); } if( ! defined( 'WPT_CAPABILITY' ) ){ @@ -123,6 +123,7 @@ 'product_id' => __( 'ID', 'woo-product-table' ), 'serial_number' => __( 'SL', 'woo-product-table' ), 'action' => __( 'Action', 'woo-product-table' ), + 'buy_link' => __( 'Buy Link', 'woo-product-table' ), ); $column_array = apply_filters( 'wpto_default_column_arr', $column_array ); @@ -369,6 +370,15 @@ public static function getInstance() { public function __construct() { + // Declare compatibility with custom order tables for WooCommerce. + add_action( 'before_woocommerce_init', function(){ + if (class_exists('\Automattic\WooCommerce\Utilities\FeaturesUtil')) { + \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility('custom_order_tables', __FILE__, true); + } + } + ); + + /** * Including CA_Framework *
+ Gone are the days of scrolling through an endless list of products β now you can effortlessly group products based on their respective categories, creating a clear hierarchy that helps customers navigate and explore your offerings more efficiently. +
+ This will help you to display variable and simple products together. This plugin will convert every variation as a row and display it among the simple products.Now customers will get a more visual presentation. +
More add-ons for Woo Product Table have been coming...
Enjoy all awesome feature.
Checkout our Offer.
100% No-Risk 30-Days Money Back Guarantee