2011-08-10 17:11:11 +00:00
< ? php
/**
2015-11-03 13:53:50 +00:00
* WooCommerce Template
2011-11-24 00:24:24 +00:00
*
2013-08-09 16:11:15 +00:00
* Functions for the templating system .
2011-08-10 17:11:11 +00:00
*
2017-11-20 22:19:09 +00:00
* @ package WooCommerce\Functions
2015-10-02 01:45:11 +00:00
* @ version 2.5 . 0
2011-08-10 17:11:11 +00:00
*/
2020-02-01 06:18:47 +00:00
use Automattic\Jetpack\Constants ;
2018-01-30 11:45:00 +00:00
defined ( 'ABSPATH' ) || exit ;
2012-10-15 10:57:58 +00:00
2013-08-09 16:11:15 +00:00
/**
* Handle redirects before content is output - hooked into template_redirect so is_page works .
*/
2013-11-25 13:30:20 +00:00
function wc_template_redirect () {
2013-09-12 13:41:02 +00:00
global $wp_query , $wp ;
2013-08-09 16:11:15 +00:00
2020-04-21 13:52:40 +00:00
// phpcs:disable WordPress.Security.NonceVerification.Recommended
2019-02-01 16:55:51 +00:00
// When default permalinks are enabled, redirect shop page to post type archive url.
2020-04-21 13:52:40 +00:00
if ( ! empty ( $_GET [ 'page_id' ] ) && '' === get_option ( 'permalink_structure' ) && wc_get_page_id ( 'shop' ) === absint ( $_GET [ 'page_id' ] ) && get_post_type_archive_link ( 'product' ) ) {
2016-09-02 01:51:31 +00:00
wp_safe_redirect ( get_post_type_archive_link ( 'product' ) );
2013-08-09 16:11:15 +00:00
exit ;
2019-02-01 16:55:51 +00:00
}
2020-04-21 13:52:40 +00:00
// phpcs:enable WordPress.Security.NonceVerification.Recommended
2013-08-09 16:11:15 +00:00
2019-02-01 16:55:51 +00:00
// When on the checkout with an empty cart, redirect to cart page.
if ( is_page ( wc_get_page_id ( 'checkout' ) ) && wc_get_page_id ( 'checkout' ) !== wc_get_page_id ( 'cart' ) && WC () -> cart -> is_empty () && empty ( $wp -> query_vars [ 'order-pay' ] ) && ! isset ( $wp -> query_vars [ 'order-received' ] ) && ! is_customize_preview () && apply_filters ( 'woocommerce_checkout_redirect_empty_cart' , true ) ) {
2016-06-30 11:10:27 +00:00
wc_add_notice ( __ ( 'Checkout is not available whilst your cart is empty.' , 'woocommerce' ), 'notice' );
2019-08-29 07:49:11 +00:00
wp_safe_redirect ( wc_get_cart_url () );
2013-08-09 16:11:15 +00:00
exit ;
2019-02-01 16:55:51 +00:00
}
2016-09-02 03:15:49 +00:00
2019-02-01 16:55:51 +00:00
// Logout.
2020-04-21 13:52:40 +00:00
if ( isset ( $wp -> query_vars [ 'customer-logout' ] ) && ! empty ( $_REQUEST [ '_wpnonce' ] ) && wp_verify_nonce ( sanitize_key ( $_REQUEST [ '_wpnonce' ] ), 'customer-logout' ) ) {
2018-01-30 11:45:00 +00:00
wp_safe_redirect ( str_replace ( '&' , '&' , wp_logout_url ( wc_get_page_permalink ( 'myaccount' ) ) ) );
2013-08-09 16:11:15 +00:00
exit ;
2019-02-01 16:55:51 +00:00
}
2013-08-09 16:11:15 +00:00
2019-02-01 16:55:51 +00:00
// Redirect to the correct logout endpoint.
if ( isset ( $wp -> query_vars [ 'customer-logout' ] ) && 'true' === $wp -> query_vars [ 'customer-logout' ] ) {
2018-01-30 11:45:00 +00:00
wp_safe_redirect ( esc_url_raw ( wc_get_account_endpoint_url ( 'customer-logout' ) ) );
2017-06-27 17:10:20 +00:00
exit ;
2019-02-01 16:55:51 +00:00
}
2017-06-27 17:10:20 +00:00
2019-02-01 16:56:00 +00:00
// Trigger 404 if trying to access an endpoint on wrong page.
2019-05-09 22:49:03 +00:00
if ( is_wc_endpoint_url () && ! is_account_page () && ! is_checkout () && apply_filters ( 'woocommerce_account_endpoint_page_not_found' , true ) ) {
2019-02-01 16:56:00 +00:00
$wp_query -> set_404 ();
status_header ( 404 );
2019-04-22 16:18:48 +00:00
include get_query_template ( '404' );
2019-02-01 16:56:00 +00:00
exit ;
}
2016-09-02 03:15:49 +00:00
2019-02-01 16:55:51 +00:00
// Redirect to the product page if we have a single product.
if ( is_search () && is_post_type_archive ( 'product' ) && apply_filters ( 'woocommerce_redirect_single_search_result' , true ) && 1 === absint ( $wp_query -> found_posts ) ) {
2014-08-19 10:09:29 +00:00
$product = wc_get_product ( $wp_query -> post );
2013-08-09 16:11:15 +00:00
2015-01-19 10:43:43 +00:00
if ( $product && $product -> is_visible () ) {
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
wp_safe_redirect ( get_permalink ( $product -> get_id () ), 302 );
2013-08-09 16:11:15 +00:00
exit ;
}
2019-02-01 16:55:51 +00:00
}
2013-11-05 21:02:13 +00:00
2019-02-01 16:55:51 +00:00
// Ensure gateways and shipping methods are loaded early.
if ( is_add_payment_method_page () || is_checkout () ) {
2017-10-20 17:24:56 +00:00
// Buffer the checkout page.
2013-08-09 16:11:15 +00:00
ob_start ();
2013-09-12 13:41:02 +00:00
2017-10-20 17:24:56 +00:00
// Ensure gateways and shipping methods are loaded early.
2013-09-12 13:41:02 +00:00
WC () -> payment_gateways ();
WC () -> shipping ();
2013-08-09 16:11:15 +00:00
}
}
2014-03-03 13:37:45 +00:00
add_action ( 'template_redirect' , 'wc_template_redirect' );
2013-08-09 16:11:15 +00:00
2015-05-24 23:35:45 +00:00
/**
* When loading sensitive checkout or account pages , send a HTTP header to limit rendering of pages to same origin iframes for security reasons .
*
* Can be disabled with : remove_action ( 'template_redirect' , 'wc_send_frame_options_header' );
*
* @ since 2.3 . 10
*/
function wc_send_frame_options_header () {
2019-10-30 13:37:04 +00:00
if ( ( is_checkout () || is_account_page () ) && ! is_customize_preview () ) {
2015-05-24 23:35:45 +00:00
send_frame_options_header ();
}
}
add_action ( 'template_redirect' , 'wc_send_frame_options_header' );
2016-03-01 16:45:25 +00:00
/**
* No index our endpoints .
* Prevent indexing pages like order - received .
*
* @ since 2.5 . 3
*/
function wc_prevent_endpoint_indexing () {
2020-04-21 13:52:40 +00:00
// phpcs:disable WordPress.Security.NonceVerification.Recommended, WordPress.PHP.NoSilencedErrors.Discouraged
if ( is_wc_endpoint_url () || isset ( $_GET [ 'download_file' ] ) ) {
@ header ( 'X-Robots-Tag: noindex' );
2016-03-01 16:45:25 +00:00
}
2020-04-21 13:52:40 +00:00
// phpcs:enable WordPress.Security.NonceVerification.Recommended, WordPress.PHP.NoSilencedErrors.Discouraged
2016-03-01 16:45:25 +00:00
}
add_action ( 'template_redirect' , 'wc_prevent_endpoint_indexing' );
2016-08-12 10:03:28 +00:00
/**
* Remove adjacent_posts_rel_link_wp_head - pointless for products .
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-08-12 10:03:28 +00:00
*/
function wc_prevent_adjacent_posts_rel_link_wp_head () {
if ( is_singular ( 'product' ) ) {
remove_action ( 'wp_head' , 'adjacent_posts_rel_link_wp_head' , 10 , 0 );
}
}
add_action ( 'template_redirect' , 'wc_prevent_adjacent_posts_rel_link_wp_head' );
2017-05-08 13:35:23 +00:00
/**
* Show the gallery if JS is disabled .
*
* @ since 3.0 . 6
*/
function wc_gallery_noscript () {
?>
< noscript >< style >. woocommerce - product - gallery { opacity : 1 ! important ; } </ style ></ noscript >
< ? php
}
add_action ( 'wp_head' , 'wc_gallery_noscript' );
2013-09-12 13:41:02 +00:00
/**
* When the_post is called , put product data into a global .
*
2017-10-20 17:24:56 +00:00
* @ param mixed $post Post Object .
2013-09-12 13:41:02 +00:00
* @ return WC_Product
*/
function wc_setup_product_data ( $post ) {
unset ( $GLOBALS [ 'product' ] );
2017-03-07 20:24:24 +00:00
if ( is_int ( $post ) ) {
2018-05-24 17:11:13 +00:00
$post = get_post ( $post );
2017-03-07 20:24:24 +00:00
}
2013-09-12 13:41:02 +00:00
2018-05-24 17:11:13 +00:00
if ( empty ( $post -> post_type ) || ! in_array ( $post -> post_type , array ( 'product' , 'product_variation' ), true ) ) {
2013-09-12 13:41:02 +00:00
return ;
2017-03-07 20:24:24 +00:00
}
2013-09-12 13:41:02 +00:00
2018-05-24 17:11:13 +00:00
$GLOBALS [ 'product' ] = wc_get_product ( $post );
2013-09-12 13:41:02 +00:00
return $GLOBALS [ 'product' ];
}
2014-03-03 13:37:45 +00:00
add_action ( 'the_post' , 'wc_setup_product_data' );
2013-09-12 13:41:02 +00:00
2017-12-06 18:10:19 +00:00
/**
* Sets up the woocommerce_loop global from the passed args or from the main query .
*
* @ since 3.3 . 0
* @ param array $args Args to pass into the global .
*/
function wc_setup_loop ( $args = array () ) {
2017-12-06 19:03:14 +00:00
$default_args = array (
2017-12-06 18:10:19 +00:00
'loop' => 0 ,
'columns' => wc_get_default_products_per_row (),
'name' => '' ,
'is_shortcode' => false ,
'is_paginated' => true ,
2017-12-06 19:03:14 +00:00
'is_search' => false ,
'is_filtered' => false ,
'total' => 0 ,
'total_pages' => 0 ,
'per_page' => 0 ,
'current_page' => 1 ,
);
2014-03-13 13:07:44 +00:00
2017-12-06 19:03:14 +00:00
// If this is a main WC query, use global args as defaults.
if ( $GLOBALS [ 'wp_query' ] -> get ( 'wc_query' ) ) {
2018-11-21 11:48:35 +00:00
$default_args = array_merge (
$default_args ,
array (
'is_search' => $GLOBALS [ 'wp_query' ] -> is_search (),
'is_filtered' => is_filtered (),
'total' => $GLOBALS [ 'wp_query' ] -> found_posts ,
'total_pages' => $GLOBALS [ 'wp_query' ] -> max_num_pages ,
'per_page' => $GLOBALS [ 'wp_query' ] -> get ( 'posts_per_page' ),
'current_page' => max ( 1 , $GLOBALS [ 'wp_query' ] -> get ( 'paged' , 1 ) ),
)
);
2014-03-13 13:07:44 +00:00
}
2017-12-06 19:03:14 +00:00
2018-01-31 21:24:14 +00:00
// Merge any existing values.
if ( isset ( $GLOBALS [ 'woocommerce_loop' ] ) ) {
$default_args = array_merge ( $default_args , $GLOBALS [ 'woocommerce_loop' ] );
}
2017-12-06 19:03:14 +00:00
$GLOBALS [ 'woocommerce_loop' ] = wp_parse_args ( $args , $default_args );
2014-03-13 13:07:44 +00:00
}
2017-12-06 18:10:19 +00:00
add_action ( 'woocommerce_before_shop_loop' , 'wc_setup_loop' );
2014-03-13 13:07:44 +00:00
2013-11-25 14:35:10 +00:00
/**
2017-12-06 18:10:19 +00:00
* Resets the woocommerce_loop global .
2017-10-20 17:24:56 +00:00
*
2017-12-06 18:10:19 +00:00
* @ since 3.3 . 0
2013-11-25 14:35:10 +00:00
*/
2017-12-06 18:10:19 +00:00
function wc_reset_loop () {
unset ( $GLOBALS [ 'woocommerce_loop' ] );
}
add_action ( 'woocommerce_after_shop_loop' , 'woocommerce_reset_loop' , 999 );
2013-11-25 14:35:10 +00:00
2017-12-06 18:10:19 +00:00
/**
* Gets a property from the woocommerce_loop global .
*
* @ since 3.3 . 0
* @ param string $prop Prop to get .
* @ param string $default Default if the prop does not exist .
* @ return mixed
*/
function wc_get_loop_prop ( $prop , $default = '' ) {
2018-01-31 11:59:40 +00:00
wc_setup_loop (); // Ensure shop loop is setup.
2017-12-06 18:10:19 +00:00
return isset ( $GLOBALS [ 'woocommerce_loop' ], $GLOBALS [ 'woocommerce_loop' ][ $prop ] ) ? $GLOBALS [ 'woocommerce_loop' ][ $prop ] : $default ;
}
2013-11-25 14:35:10 +00:00
2017-12-06 18:10:19 +00:00
/**
* Sets a property in the woocommerce_loop global .
*
* @ since 3.3 . 0
* @ param string $prop Prop to set .
* @ param string $value Value to set .
*/
function wc_set_loop_prop ( $prop , $value = '' ) {
if ( ! isset ( $GLOBALS [ 'woocommerce_loop' ] ) ) {
wc_setup_loop ();
2013-11-25 14:35:10 +00:00
}
2017-12-06 18:10:19 +00:00
$GLOBALS [ 'woocommerce_loop' ][ $prop ] = $value ;
2013-11-25 14:35:10 +00:00
}
2020-04-23 13:07:09 +00:00
/**
* Set the current visbility for a product in the woocommerce_loop global .
*
2020-07-09 14:47:14 +00:00
* @ since 4.4 . 0
2020-04-23 13:07:09 +00:00
* @ param int $product_id Product it to cache visbiility for .
* @ param bool $value The poduct visibility value to cache .
*/
function wc_set_loop_product_visibility ( $product_id , $value ) {
wc_set_loop_prop ( " product_visibility_ $product_id " , $value );
}
/**
* Gets the cached current visibility for a product from the woocommerce_loop global .
*
2020-07-09 14:47:14 +00:00
* @ since 4.4 . 0
2020-04-23 13:07:09 +00:00
* @ param int $product_id Product id to get the cached visibility for .
*
* @ return bool | null The cached product visibility , or null if on visibility has been cached for that product .
*/
function wc_get_loop_product_visibility ( $product_id ) {
return wc_get_loop_prop ( " product_visibility_ $product_id " , null );
}
2018-03-07 12:54:00 +00:00
/**
* Should the WooCommerce loop be displayed ?
*
* This will return true if we have posts ( products ) or if we have subcats to display .
*
* @ since 3.4 . 0
* @ return bool
*/
function woocommerce_product_loop () {
2020-07-14 07:59:09 +00:00
return have_posts () || 'products' !== woocommerce_get_loop_display_mode ();
2018-03-07 12:54:00 +00:00
}
2013-09-12 13:41:02 +00:00
/**
* Output generator tag to aid debugging .
*
2017-10-20 17:24:56 +00:00
* @ param string $gen Generator .
* @ param string $type Type .
2017-05-15 11:50:52 +00:00
* @ return string
2013-09-12 13:41:02 +00:00
*/
2014-03-12 11:53:59 +00:00
function wc_generator_tag ( $gen , $type ) {
2020-02-04 22:02:57 +00:00
$version = Constants :: get_constant ( 'WC_VERSION' );
2014-03-12 11:53:59 +00:00
switch ( $type ) {
case 'html' :
2020-02-04 22:02:57 +00:00
$gen .= " \n " . '<meta name="generator" content="WooCommerce ' . esc_attr ( $version ) . '">' ;
2014-03-12 11:53:59 +00:00
break ;
case 'xhtml' :
2020-02-04 22:02:57 +00:00
$gen .= " \n " . '<meta name="generator" content="WooCommerce ' . esc_attr ( $version ) . '" />' ;
2014-03-12 11:53:59 +00:00
break ;
}
return $gen ;
2013-09-12 13:41:02 +00:00
}
2013-08-09 16:11:15 +00:00
/**
2015-11-03 13:31:20 +00:00
* Add body classes for WC pages .
2013-08-09 16:11:15 +00:00
*
2017-10-20 17:24:56 +00:00
* @ param array $classes Body Classes .
2013-08-09 16:11:15 +00:00
* @ return array
*/
function wc_body_class ( $classes ) {
$classes = ( array ) $classes ;
2021-02-08 07:55:07 +00:00
if ( is_shop () ) {
$classes [] = 'woocommerce-shop' ;
2021-02-18 08:38:17 +00:00
}
2021-02-17 14:09:18 +00:00
if ( is_woocommerce () ) {
2016-09-02 03:15:49 +00:00
2013-08-09 16:11:15 +00:00
$classes [] = 'woocommerce' ;
$classes [] = 'woocommerce-page' ;
2016-09-02 03:15:49 +00:00
} elseif ( is_checkout () ) {
2013-08-09 16:11:15 +00:00
$classes [] = 'woocommerce-checkout' ;
$classes [] = 'woocommerce-page' ;
2016-09-02 03:15:49 +00:00
} elseif ( is_cart () ) {
2013-08-09 16:11:15 +00:00
$classes [] = 'woocommerce-cart' ;
$classes [] = 'woocommerce-page' ;
2016-09-02 03:15:49 +00:00
} elseif ( is_account_page () ) {
2013-08-09 16:11:15 +00:00
$classes [] = 'woocommerce-account' ;
$classes [] = 'woocommerce-page' ;
2016-09-02 03:15:49 +00:00
2013-08-09 16:11:15 +00:00
}
2014-01-10 17:17:01 +00:00
if ( is_store_notice_showing () ) {
2013-09-05 16:13:57 +00:00
$classes [] = 'woocommerce-demo-store' ;
}
2015-03-17 16:39:44 +00:00
2017-11-20 16:40:56 +00:00
foreach ( WC () -> query -> get_query_vars () as $key => $value ) {
2015-03-16 13:26:22 +00:00
if ( is_wc_endpoint_url ( $key ) ) {
2015-03-17 16:39:44 +00:00
$classes [] = 'woocommerce-' . sanitize_html_class ( $key );
2015-03-16 13:26:22 +00:00
}
}
2013-09-05 16:13:57 +00:00
2018-03-07 11:44:41 +00:00
$classes [] = 'woocommerce-no-js' ;
add_action ( 'wp_footer' , 'wc_no_js' );
2013-08-09 16:11:15 +00:00
return array_unique ( $classes );
}
2018-03-07 11:44:41 +00:00
/**
* NO JS handling .
*
* @ since 3.4 . 0
*/
function wc_no_js () {
?>
< script type = " text/javascript " >
2020-09-08 07:20:18 +00:00
( function () {
var c = document . body . className ;
c = c . replace ( / woocommerce - no - js / , 'woocommerce-js' );
document . body . className = c ;
2021-01-21 14:27:44 +00:00
})();
2018-03-07 11:44:41 +00:00
</ script >
< ? php
}
2015-04-10 12:17:30 +00:00
/**
* Display the classes for the product cat div .
*
* @ since 2.4 . 0
* @ param string | array $class One or more classes to add to the class list .
2017-10-20 17:24:56 +00:00
* @ param object $category object Optional .
2015-04-10 12:17:30 +00:00
*/
function wc_product_cat_class ( $class = '' , $category = null ) {
2017-10-20 17:24:56 +00:00
// Separates classes with a single space, collates classes for post DIV.
2015-04-10 12:17:30 +00:00
echo 'class="' . esc_attr ( join ( ' ' , wc_get_product_cat_class ( $class , $category ) ) ) . '"' ;
}
2016-02-12 13:30:10 +00:00
/**
2017-11-09 17:34:54 +00:00
* Get the default columns setting - this is how many products will be shown per row in loops .
*
* @ since 3.3 . 0
* @ return int
*/
function wc_get_default_products_per_row () {
2018-01-31 17:55:17 +00:00
$columns = get_option ( 'woocommerce_catalog_columns' , 4 );
2018-01-08 18:48:57 +00:00
$product_grid = wc_get_theme_support ( 'product_grid' );
$min_columns = isset ( $product_grid [ 'min_columns' ] ) ? absint ( $product_grid [ 'min_columns' ] ) : 0 ;
$max_columns = isset ( $product_grid [ 'max_columns' ] ) ? absint ( $product_grid [ 'max_columns' ] ) : 0 ;
2017-11-09 17:34:54 +00:00
2018-01-08 18:48:57 +00:00
if ( $min_columns && $columns < $min_columns ) {
$columns = $min_columns ;
2017-11-09 18:11:35 +00:00
update_option ( 'woocommerce_catalog_columns' , $columns );
2018-01-08 18:48:57 +00:00
} elseif ( $max_columns && $columns > $max_columns ) {
$columns = $max_columns ;
2017-11-09 18:11:35 +00:00
update_option ( 'woocommerce_catalog_columns' , $columns );
}
2018-01-08 18:48:57 +00:00
if ( has_filter ( 'loop_shop_columns' ) ) { // Legacy filter handling.
2017-11-09 17:34:54 +00:00
$columns = apply_filters ( 'loop_shop_columns' , $columns );
}
2018-01-30 23:32:52 +00:00
$columns = absint ( $columns );
return max ( 1 , $columns );
2017-11-09 17:34:54 +00:00
}
/**
* Get the default rows setting - this is how many product rows will be shown in loops .
*
* @ since 3.3 . 0
* @ return int
*/
function wc_get_default_product_rows_per_page () {
2018-01-08 18:48:57 +00:00
$rows = absint ( get_option ( 'woocommerce_catalog_rows' , 4 ) );
$product_grid = wc_get_theme_support ( 'product_grid' );
2018-01-30 11:45:00 +00:00
$min_rows = isset ( $product_grid [ 'min_rows' ] ) ? absint ( $product_grid [ 'min_rows' ] ) : 0 ;
$max_rows = isset ( $product_grid [ 'max_rows' ] ) ? absint ( $product_grid [ 'max_rows' ] ) : 0 ;
2017-11-09 18:11:35 +00:00
2018-01-08 18:48:57 +00:00
if ( $min_rows && $rows < $min_rows ) {
$rows = $min_rows ;
2017-11-09 18:11:35 +00:00
update_option ( 'woocommerce_catalog_rows' , $rows );
2018-01-08 18:48:57 +00:00
} elseif ( $max_rows && $rows > $max_rows ) {
$rows = $max_rows ;
2017-11-09 18:11:35 +00:00
update_option ( 'woocommerce_catalog_rows' , $rows );
}
return $rows ;
2017-11-09 17:34:54 +00:00
}
2017-12-08 15:33:42 +00:00
/**
2017-12-08 15:36:33 +00:00
* Reset the product grid settings when a new theme is activated .
2017-12-08 15:33:42 +00:00
*
* @ since 3.3 . 0
*/
2017-12-08 15:38:40 +00:00
function wc_reset_product_grid_settings () {
2018-01-08 18:48:57 +00:00
$product_grid = wc_get_theme_support ( 'product_grid' );
2017-12-08 15:33:42 +00:00
2018-01-08 18:48:57 +00:00
if ( ! empty ( $product_grid [ 'default_rows' ] ) ) {
update_option ( 'woocommerce_catalog_rows' , absint ( $product_grid [ 'default_rows' ] ) );
2017-12-08 15:33:42 +00:00
}
2018-01-08 18:48:57 +00:00
if ( ! empty ( $product_grid [ 'default_columns' ] ) ) {
update_option ( 'woocommerce_catalog_columns' , absint ( $product_grid [ 'default_columns' ] ) );
2017-12-08 15:33:42 +00:00
}
2019-01-30 12:55:59 +00:00
wp_cache_flush (); // Flush any caches which could impact settings or templates.
2017-12-08 15:33:42 +00:00
}
2017-12-08 15:38:40 +00:00
add_action ( 'after_switch_theme' , 'wc_reset_product_grid_settings' );
2017-12-08 15:33:42 +00:00
2016-02-12 13:30:10 +00:00
/**
2017-12-06 18:10:19 +00:00
* Get classname for woocommerce loops .
2017-10-20 17:24:56 +00:00
*
2016-02-12 13:30:10 +00:00
* @ since 2.6 . 0
* @ return string
*/
function wc_get_loop_class () {
2017-12-06 18:10:19 +00:00
$loop_index = wc_get_loop_prop ( 'loop' , 0 );
2018-02-22 15:44:28 +00:00
$columns = absint ( max ( 1 , wc_get_loop_prop ( 'columns' , wc_get_default_products_per_row () ) ) );
2016-02-12 13:30:10 +00:00
2017-12-06 18:10:19 +00:00
$loop_index ++ ;
wc_set_loop_prop ( 'loop' , $loop_index );
2016-02-12 13:30:10 +00:00
2017-12-06 18:10:19 +00:00
if ( 0 === ( $loop_index - 1 ) % $columns || 1 === $columns ) {
2016-02-12 13:30:10 +00:00
return 'first' ;
2018-05-16 02:47:35 +00:00
}
if ( 0 === $loop_index % $columns ) {
2016-02-12 13:30:10 +00:00
return 'last' ;
}
2018-05-16 02:47:35 +00:00
return '' ;
2016-02-12 13:30:10 +00:00
}
2017-12-04 21:56:59 +00:00
2015-04-10 12:17:30 +00:00
/**
* Get the classes for the product cat div .
*
* @ since 2.4 . 0
2017-05-12 08:48:46 +00:00
*
2015-04-10 12:17:30 +00:00
* @ param string | array $class One or more classes to add to the class list .
2017-10-20 17:24:56 +00:00
* @ param object $category object Optional .
2017-05-12 08:48:46 +00:00
*
* @ return array
2015-04-10 12:17:30 +00:00
*/
function wc_get_product_cat_class ( $class = '' , $category = null ) {
$classes = is_array ( $class ) ? $class : array_map ( 'trim' , explode ( ' ' , $class ) );
$classes [] = 'product-category' ;
$classes [] = 'product' ;
2016-02-12 13:30:10 +00:00
$classes [] = wc_get_loop_class ();
$classes = apply_filters ( 'product_cat_class' , $classes , $class , $category );
2015-04-10 12:17:30 +00:00
return array_unique ( array_filter ( $classes ) );
}
2013-11-25 14:35:10 +00:00
/**
2019-04-18 18:33:48 +00:00
* Adds extra post classes for products via the WordPress post_class hook , if used .
*
* Note : For performance reasons we instead recommend using wc_product_class / wc_get_product_class instead .
2013-11-25 14:35:10 +00:00
*
* @ since 2.1 . 0
2017-10-20 17:24:56 +00:00
* @ param array $classes Current classes .
* @ param string | array $class Additional class .
* @ param int $post_id Post ID .
2013-11-25 14:35:10 +00:00
* @ return array
*/
2018-05-16 03:08:49 +00:00
function wc_product_post_class ( $classes , $class = '' , $post_id = 0 ) {
2017-11-20 22:19:09 +00:00
if ( ! $post_id || ! in_array ( get_post_type ( $post_id ), array ( 'product' , 'product_variation' ), true ) ) {
2013-11-25 14:35:10 +00:00
return $classes ;
2014-07-28 17:05:36 +00:00
}
2013-11-25 14:35:10 +00:00
2014-08-19 10:09:29 +00:00
$product = wc_get_product ( $post_id );
2013-11-25 14:35:10 +00:00
2019-04-18 18:33:48 +00:00
if ( ! $product ) {
return $classes ;
}
2016-02-12 13:30:10 +00:00
2019-04-18 18:33:48 +00:00
$classes [] = 'product' ;
$classes [] = wc_get_loop_class ();
$classes [] = $product -> get_stock_status ();
if ( $product -> is_on_sale () ) {
$classes [] = 'sale' ;
}
if ( $product -> is_featured () ) {
$classes [] = 'featured' ;
}
if ( $product -> is_downloadable () ) {
$classes [] = 'downloadable' ;
}
if ( $product -> is_virtual () ) {
$classes [] = 'virtual' ;
}
if ( $product -> is_sold_individually () ) {
$classes [] = 'sold-individually' ;
}
if ( $product -> is_taxable () ) {
$classes [] = 'taxable' ;
}
if ( $product -> is_shipping_taxable () ) {
$classes [] = 'shipping-taxable' ;
}
if ( $product -> is_purchasable () ) {
$classes [] = 'purchasable' ;
}
if ( $product -> get_type () ) {
$classes [] = 'product-type-' . $product -> get_type ();
}
if ( $product -> is_type ( 'variable' ) && $product -> get_default_attributes () ) {
$classes [] = 'has-default-attributes' ;
2013-11-25 14:35:10 +00:00
}
2017-11-20 22:19:09 +00:00
$key = array_search ( 'hentry' , $classes , true );
if ( false !== $key ) {
2014-02-23 11:13:42 +00:00
unset ( $classes [ $key ] );
}
2013-11-25 14:35:10 +00:00
return $classes ;
}
2018-04-17 15:14:18 +00:00
/**
* Get product taxonomy HTML classes .
*
* @ since 3.4 . 0
* @ param array $term_ids Array of terms IDs or objects .
* @ param string $taxonomy Taxonomy .
* @ return array
*/
function wc_get_product_taxonomy_class ( $term_ids , $taxonomy ) {
$classes = array ();
foreach ( $term_ids as $term_id ) {
$term = get_term ( $term_id , $taxonomy );
if ( empty ( $term -> slug ) ) {
continue ;
}
$term_class = sanitize_html_class ( $term -> slug , $term -> term_id );
if ( is_numeric ( $term_class ) || ! trim ( $term_class , '-' ) ) {
$term_class = $term -> term_id ;
}
// 'post_tag' uses the 'tag' prefix for backward compatibility.
if ( 'post_tag' === $taxonomy ) {
$classes [] = 'tag-' . $term_class ;
} else {
$classes [] = sanitize_html_class ( $taxonomy . '-' . $term_class , $taxonomy . '-' . $term -> term_id );
}
}
return $classes ;
}
2018-04-06 16:58:59 +00:00
/**
* Retrieves the classes for the post div as an array .
*
2019-01-29 16:31:20 +00:00
* This method was modified from WordPress ' s get_post_class () to allow the removal of taxonomies
2019-04-18 18:33:48 +00:00
* ( for performance reasons ) . Previously wc_product_post_class was hooked into post_class . @ since 3.6 . 0
2018-04-06 16:58:59 +00:00
*
* @ since 3.4 . 0
* @ param string | array $class One or more classes to add to the class list .
2019-04-18 16:25:13 +00:00
* @ param int | WP_Post | WC_Product $product Product ID or product object .
2018-04-06 16:58:59 +00:00
* @ return array
*/
2019-04-18 16:25:13 +00:00
function wc_get_product_class ( $class = '' , $product = null ) {
if ( is_null ( $product ) && ! empty ( $GLOBALS [ 'product' ] ) ) {
// Product was null so pull from global.
$product = $GLOBALS [ 'product' ];
}
if ( $product && ! is_a ( $product , 'WC_Product' ) ) {
// Make sure we have a valid product, or set to false.
$product = wc_get_product ( $product );
2018-04-06 16:58:59 +00:00
}
2019-04-23 17:04:20 +00:00
if ( $class ) {
2019-04-23 17:06:09 +00:00
if ( ! is_array ( $class ) ) {
2019-04-23 17:04:20 +00:00
$class = preg_split ( '#\s+#' , $class );
}
} else {
$class = array ();
}
$post_classes = array_map ( 'esc_attr' , $class );
2018-04-06 16:58:59 +00:00
2019-01-29 16:04:27 +00:00
if ( ! $product ) {
2019-04-23 17:04:20 +00:00
return $post_classes ;
}
// Run through the post_class hook so 3rd parties using this previously can still append classes.
// Note, to change classes you will need to use the newer woocommerce_post_class filter.
// @internal This removes the wc_product_post_class filter so classes are not duplicated.
$filtered = has_filter ( 'post_class' , 'wc_product_post_class' );
if ( $filtered ) {
2019-04-24 12:54:12 +00:00
remove_filter ( 'post_class' , 'wc_product_post_class' , 20 );
2019-04-23 17:04:20 +00:00
}
$post_classes = apply_filters ( 'post_class' , $post_classes , $class , $product -> get_id () );
if ( $filtered ) {
add_filter ( 'post_class' , 'wc_product_post_class' , 20 , 3 );
2018-04-06 16:58:59 +00:00
}
2019-01-29 16:04:27 +00:00
$classes = array_merge (
2019-04-23 17:04:20 +00:00
$post_classes ,
2019-01-29 16:04:27 +00:00
array (
'product' ,
'type-product' ,
'post-' . $product -> get_id (),
'status-' . $product -> get_status (),
2019-01-29 16:31:20 +00:00
wc_get_loop_class (),
$product -> get_stock_status (),
2019-01-29 16:04:27 +00:00
),
wc_get_product_taxonomy_class ( $product -> get_category_ids (), 'product_cat' ),
wc_get_product_taxonomy_class ( $product -> get_tag_ids (), 'product_tag' )
);
2018-04-06 16:58:59 +00:00
2019-01-29 16:04:27 +00:00
if ( $product -> get_image_id () ) {
2018-04-06 16:58:59 +00:00
$classes [] = 'has-post-thumbnail' ;
}
2019-01-29 16:04:27 +00:00
if ( $product -> get_post_password () ) {
$classes [] = post_password_required ( $product -> get_id () ) ? 'post-password-required' : 'post-password-protected' ;
2018-04-06 16:58:59 +00:00
}
2019-01-29 16:31:20 +00:00
if ( $product -> is_on_sale () ) {
$classes [] = 'sale' ;
2018-04-06 16:58:59 +00:00
}
2019-01-29 16:31:20 +00:00
if ( $product -> is_featured () ) {
$classes [] = 'featured' ;
}
if ( $product -> is_downloadable () ) {
$classes [] = 'downloadable' ;
}
if ( $product -> is_virtual () ) {
$classes [] = 'virtual' ;
}
if ( $product -> is_sold_individually () ) {
$classes [] = 'sold-individually' ;
}
if ( $product -> is_taxable () ) {
$classes [] = 'taxable' ;
}
if ( $product -> is_shipping_taxable () ) {
$classes [] = 'shipping-taxable' ;
}
if ( $product -> is_purchasable () ) {
$classes [] = 'purchasable' ;
}
if ( $product -> get_type () ) {
$classes [] = 'product-type-' . $product -> get_type ();
}
if ( $product -> is_type ( 'variable' ) && $product -> get_default_attributes () ) {
$classes [] = 'has-default-attributes' ;
2018-04-06 16:58:59 +00:00
}
2019-01-29 16:31:20 +00:00
// Include attributes and any extra taxonomies only if enabled via the hook - this is a performance issue.
2018-04-06 16:58:59 +00:00
if ( apply_filters ( 'woocommerce_get_product_class_include_taxonomies' , false ) ) {
$taxonomies = get_taxonomies ( array ( 'public' => true ) );
2019-02-06 21:00:07 +00:00
$type = 'variation' === $product -> get_type () ? 'product_variation' : 'product' ;
2018-04-06 16:58:59 +00:00
foreach ( ( array ) $taxonomies as $taxonomy ) {
2019-02-06 21:00:07 +00:00
if ( is_object_in_taxonomy ( $type , $taxonomy ) && ! in_array ( $taxonomy , array ( 'product_cat' , 'product_tag' ), true ) ) {
$classes = array_merge ( $classes , wc_get_product_taxonomy_class ( ( array ) get_the_terms ( $product -> get_id (), $taxonomy ), $taxonomy ) );
2018-04-06 16:58:59 +00:00
}
}
}
2018-04-17 15:14:18 +00:00
2019-04-18 18:27:00 +00:00
/**
* WooCommerce Post Class filter .
*
* @ since 3.6 . 2
2020-05-31 12:43:44 +00:00
* @ param array $classes Array of CSS classes .
2019-04-18 18:27:00 +00:00
* @ param WC_Product $product Product object .
*/
$classes = apply_filters ( 'woocommerce_post_class' , $classes , $product );
2019-01-29 16:31:20 +00:00
2019-04-23 17:04:20 +00:00
return array_map ( 'esc_attr' , array_unique ( array_filter ( $classes ) ) );
2018-04-06 16:58:59 +00:00
}
/**
* Display the classes for the product div .
*
* @ since 3.4 . 0
* @ param string | array $class One or more classes to add to the class list .
* @ param int | WP_Post | WC_Product $product_id Product ID or product object .
*/
function wc_product_class ( $class = '' , $product_id = null ) {
2019-04-18 18:33:48 +00:00
echo 'class="' . esc_attr ( implode ( ' ' , wc_get_product_class ( $class , $product_id ) ) ) . '"' ;
2018-04-06 16:58:59 +00:00
}
2016-07-27 13:10:31 +00:00
/**
* Outputs hidden form inputs for each query string variable .
2017-05-12 08:48:46 +00:00
*
2017-10-20 17:24:56 +00:00
* @ since 3.0 . 0
2018-05-22 09:53:08 +00:00
* @ param string | array $values Name value pairs , or a URL to parse .
* @ param array $exclude Keys to exclude .
* @ param string $current_key Current key we are outputting .
* @ param bool $return Whether to return .
2017-05-15 11:50:52 +00:00
* @ return string
2016-07-27 13:10:31 +00:00
*/
2016-08-04 12:37:39 +00:00
function wc_query_string_form_fields ( $values = null , $exclude = array (), $current_key = '' , $return = false ) {
2016-07-27 13:10:31 +00:00
if ( is_null ( $values ) ) {
2020-07-09 14:47:14 +00:00
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
2020-04-21 13:52:40 +00:00
$values = $_GET ;
2018-05-22 09:53:08 +00:00
} elseif ( is_string ( $values ) ) {
$url_parts = wp_parse_url ( $values );
$values = array ();
if ( ! empty ( $url_parts [ 'query' ] ) ) {
2019-04-26 16:58:27 +00:00
// This is to preserve full-stops, pluses and spaces in the query string when ran through parse_str.
2019-04-03 10:58:08 +00:00
$replace_chars = array (
2019-10-02 14:21:19 +00:00
'.' => '{dot}' ,
'+' => '{plus}' ,
2019-04-03 10:58:08 +00:00
);
$query_string = str_replace ( array_keys ( $replace_chars ), array_values ( $replace_chars ), $url_parts [ 'query' ] );
2019-04-02 12:58:37 +00:00
// Parse the string.
parse_str ( $query_string , $parsed_query_string );
2019-04-26 16:58:27 +00:00
// Convert the full-stops, pluses and spaces back and add to values array.
2019-04-02 12:58:37 +00:00
foreach ( $parsed_query_string as $key => $value ) {
2019-04-26 16:58:27 +00:00
$new_key = str_replace ( array_values ( $replace_chars ), array_keys ( $replace_chars ), $key );
$new_value = str_replace ( array_values ( $replace_chars ), array_keys ( $replace_chars ), $value );
$values [ $new_key ] = $new_value ;
2019-04-02 12:58:37 +00:00
}
2018-05-22 09:53:08 +00:00
}
2016-07-27 13:10:31 +00:00
}
2016-08-04 12:37:39 +00:00
$html = '' ;
2016-07-27 13:10:31 +00:00
foreach ( $values as $key => $value ) {
2016-08-04 12:09:21 +00:00
if ( in_array ( $key , $exclude , true ) ) {
2016-07-27 13:10:31 +00:00
continue ;
}
2016-08-01 10:55:45 +00:00
if ( $current_key ) {
$key = $current_key . '[' . $key . ']' ;
2016-07-27 13:10:31 +00:00
}
if ( is_array ( $value ) ) {
2016-08-04 12:37:39 +00:00
$html .= wc_query_string_form_fields ( $value , $exclude , $key , true );
2016-07-27 13:10:31 +00:00
} else {
2017-11-20 12:14:05 +00:00
$html .= '<input type="hidden" name="' . esc_attr ( $key ) . '" value="' . esc_attr ( wp_unslash ( $value ) ) . '" />' ;
2016-07-27 13:10:31 +00:00
}
}
2016-08-04 12:37:39 +00:00
if ( $return ) {
return $html ;
}
2018-05-16 03:08:49 +00:00
2019-10-02 14:21:19 +00:00
echo $html ; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2016-07-27 13:10:31 +00:00
}
2018-04-06 10:51:03 +00:00
/**
2018-04-16 16:56:44 +00:00
* Get the terms and conditons page ID .
2018-04-06 10:51:03 +00:00
*
2018-04-16 16:56:44 +00:00
* @ since 3.4 . 0
* @ return int
*/
function wc_terms_and_conditions_page_id () {
$page_id = wc_get_page_id ( 'terms' );
return apply_filters ( 'woocommerce_terms_and_conditions_page_id' , 0 < $page_id ? absint ( $page_id ) : 0 );
}
/**
* Get the privacy policy page ID .
*
* @ since 3.4 . 0
* @ return int
*/
function wc_privacy_policy_page_id () {
$page_id = get_option ( 'wp_page_for_privacy_policy' , 0 );
return apply_filters ( 'woocommerce_privacy_policy_page_id' , 0 < $page_id ? absint ( $page_id ) : 0 );
}
/**
* See if the checkbox is enabled or not based on the existance of the terms page and checkbox text .
2018-04-06 10:51:03 +00:00
*
* @ since 3.4 . 0
* @ return bool
*/
2018-04-16 16:56:44 +00:00
function wc_terms_and_conditions_checkbox_enabled () {
2018-05-22 10:19:39 +00:00
$page_id = wc_terms_and_conditions_page_id ();
$page = $page_id ? get_post ( $page_id ) : false ;
2018-05-07 09:05:38 +00:00
return $page && wc_get_terms_and_conditions_checkbox_text ();
2018-04-06 10:51:03 +00:00
}
2018-04-06 10:43:30 +00:00
/**
2018-04-16 16:56:44 +00:00
* Get the terms and conditons checkbox text , if set .
2018-04-06 10:43:30 +00:00
*
* @ since 3.4 . 0
2018-04-16 16:56:44 +00:00
* @ return string
2018-04-06 10:43:30 +00:00
*/
2018-04-16 16:56:44 +00:00
function wc_get_terms_and_conditions_checkbox_text () {
2018-05-03 13:50:39 +00:00
/* translators: %s terms and conditions page name and link */
return trim ( apply_filters ( 'woocommerce_get_terms_and_conditions_checkbox_text' , get_option ( 'woocommerce_checkout_terms_and_conditions_checkbox_text' , sprintf ( __ ( 'I have read and agree to the website %s' , 'woocommerce' ), '[terms]' ) ) ) );
2018-04-16 16:56:44 +00:00
}
2018-04-11 15:41:39 +00:00
2018-04-16 16:56:44 +00:00
/**
* Get the privacy policy text , if set .
*
* @ since 3.4 . 0
2018-04-17 17:32:31 +00:00
* @ param string $type Type of policy to load . Valid values include registration and checkout .
2018-04-16 16:56:44 +00:00
* @ return string
*/
2018-04-17 17:32:31 +00:00
function wc_get_privacy_policy_text ( $type = '' ) {
2018-04-18 10:05:36 +00:00
$text = '' ;
2018-04-17 17:32:31 +00:00
switch ( $type ) {
case 'checkout' :
2018-05-03 13:50:39 +00:00
/* translators: %s privacy policy page name and link */
$text = get_option ( 'woocommerce_checkout_privacy_policy_text' , sprintf ( __ ( 'Your personal data will be used to process your order, support your experience throughout this website, and for other purposes described in our %s.' , 'woocommerce' ), '[privacy_policy]' ) );
2018-04-17 17:32:31 +00:00
break ;
case 'registration' :
2018-05-03 13:50:39 +00:00
/* translators: %s privacy policy page name and link */
$text = get_option ( 'woocommerce_registration_privacy_policy_text' , sprintf ( __ ( 'Your personal data will be used to support your experience throughout this website, to manage access to your account, and for other purposes described in our %s.' , 'woocommerce' ), '[privacy_policy]' ) );
2018-04-17 17:32:31 +00:00
break ;
}
return trim ( apply_filters ( 'woocommerce_get_privacy_policy_text' , $text , $type ) );
2018-04-16 16:56:44 +00:00
}
2018-04-11 15:41:39 +00:00
2018-04-16 16:56:44 +00:00
/**
* Output t & c checkbox text .
*
* @ since 3.4 . 0
*/
function wc_terms_and_conditions_checkbox_text () {
$text = wc_get_terms_and_conditions_checkbox_text ();
2018-04-11 15:41:39 +00:00
2018-04-16 16:56:44 +00:00
if ( ! $text ) {
return ;
2018-04-11 15:41:39 +00:00
}
2018-04-16 16:56:44 +00:00
echo wp_kses_post ( wc_replace_policy_page_link_placeholders ( $text ) );
2018-04-06 10:43:30 +00:00
}
/**
* Output t & c page ' s content ( if set ) . The page can be set from checkout settings .
*
* @ since 3.4 . 0
*/
2018-04-16 16:56:44 +00:00
function wc_terms_and_conditions_page_content () {
$terms_page_id = wc_terms_and_conditions_page_id ();
if ( ! $terms_page_id ) {
return ;
}
$page = get_post ( $terms_page_id );
2018-04-06 10:43:30 +00:00
2018-04-11 15:41:39 +00:00
if ( $page && 'publish' === $page -> post_status && $page -> post_content && ! has_shortcode ( $page -> post_content , 'woocommerce_checkout' ) ) {
echo '<div class="woocommerce-terms-and-conditions" style="display: none; max-height: 200px; overflow: auto;">' . wp_kses_post ( wc_format_content ( $page -> post_content ) ) . '</div>' ;
2018-04-06 10:43:30 +00:00
}
}
2018-04-26 11:11:11 +00:00
/**
* Render privacy policy text on the checkout .
*
* @ since 3.4 . 0
*/
function wc_checkout_privacy_policy_text () {
echo '<div class="woocommerce-privacy-policy-text">' ;
wc_privacy_policy_text ( 'checkout' );
echo '</div>' ;
}
/**
* Render privacy policy text on the register forms .
*
* @ since 3.4 . 0
*/
function wc_registration_privacy_policy_text () {
echo '<div class="woocommerce-privacy-policy-text">' ;
wc_privacy_policy_text ( 'registration' );
echo '</div>' ;
}
2018-04-06 10:43:30 +00:00
/**
2018-04-17 17:32:31 +00:00
* Output privacy policy text . This is custom text which can be added via the customizer / privacy settings section .
*
2018-04-20 01:19:36 +00:00
* Loads the relevant policy for the current page unless a specific policy text is required .
2018-04-06 10:43:30 +00:00
*
* @ since 3.4 . 0
2018-04-17 17:32:31 +00:00
* @ param string $type Type of policy to load . Valid values include registration and checkout .
2018-04-06 10:43:30 +00:00
*/
2018-04-26 11:11:11 +00:00
function wc_privacy_policy_text ( $type = 'checkout' ) {
2018-04-16 16:56:44 +00:00
if ( ! wc_privacy_policy_page_id () ) {
return ;
}
2018-04-26 11:11:11 +00:00
echo wp_kses_post ( wpautop ( wc_replace_policy_page_link_placeholders ( wc_get_privacy_policy_text ( $type ) ) ) );
2018-04-16 16:56:44 +00:00
}
/**
* Replaces placeholders with links to WooCommerce policy pages .
*
* @ since 3.4 . 0
* @ param string $text Text to find / replace within .
* @ return string
*/
function wc_replace_policy_page_link_placeholders ( $text ) {
2018-04-20 01:35:02 +00:00
$privacy_page_id = wc_privacy_policy_page_id ();
2018-04-16 16:56:44 +00:00
$terms_page_id = wc_terms_and_conditions_page_id ();
$privacy_link = $privacy_page_id ? '<a href="' . esc_url ( get_permalink ( $privacy_page_id ) ) . '" class="woocommerce-privacy-policy-link" target="_blank">' . __ ( 'privacy policy' , 'woocommerce' ) . '</a>' : __ ( 'privacy policy' , 'woocommerce' );
$terms_link = $terms_page_id ? '<a href="' . esc_url ( get_permalink ( $terms_page_id ) ) . '" class="woocommerce-terms-and-conditions-link" target="_blank">' . __ ( 'terms and conditions' , 'woocommerce' ) . '</a>' : __ ( 'terms and conditions' , 'woocommerce' );
2018-04-06 10:43:30 +00:00
2018-04-11 15:41:39 +00:00
$find_replace = array (
'[terms]' => $terms_link ,
'[privacy_policy]' => $privacy_link ,
);
2018-04-06 10:43:30 +00:00
2018-04-16 16:56:44 +00:00
return str_replace ( array_keys ( $find_replace ), array_values ( $find_replace ), $text );
2018-04-06 10:43:30 +00:00
}
2017-10-20 17:24:56 +00:00
/**
* Template pages
*/
2012-01-06 14:02:34 +00:00
2012-04-25 09:51:20 +00:00
if ( ! function_exists ( 'woocommerce_content' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output WooCommerce content .
*
2015-11-03 13:31:20 +00:00
* This function is only used in the optional 'woocommerce.php' template .
* which people can add to their themes to add basic woocommerce support .
2013-02-10 16:06:15 +00:00
* without hooks or modifying core templates .
2012-08-14 15:30:23 +00:00
*/
2012-01-06 14:02:34 +00:00
function woocommerce_content () {
2012-08-08 08:58:36 +00:00
2012-07-11 10:23:31 +00:00
if ( is_singular ( 'product' ) ) {
2012-08-08 08:58:36 +00:00
2017-11-20 22:19:09 +00:00
while ( have_posts () ) :
the_post ();
2013-11-25 12:45:04 +00:00
wc_get_template_part ( 'content' , 'single-product' );
2012-07-11 10:23:31 +00:00
endwhile ;
2012-04-25 09:51:20 +00:00
2017-11-20 22:19:09 +00:00
} else {
?>
2012-08-08 08:58:36 +00:00
2013-04-05 12:01:41 +00:00
< ? php if ( apply_filters ( 'woocommerce_show_page_title' , true ) ) : ?>
2013-11-25 14:16:26 +00:00
< h1 class = " page-title " >< ? php woocommerce_page_title (); ?> </h1>
2013-04-05 12:01:41 +00:00
< ? php endif ; ?>
2012-08-08 08:58:36 +00:00
2012-08-09 10:30:37 +00:00
< ? php do_action ( 'woocommerce_archive_description' ); ?>
2018-03-07 12:54:00 +00:00
< ? php if ( woocommerce_product_loop () ) : ?>
2012-08-08 08:58:36 +00:00
2016-09-02 01:51:31 +00:00
< ? php do_action ( 'woocommerce_before_shop_loop' ); ?>
2012-08-08 08:58:36 +00:00
2013-11-25 14:16:26 +00:00
< ? php woocommerce_product_loop_start (); ?>
2012-08-08 08:58:36 +00:00
2018-02-01 13:22:50 +00:00
< ? php if ( wc_get_loop_prop ( 'total' ) ) : ?>
< ? php while ( have_posts () ) : ?>
< ? php the_post (); ?>
< ? php wc_get_template_part ( 'content' , 'product' ); ?>
< ? php endwhile ; ?>
< ? php endif ; ?>
2012-08-08 08:58:36 +00:00
2013-11-25 14:16:26 +00:00
< ? php woocommerce_product_loop_end (); ?>
2012-08-08 08:58:36 +00:00
2016-09-02 01:51:31 +00:00
< ? php do_action ( 'woocommerce_after_shop_loop' ); ?>
2012-08-08 08:58:36 +00:00
2019-01-25 20:01:20 +00:00
< ? php
2019-01-16 12:25:19 +00:00
else :
do_action ( 'woocommerce_no_products_found' );
2017-11-20 22:19:09 +00:00
endif ;
2012-07-11 10:23:31 +00:00
}
2012-01-13 14:17:43 +00:00
}
2012-01-06 14:02:34 +00:00
}
2017-10-20 17:24:56 +00:00
/**
* Global
*/
2011-12-11 12:39:35 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_output_content_wrapper' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the start of the page wrapper .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_output_content_wrapper () {
2013-11-28 17:23:41 +00:00
wc_get_template ( 'global/wrapper-start.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_output_content_wrapper_end' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the end of the page wrapper .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_output_content_wrapper_end () {
2013-11-28 17:23:41 +00:00
wc_get_template ( 'global/wrapper-end.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_get_sidebar' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Get the shop sidebar template .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_get_sidebar () {
2013-11-28 17:23:41 +00:00
wc_get_template ( 'global/sidebar.php' );
2011-12-12 11:35:54 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_demo_store' ) ) {
2012-08-14 15:30:23 +00:00
/**
2015-11-03 13:31:20 +00:00
* Adds a demo store banner to the site if enabled .
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_demo_store () {
2015-07-16 16:06:12 +00:00
if ( ! is_store_notice_showing () ) {
2012-08-10 09:35:25 +00:00
return ;
2015-07-16 16:06:12 +00:00
}
2012-04-25 09:51:20 +00:00
2012-08-10 09:35:25 +00:00
$notice = get_option ( 'woocommerce_demo_store_notice' );
2015-07-16 19:55:48 +00:00
2015-07-16 16:06:12 +00:00
if ( empty ( $notice ) ) {
2012-08-10 09:35:25 +00:00
$notice = __ ( 'This is a demo store for testing purposes — no orders shall be fulfilled.' , 'woocommerce' );
2015-07-16 16:06:12 +00:00
}
2012-08-10 09:35:25 +00:00
2019-02-04 13:18:09 +00:00
$notice_id = md5 ( $notice );
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo apply_filters ( 'woocommerce_demo_store' , '<p class="woocommerce-store-notice demo_store" data-notice-id="' . esc_attr ( $notice_id ) . '" style="display:none;">' . wp_kses_post ( $notice ) . ' <a href="#" class="woocommerce-store-notice__dismiss-link">' . esc_html__ ( 'Dismiss' , 'woocommerce' ) . '</a></p>' , $notice );
2011-12-12 12:28:07 +00:00
}
}
2017-10-20 17:24:56 +00:00
/**
* Loop
*/
2011-12-11 01:10:24 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_page_title' ) ) {
2012-11-04 16:01:40 +00:00
/**
2017-10-20 17:24:56 +00:00
* Page Title function .
2012-11-27 16:22:47 +00:00
*
2017-10-20 17:24:56 +00:00
* @ param bool $echo Should echo title .
2013-08-23 13:54:38 +00:00
* @ return string
2012-11-04 16:01:40 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_page_title ( $echo = true ) {
2012-11-27 16:22:47 +00:00
2012-11-04 16:01:40 +00:00
if ( is_search () ) {
2017-11-20 22:19:09 +00:00
/* translators: %s: search query */
2016-10-12 10:16:30 +00:00
$page_title = sprintf ( __ ( 'Search results: “%s”' , 'woocommerce' ), get_search_query () );
2012-11-27 16:22:47 +00:00
2017-03-07 20:24:24 +00:00
if ( get_query_var ( 'paged' ) ) {
2017-11-20 22:19:09 +00:00
/* translators: %s: page number */
2012-11-04 16:01:40 +00:00
$page_title .= sprintf ( __ ( ' – Page %s' , 'woocommerce' ), get_query_var ( 'paged' ) );
2017-03-07 20:24:24 +00:00
}
2012-11-04 16:01:40 +00:00
} elseif ( is_tax () ) {
2012-11-27 16:22:47 +00:00
2017-10-20 17:24:56 +00:00
$page_title = single_term_title ( '' , false );
2012-11-27 16:22:47 +00:00
2012-11-04 16:01:40 +00:00
} else {
2012-11-27 16:22:47 +00:00
2013-11-25 14:07:22 +00:00
$shop_page_id = wc_get_page_id ( 'shop' );
2013-03-18 12:43:38 +00:00
$page_title = get_the_title ( $shop_page_id );
2012-11-27 16:22:47 +00:00
2012-11-04 16:01:40 +00:00
}
2012-11-27 16:22:47 +00:00
2013-08-23 13:54:38 +00:00
$page_title = apply_filters ( 'woocommerce_page_title' , $page_title );
2017-03-07 20:24:24 +00:00
if ( $echo ) {
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo $page_title ;
2017-03-07 20:24:24 +00:00
} else {
2016-07-11 14:56:35 +00:00
return $page_title ;
2017-03-07 20:24:24 +00:00
}
2012-11-04 16:01:40 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_product_loop_start' ) ) {
2012-09-30 13:41:07 +00:00
/**
2015-11-03 13:31:20 +00:00
* Output the start of a product loop . By default this is a UL .
2012-09-30 13:41:07 +00:00
*
2017-10-20 17:24:56 +00:00
* @ param bool $echo Should echo ? .
2013-11-27 18:20:31 +00:00
* @ return string
2012-09-30 13:41:07 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_product_loop_start ( $echo = true ) {
2012-09-30 13:41:07 +00:00
ob_start ();
2017-11-08 20:00:23 +00:00
2017-12-06 18:10:19 +00:00
wc_set_loop_prop ( 'loop' , 0 );
2017-11-08 20:00:23 +00:00
2013-11-25 12:45:04 +00:00
wc_get_template ( 'loop/loop-start.php' );
2017-11-08 20:00:23 +00:00
2017-12-06 18:10:19 +00:00
$loop_start = apply_filters ( 'woocommerce_product_loop_start' , ob_get_clean () );
2017-03-07 20:24:24 +00:00
if ( $echo ) {
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo $loop_start ;
2017-03-07 20:24:24 +00:00
} else {
2017-12-06 18:10:19 +00:00
return $loop_start ;
2017-03-07 20:24:24 +00:00
}
2012-09-30 13:41:07 +00:00
}
}
2017-10-20 17:24:56 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_product_loop_end' ) ) {
2012-09-30 13:41:07 +00:00
/**
2015-11-03 13:31:20 +00:00
* Output the end of a product loop . By default this is a UL .
2012-09-30 13:41:07 +00:00
*
2017-10-20 17:24:56 +00:00
* @ param bool $echo Should echo ? .
2013-11-27 18:20:31 +00:00
* @ return string
2012-09-30 13:41:07 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_product_loop_end ( $echo = true ) {
2012-09-30 13:41:07 +00:00
ob_start ();
2013-02-10 16:06:15 +00:00
2013-11-25 12:45:04 +00:00
wc_get_template ( 'loop/loop-end.php' );
2013-02-10 16:06:15 +00:00
2017-12-06 18:10:19 +00:00
$loop_end = apply_filters ( 'woocommerce_product_loop_end' , ob_get_clean () );
2017-03-07 20:24:24 +00:00
if ( $echo ) {
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo $loop_end ;
2017-03-07 20:24:24 +00:00
} else {
2017-12-06 18:10:19 +00:00
return $loop_end ;
2017-03-07 20:24:24 +00:00
}
2012-09-30 13:41:07 +00:00
}
}
2016-08-27 06:16:28 +00:00
if ( ! function_exists ( 'woocommerce_template_loop_product_title' ) ) {
2015-07-20 17:36:12 +00:00
2015-07-20 17:10:56 +00:00
/**
2017-04-07 07:55:48 +00:00
* Show the product title in the product loop . By default this is an H2 .
2015-07-20 17:10:56 +00:00
*/
2016-08-19 22:37:03 +00:00
function woocommerce_template_loop_product_title () {
2019-02-13 14:45:00 +00:00
echo '<h2 class="' . esc_attr ( apply_filters ( 'woocommerce_product_loop_title_classes' , 'woocommerce-loop-product__title' ) ) . '">' . get_the_title () . '</h2>' ; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2015-07-20 17:10:56 +00:00
}
}
2016-08-27 06:16:28 +00:00
if ( ! function_exists ( 'woocommerce_template_loop_category_title' ) ) {
2015-10-01 14:12:50 +00:00
/**
* Show the subcategory title in the product loop .
2017-05-15 11:50:52 +00:00
*
2017-10-20 17:24:56 +00:00
* @ param object $category Category object .
2015-10-01 14:12:50 +00:00
*/
2015-10-01 14:28:57 +00:00
function woocommerce_template_loop_category_title ( $category ) {
2015-10-01 14:12:50 +00:00
?>
2016-08-16 10:34:38 +00:00
< h2 class = " woocommerce-loop-category__title " >
2015-10-01 14:12:50 +00:00
< ? php
2017-10-20 17:24:56 +00:00
echo esc_html ( $category -> name );
2015-10-01 14:12:50 +00:00
2017-10-20 17:24:56 +00:00
if ( $category -> count > 0 ) {
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo apply_filters ( 'woocommerce_subcategory_count_html' , ' <mark class="count">(' . esc_html ( $category -> count ) . ')</mark>' , $category );
2017-10-20 17:24:56 +00:00
}
2015-10-01 14:12:50 +00:00
?>
2016-07-29 18:41:19 +00:00
</ h2 >
2015-10-01 14:12:50 +00:00
< ? php
}
}
2017-12-01 09:28:42 +00:00
if ( ! function_exists ( 'woocommerce_template_loop_product_link_open' ) ) {
/**
* Insert the opening anchor tag for products in the loop .
*/
function woocommerce_template_loop_product_link_open () {
2017-12-25 08:20:40 +00:00
global $product ;
$link = apply_filters ( 'woocommerce_loop_product_link' , get_the_permalink (), $product );
echo '<a href="' . esc_url ( $link ) . '" class="woocommerce-LoopProduct-link woocommerce-loop-product__link">' ;
2017-12-01 09:28:42 +00:00
}
2015-10-01 13:49:35 +00:00
}
2017-12-01 09:28:42 +00:00
if ( ! function_exists ( 'woocommerce_template_loop_product_link_close' ) ) {
/**
2020-02-07 15:51:12 +00:00
* Insert the closing anchor tag for products in the loop .
2017-12-01 09:28:42 +00:00
*/
function woocommerce_template_loop_product_link_close () {
echo '</a>' ;
}
2015-10-01 13:49:35 +00:00
}
2017-05-15 11:50:52 +00:00
2017-12-01 09:28:42 +00:00
if ( ! function_exists ( 'woocommerce_template_loop_category_link_open' ) ) {
/**
* Insert the opening anchor tag for categories in the loop .
*
* @ param int | object | string $category Category ID , Object or String .
*/
function woocommerce_template_loop_category_link_open ( $category ) {
echo '<a href="' . esc_url ( get_term_link ( $category , 'product_cat' ) ) . '">' ;
}
2015-10-01 14:28:57 +00:00
}
2017-12-01 09:28:42 +00:00
if ( ! function_exists ( 'woocommerce_template_loop_category_link_close' ) ) {
/**
* Insert the closing anchor tag for categories in the loop .
*/
function woocommerce_template_loop_category_link_close () {
echo '</a>' ;
}
2015-10-01 14:28:57 +00:00
}
2017-12-01 09:28:42 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_taxonomy_archive_description' ) ) {
2012-08-14 15:30:23 +00:00
/**
2015-11-03 13:31:20 +00:00
* Show an archive description on taxonomy archives .
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_taxonomy_archive_description () {
2016-08-10 09:36:51 +00:00
if ( is_product_taxonomy () && 0 === absint ( get_query_var ( 'paged' ) ) ) {
2017-11-09 16:57:50 +00:00
$term = get_queried_object ();
if ( $term && ! empty ( $term -> description ) ) {
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo '<div class="term-description">' . wc_format_content ( $term -> description ) . '</div>' ;
2013-01-03 11:24:23 +00:00
}
2013-01-03 10:19:52 +00:00
}
2012-08-09 10:25:34 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_product_archive_description' ) ) {
2012-08-14 15:30:23 +00:00
/**
2015-11-03 13:31:20 +00:00
* Show a shop page description on product archives .
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_product_archive_description () {
2017-10-20 17:24:56 +00:00
// Don't display the description on search results page.
2016-07-24 17:04:25 +00:00
if ( is_search () ) {
return ;
}
2016-07-28 14:06:51 +00:00
2018-02-23 08:14:59 +00:00
if ( is_post_type_archive ( 'product' ) && in_array ( absint ( get_query_var ( 'paged' ) ), array ( 0 , 1 ), true ) ) {
2017-11-01 16:16:19 +00:00
$shop_page = get_post ( wc_get_page_id ( 'shop' ) );
2013-11-18 14:11:40 +00:00
if ( $shop_page ) {
2015-01-16 12:32:41 +00:00
$description = wc_format_content ( $shop_page -> post_content );
2013-11-18 14:11:40 +00:00
if ( $description ) {
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo '<div class="page-description">' . $description . '</div>' ;
2013-11-18 14:11:40 +00:00
}
2013-01-03 11:24:23 +00:00
}
2013-01-03 10:19:52 +00:00
}
2012-08-09 10:25:34 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_loop_add_to_cart' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Get the add to cart template for the loop .
*
2017-10-20 17:24:56 +00:00
* @ param array $args Arguments .
2012-08-14 15:30:23 +00:00
*/
2014-02-28 21:43:31 +00:00
function woocommerce_template_loop_add_to_cart ( $args = array () ) {
2015-12-04 11:50:32 +00:00
global $product ;
if ( $product ) {
$defaults = array (
2018-01-30 11:45:00 +00:00
'quantity' => 1 ,
2018-11-21 11:48:35 +00:00
'class' => implode (
' ' ,
array_filter (
array (
'button' ,
'product_type_' . $product -> get_type (),
$product -> is_purchasable () && $product -> is_in_stock () ? 'add_to_cart_button' : '' ,
$product -> supports ( 'ajax_add_to_cart' ) && $product -> is_purchasable () && $product -> is_in_stock () ? 'ajax_add_to_cart' : '' ,
)
)
),
2017-12-11 13:09:21 +00:00
'attributes' => array (
'data-product_id' => $product -> get_id (),
'data-product_sku' => $product -> get_sku (),
'aria-label' => $product -> add_to_cart_description (),
'rel' => 'nofollow' ,
),
2015-12-04 11:50:32 +00:00
);
$args = apply_filters ( 'woocommerce_loop_add_to_cart_args' , wp_parse_args ( $args , $defaults ), $product );
2018-03-28 09:19:03 +00:00
if ( isset ( $args [ 'attributes' ][ 'aria-label' ] ) ) {
2019-01-16 12:25:19 +00:00
$args [ 'attributes' ][ 'aria-label' ] = wp_strip_all_tags ( $args [ 'attributes' ][ 'aria-label' ] );
2018-03-27 15:19:49 +00:00
}
2015-12-04 11:50:32 +00:00
wc_get_template ( 'loop/add-to-cart.php' , $args );
}
2011-08-10 17:11:11 +00:00
}
}
2017-12-11 13:09:21 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_loop_product_thumbnail' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Get the product thumbnail for the loop .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_loop_product_thumbnail () {
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo woocommerce_get_product_thumbnail ();
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_loop_price' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Get the product price for the loop .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_loop_price () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'loop/price.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_loop_rating' ) ) {
2013-01-12 10:53:24 +00:00
/**
2015-11-03 13:31:20 +00:00
* Display the average rating in the loop .
2013-01-12 10:53:24 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_loop_rating () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'loop/rating.php' );
2013-01-12 10:53:24 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_show_product_loop_sale_flash' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Get the sale flash for the loop .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_show_product_loop_sale_flash () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'loop/sale-flash.php' );
2011-12-11 14:40:25 +00:00
}
}
2013-08-09 16:11:15 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_get_product_thumbnail' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Get the product thumbnail , or the placeholder if not set .
*
2017-11-07 18:48:51 +00:00
* @ param string $size ( default : 'woocommerce_thumbnail' ) .
2017-10-20 17:24:56 +00:00
* @ param int $deprecated1 Deprecated since WooCommerce 2.0 ( default : 0 ) .
* @ param int $deprecated2 Deprecated since WooCommerce 2.0 ( default : 0 ) .
2012-08-14 15:30:23 +00:00
* @ return string
*/
2017-11-07 18:48:51 +00:00
function woocommerce_get_product_thumbnail ( $size = 'woocommerce_thumbnail' , $deprecated1 = 0 , $deprecated2 = 0 ) {
2017-05-22 21:07:51 +00:00
global $product ;
2016-05-24 23:55:43 +00:00
$image_size = apply_filters ( 'single_product_archive_thumbnail_size' , $size );
2011-12-12 11:35:54 +00:00
2017-05-23 18:28:35 +00:00
return $product ? $product -> get_image ( $image_size ) : '' ;
2011-12-12 11:35:54 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_result_count' ) ) {
2012-08-14 15:30:23 +00:00
/**
2012-10-14 12:06:37 +00:00
* Output the result count text ( Showing x - x of x results ) .
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_result_count () {
2017-12-06 19:03:14 +00:00
if ( ! wc_get_loop_prop ( 'is_paginated' ) || ! woocommerce_products_will_display () ) {
return ;
2017-12-06 18:10:19 +00:00
}
2017-12-06 19:03:14 +00:00
$args = array (
'total' => wc_get_loop_prop ( 'total' ),
'per_page' => wc_get_loop_prop ( 'per_page' ),
'current' => wc_get_loop_prop ( 'current_page' ),
);
wc_get_template ( 'loop/result-count.php' , $args );
2011-12-11 01:10:24 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_catalog_ordering' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product sorting options .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_catalog_ordering () {
2017-12-06 19:03:14 +00:00
if ( ! wc_get_loop_prop ( 'is_paginated' ) || ! woocommerce_products_will_display () ) {
2014-07-30 16:23:24 +00:00
return ;
}
2019-04-22 16:18:48 +00:00
$show_default_orderby = 'menu_order' === apply_filters ( 'woocommerce_default_catalog_orderby' , get_option ( 'woocommerce_default_catalog_orderby' , 'menu_order' ) );
2018-11-21 11:48:35 +00:00
$catalog_orderby_options = apply_filters (
'woocommerce_catalog_orderby' ,
array (
'menu_order' => __ ( 'Default sorting' , 'woocommerce' ),
'popularity' => __ ( 'Sort by popularity' , 'woocommerce' ),
'rating' => __ ( 'Sort by average rating' , 'woocommerce' ),
'date' => __ ( 'Sort by latest' , 'woocommerce' ),
'price' => __ ( 'Sort by price: low to high' , 'woocommerce' ),
'price-desc' => __ ( 'Sort by price: high to low' , 'woocommerce' ),
)
);
2014-07-30 16:23:24 +00:00
2018-03-16 18:13:21 +00:00
$default_orderby = wc_get_loop_prop ( 'is_search' ) ? 'relevance' : apply_filters ( 'woocommerce_default_catalog_orderby' , get_option ( 'woocommerce_default_catalog_orderby' , '' ) );
2020-04-21 13:52:40 +00:00
// phpcs:disable WordPress.Security.NonceVerification.Recommended
$orderby = isset ( $_GET [ 'orderby' ] ) ? wc_clean ( wp_unslash ( $_GET [ 'orderby' ] ) ) : $default_orderby ;
// phpcs:enable WordPress.Security.NonceVerification.Recommended
2018-03-13 10:43:58 +00:00
2017-12-06 18:10:19 +00:00
if ( wc_get_loop_prop ( 'is_search' ) ) {
2017-08-24 11:58:50 +00:00
$catalog_orderby_options = array_merge ( array ( 'relevance' => __ ( 'Relevance' , 'woocommerce' ) ), $catalog_orderby_options );
2018-03-13 10:43:58 +00:00
2017-08-24 11:58:50 +00:00
unset ( $catalog_orderby_options [ 'menu_order' ] );
}
2014-07-30 16:23:24 +00:00
if ( ! $show_default_orderby ) {
unset ( $catalog_orderby_options [ 'menu_order' ] );
}
2019-01-17 06:04:57 +00:00
if ( ! wc_review_ratings_enabled () ) {
2014-07-30 16:23:24 +00:00
unset ( $catalog_orderby_options [ 'rating' ] );
}
2018-03-13 10:43:58 +00:00
if ( ! array_key_exists ( $orderby , $catalog_orderby_options ) ) {
$orderby = current ( array_keys ( $catalog_orderby_options ) );
}
2018-11-21 11:48:35 +00:00
wc_get_template (
'loop/orderby.php' ,
array (
'catalog_orderby_options' => $catalog_orderby_options ,
'orderby' => $orderby ,
'show_default_orderby' => $show_default_orderby ,
)
);
2011-12-11 01:10:24 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_pagination' ) ) {
2012-10-14 12:06:37 +00:00
/**
2017-12-07 22:29:07 +00:00
* Output the pagination .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_pagination () {
2017-12-06 19:03:14 +00:00
if ( ! wc_get_loop_prop ( 'is_paginated' ) || ! woocommerce_products_will_display () ) {
return ;
}
2018-05-24 17:23:10 +00:00
2017-12-06 19:03:14 +00:00
$args = array (
'total' => wc_get_loop_prop ( 'total_pages' ),
'current' => wc_get_loop_prop ( 'current_page' ),
2018-05-24 17:23:10 +00:00
'base' => esc_url_raw ( add_query_arg ( 'product-page' , '%#%' , false ) ),
'format' => '?product-page=%#%' ,
2017-12-06 19:03:14 +00:00
);
2017-11-08 16:39:28 +00:00
2018-05-24 17:23:10 +00:00
if ( ! wc_get_loop_prop ( 'is_shortcode' ) ) {
2017-12-06 19:03:14 +00:00
$args [ 'format' ] = '' ;
2018-05-24 17:23:10 +00:00
$args [ 'base' ] = esc_url_raw ( str_replace ( 999999999 , '%#%' , remove_query_arg ( 'add-to-cart' , get_pagenum_link ( 999999999 , false ) ) ) );
2017-12-06 18:10:19 +00:00
}
2017-12-06 19:03:14 +00:00
wc_get_template ( 'loop/pagination.php' , $args );
2012-10-14 12:06:37 +00:00
}
}
2017-10-20 17:24:56 +00:00
/**
* Single Product
*/
2011-12-11 01:08:33 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_show_product_images' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product image before the single product summary .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_show_product_images () {
2020-10-26 13:26:29 +00:00
wc_get_template ( 'single-product/product-image.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_show_product_thumbnails' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product thumbnails .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_show_product_thumbnails () {
2020-10-26 13:26:29 +00:00
wc_get_template ( 'single-product/product-thumbnails.php' );
2011-08-10 17:11:11 +00:00
}
}
2017-10-20 17:24:56 +00:00
2018-02-12 17:48:45 +00:00
/**
* Get HTML for a gallery image .
*
2019-08-22 07:05:38 +00:00
* Hooks : woocommerce_gallery_thumbnail_size , woocommerce_gallery_image_size and woocommerce_gallery_full_size accept name based image sizes , or an array of width / height values .
2018-02-13 19:18:13 +00:00
*
2018-02-12 17:48:45 +00:00
* @ since 3.3 . 2
2018-02-23 08:16:22 +00:00
* @ param int $attachment_id Attachment ID .
* @ param bool $main_image Is this the main image or a thumbnail ? .
2018-02-12 17:48:45 +00:00
* @ return string
*/
2018-02-12 17:57:31 +00:00
function wc_get_gallery_image_html ( $attachment_id , $main_image = false ) {
2018-02-12 17:48:45 +00:00
$flexslider = ( bool ) apply_filters ( 'woocommerce_single_product_flexslider_enabled' , get_theme_support ( 'wc-product-gallery-slider' ) );
$gallery_thumbnail = wc_get_image_size ( 'gallery_thumbnail' );
$thumbnail_size = apply_filters ( 'woocommerce_gallery_thumbnail_size' , array ( $gallery_thumbnail [ 'width' ], $gallery_thumbnail [ 'height' ] ) );
2018-02-23 08:16:22 +00:00
$image_size = apply_filters ( 'woocommerce_gallery_image_size' , $flexslider || $main_image ? 'woocommerce_single' : $thumbnail_size );
2018-02-12 17:48:45 +00:00
$full_size = apply_filters ( 'woocommerce_gallery_full_size' , apply_filters ( 'woocommerce_product_thumbnails_large_size' , 'full' ) );
$thumbnail_src = wp_get_attachment_image_src ( $attachment_id , $thumbnail_size );
$full_src = wp_get_attachment_image_src ( $attachment_id , $full_size );
2019-02-26 14:03:25 +00:00
$alt_text = trim ( wp_strip_all_tags ( get_post_meta ( $attachment_id , '_wp_attachment_image_alt' , true ) ) );
2018-11-21 11:48:35 +00:00
$image = wp_get_attachment_image (
$attachment_id ,
$image_size ,
false ,
apply_filters (
'woocommerce_gallery_image_html_attachment_image_params' ,
array (
2019-02-14 11:10:11 +00:00
'title' => _wp_specialchars ( get_post_field ( 'post_title' , $attachment_id ), ENT_QUOTES , 'UTF-8' , true ),
'data-caption' => _wp_specialchars ( get_post_field ( 'post_excerpt' , $attachment_id ), ENT_QUOTES , 'UTF-8' , true ),
'data-src' => esc_url ( $full_src [ 0 ] ),
'data-large_image' => esc_url ( $full_src [ 0 ] ),
'data-large_image_width' => esc_attr ( $full_src [ 1 ] ),
'data-large_image_height' => esc_attr ( $full_src [ 2 ] ),
'class' => esc_attr ( $main_image ? 'wp-post-image' : '' ),
2018-11-21 11:48:35 +00:00
),
$attachment_id ,
2018-11-21 11:52:55 +00:00
$image_size ,
$main_image
2018-11-21 11:48:35 +00:00
)
2018-11-21 11:47:24 +00:00
);
2018-02-12 17:48:45 +00:00
2019-02-26 14:03:25 +00:00
return '<div data-thumb="' . esc_url ( $thumbnail_src [ 0 ] ) . '" data-thumb-alt="' . esc_attr ( $alt_text ) . '" class="woocommerce-product-gallery__image"><a href="' . esc_url ( $full_src [ 0 ] ) . '">' . $image . '</a></div>' ;
2018-02-12 17:48:45 +00:00
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_output_product_data_tabs' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product tabs .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_output_product_data_tabs () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/tabs/tabs.php' );
2012-03-13 12:52:53 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_single_title' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product title .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_single_title () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/title.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_single_rating' ) ) {
2013-10-31 16:26:20 +00:00
/**
* Output the product rating .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_single_rating () {
2017-06-08 14:26:30 +00:00
if ( post_type_supports ( 'product' , 'comments' ) ) {
wc_get_template ( 'single-product/rating.php' );
}
2013-10-31 16:26:20 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_single_price' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product price .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_single_price () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/price.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_single_excerpt' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product short description ( excerpt ) .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_single_excerpt () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/short-description.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_single_meta' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product meta .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_single_meta () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/meta.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_single_sharing' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product sharing .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_single_sharing () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/share.php' );
2011-09-04 00:02:44 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_show_product_sale_flash' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product sale flash .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_show_product_sale_flash () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/sale-flash.php' );
2011-12-11 14:40:25 +00:00
}
}
2011-09-04 00:02:44 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_single_add_to_cart' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Trigger the single product add to cart action .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_single_add_to_cart () {
2011-12-11 15:20:34 +00:00
global $product ;
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
do_action ( 'woocommerce_' . $product -> get_type () . '_add_to_cart' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_simple_add_to_cart' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the simple product add to cart area .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_simple_add_to_cart () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/add-to-cart/simple.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_grouped_add_to_cart' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the grouped product add to cart area .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_grouped_add_to_cart () {
2013-09-25 11:35:06 +00:00
global $product ;
2017-06-20 14:01:14 +00:00
$products = array_filter ( array_map ( 'wc_get_product' , $product -> get_children () ), 'wc_products_array_filter_visible_grouped' );
2017-04-25 11:08:17 +00:00
if ( $products ) {
2018-11-21 11:48:35 +00:00
wc_get_template (
'single-product/add-to-cart/grouped.php' ,
array (
'grouped_product' => $product ,
'grouped_products' => $products ,
'quantites_required' => false ,
)
);
2017-04-25 11:08:17 +00:00
}
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_variable_add_to_cart' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the variable product add to cart area .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_variable_add_to_cart () {
2012-06-10 09:15:23 +00:00
global $product ;
2012-08-08 08:58:36 +00:00
2017-10-20 17:24:56 +00:00
// Enqueue variation scripts.
2012-07-17 14:09:18 +00:00
wp_enqueue_script ( 'wc-add-to-cart-variation' );
2012-08-08 08:58:36 +00:00
2015-07-09 14:58:58 +00:00
// Get Available variations?
2017-10-20 17:24:56 +00:00
$get_variations = count ( $product -> get_children () ) <= apply_filters ( 'woocommerce_ajax_variation_threshold' , 30 , $product );
2015-07-09 14:58:58 +00:00
2017-10-20 17:24:56 +00:00
// Load the template.
2018-11-21 11:48:35 +00:00
wc_get_template (
'single-product/add-to-cart/variable.php' ,
array (
'available_variations' => $get_variations ? $product -> get_available_variations () : false ,
'attributes' => $product -> get_variation_attributes (),
'selected_attributes' => $product -> get_default_attributes (),
)
);
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_external_add_to_cart' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the external product add to cart area .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_external_add_to_cart () {
2012-02-26 11:47:49 +00:00
global $product ;
2015-05-05 14:18:01 +00:00
if ( ! $product -> add_to_cart_url () ) {
2013-02-13 09:29:00 +00:00
return ;
2015-05-05 14:18:01 +00:00
}
2012-04-25 09:51:20 +00:00
2018-11-21 11:48:35 +00:00
wc_get_template (
'single-product/add-to-cart/external.php' ,
array (
'product_url' => $product -> add_to_cart_url (),
'button_text' => $product -> single_add_to_cart_text (),
)
);
2011-11-08 16:15:36 +00:00
}
}
2011-08-10 17:11:11 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_quantity_input' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the quantity input for add to cart forms .
2014-02-13 04:49:30 +00:00
*
2017-10-20 17:24:56 +00:00
* @ param array $args Args for the input .
* @ param WC_Product | null $product Product .
* @ param boolean $echo Whether to return or echo | string .
2017-05-12 08:48:46 +00:00
*
* @ return string
2012-08-14 15:30:23 +00:00
*/
2013-11-28 17:23:41 +00:00
function woocommerce_quantity_input ( $args = array (), $product = null , $echo = true ) {
2015-12-04 11:50:32 +00:00
if ( is_null ( $product ) ) {
2013-11-28 17:23:41 +00:00
$product = $GLOBALS [ 'product' ];
2015-12-04 11:50:32 +00:00
}
2012-11-27 16:22:47 +00:00
2011-12-11 14:40:25 +00:00
$defaults = array (
2018-11-21 07:49:38 +00:00
'input_id' => uniqid ( 'quantity_' ),
'input_name' => 'quantity' ,
'input_value' => '1' ,
2019-01-08 15:00:23 +00:00
'classes' => apply_filters ( 'woocommerce_quantity_input_classes' , array ( 'input-text' , 'qty' , 'text' ), $product ),
2018-11-21 07:49:38 +00:00
'max_value' => apply_filters ( 'woocommerce_quantity_input_max' , - 1 , $product ),
'min_value' => apply_filters ( 'woocommerce_quantity_input_min' , 0 , $product ),
'step' => apply_filters ( 'woocommerce_quantity_input_step' , 1 , $product ),
'pattern' => apply_filters ( 'woocommerce_quantity_input_pattern' , has_filter ( 'woocommerce_stock_amount' , 'intval' ) ? '[0-9]*' : '' ),
'inputmode' => apply_filters ( 'woocommerce_quantity_input_inputmode' , has_filter ( 'woocommerce_stock_amount' , 'intval' ) ? 'numeric' : '' ),
2018-11-26 19:16:58 +00:00
'product_name' => $product ? $product -> get_title () : '' ,
2020-01-20 17:27:45 +00:00
'placeholder' => apply_filters ( 'woocommerce_quantity_input_placeholder' , '' , $product ),
2011-12-11 14:40:25 +00:00
);
2012-11-19 14:05:03 +00:00
$args = apply_filters ( 'woocommerce_quantity_input_args' , wp_parse_args ( $args , $defaults ), $product );
2012-04-25 09:51:20 +00:00
2017-02-20 11:10:14 +00:00
// Apply sanity to min/max args - min cannot be lower than 0.
2017-03-17 12:57:18 +00:00
$args [ 'min_value' ] = max ( $args [ 'min_value' ], 0 );
$args [ 'max_value' ] = 0 < $args [ 'max_value' ] ? $args [ 'max_value' ] : '' ;
2015-12-02 10:44:38 +00:00
2017-03-17 12:57:18 +00:00
// Max cannot be lower than min if defined.
if ( '' !== $args [ 'max_value' ] && $args [ 'max_value' ] < $args [ 'min_value' ] ) {
2017-02-20 11:10:14 +00:00
$args [ 'max_value' ] = $args [ 'min_value' ];
2015-12-02 10:44:38 +00:00
}
2013-11-28 17:23:41 +00:00
ob_start ();
wc_get_template ( 'global/quantity-input.php' , $args );
if ( $echo ) {
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo ob_get_clean ();
2013-11-28 17:23:41 +00:00
} else {
return ob_get_clean ();
}
2011-12-05 19:16:55 +00:00
}
}
2011-08-10 17:11:11 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_product_description_tab' ) ) {
2012-08-14 15:30:23 +00:00
/**
2013-02-10 17:33:13 +00:00
* Output the description tab content .
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_product_description_tab () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/tabs/description.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_product_additional_information_tab' ) ) {
2012-08-14 15:30:23 +00:00
/**
2013-02-10 17:33:13 +00:00
* Output the attributes tab content .
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_product_additional_information_tab () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/tabs/additional-information.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_default_product_tabs' ) ) {
2012-08-14 15:30:23 +00:00
/**
2013-02-10 17:33:13 +00:00
* Add default product tabs to product pages .
2012-08-14 15:30:23 +00:00
*
2017-10-20 17:24:56 +00:00
* @ param array $tabs Array of tabs .
2013-11-29 18:50:31 +00:00
* @ return array
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_default_product_tabs ( $tabs = array () ) {
2013-02-10 17:33:13 +00:00
global $product , $post ;
2012-08-14 15:30:23 +00:00
2017-10-20 17:24:56 +00:00
// Description tab - shows product content.
2014-01-13 11:39:54 +00:00
if ( $post -> post_content ) {
2013-02-10 17:33:13 +00:00
$tabs [ 'description' ] = array (
'title' => __ ( 'Description' , 'woocommerce' ),
'priority' => 10 ,
2016-08-27 01:46:45 +00:00
'callback' => 'woocommerce_product_description_tab' ,
2013-02-10 17:33:13 +00:00
);
2014-01-13 11:39:54 +00:00
}
2013-02-10 17:33:13 +00:00
2017-10-20 17:24:56 +00:00
// Additional information tab - shows attributes.
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
if ( $product && ( $product -> has_attributes () || apply_filters ( 'wc_product_enable_dimensions_display' , $product -> has_weight () || $product -> has_dimensions () ) ) ) {
2013-02-10 17:33:13 +00:00
$tabs [ 'additional_information' ] = array (
2016-10-12 10:16:30 +00:00
'title' => __ ( 'Additional information' , 'woocommerce' ),
2013-02-10 17:33:13 +00:00
'priority' => 20 ,
2016-08-27 01:46:45 +00:00
'callback' => 'woocommerce_product_additional_information_tab' ,
2013-02-10 17:33:13 +00:00
);
2014-01-13 11:39:54 +00:00
}
2013-02-10 17:33:13 +00:00
2017-10-20 17:24:56 +00:00
// Reviews tab - shows comments.
2014-01-13 11:39:54 +00:00
if ( comments_open () ) {
2013-02-10 17:33:13 +00:00
$tabs [ 'reviews' ] = array (
2017-11-20 22:19:09 +00:00
/* translators: %s: reviews count */
2015-02-11 22:55:16 +00:00
'title' => sprintf ( __ ( 'Reviews (%d)' , 'woocommerce' ), $product -> get_review_count () ),
2013-02-10 17:33:13 +00:00
'priority' => 30 ,
2016-08-27 01:46:45 +00:00
'callback' => 'comments_template' ,
2013-02-10 17:33:13 +00:00
);
2014-01-13 11:39:54 +00:00
}
2013-02-10 17:33:13 +00:00
return $tabs ;
2011-08-10 17:11:11 +00:00
}
}
2013-02-10 17:33:13 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_sort_product_tabs' ) ) {
2012-08-14 15:30:23 +00:00
/**
2015-11-03 13:31:20 +00:00
* Sort tabs by priority .
2012-08-14 15:30:23 +00:00
*
2017-10-20 17:24:56 +00:00
* @ param array $tabs Array of tabs .
2013-11-28 17:59:09 +00:00
* @ return array
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_sort_product_tabs ( $tabs = array () ) {
2014-02-13 04:49:30 +00:00
2017-10-20 17:24:56 +00:00
// Make sure the $tabs parameter is an array.
2013-08-27 15:40:21 +00:00
if ( ! is_array ( $tabs ) ) {
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error
trigger_error ( 'Function woocommerce_sort_product_tabs() expects an array as the first parameter. Defaulting to empty array.' );
2016-08-27 02:48:53 +00:00
$tabs = array ();
2013-08-27 15:40:21 +00:00
}
2017-10-20 17:24:56 +00:00
// Re-order tabs by priority.
2013-02-10 17:33:13 +00:00
if ( ! function_exists ( '_sort_priority_callback' ) ) {
2017-10-20 17:24:56 +00:00
/**
* Sort Priority Callback Function
*
* @ param array $a Comparison A .
* @ param array $b Comparison B .
* @ return bool
*/
2013-02-10 17:33:13 +00:00
function _sort_priority_callback ( $a , $b ) {
2017-11-02 11:13:24 +00:00
if ( ! isset ( $a [ 'priority' ], $b [ 'priority' ] ) || $a [ 'priority' ] === $b [ 'priority' ] ) {
2016-07-11 14:56:35 +00:00
return 0 ;
2017-03-07 20:24:24 +00:00
}
2016-07-11 14:56:35 +00:00
return ( $a [ 'priority' ] < $b [ 'priority' ] ) ? - 1 : 1 ;
2013-02-10 17:33:13 +00:00
}
}
uasort ( $tabs , '_sort_priority_callback' );
return $tabs ;
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_comments' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the Review comments template .
*
2017-10-20 17:24:56 +00:00
* @ param WP_Comment $comment Comment object .
* @ param array $args Arguments .
* @ param int $depth Depth .
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_comments ( $comment , $args , $depth ) {
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
$GLOBALS [ 'comment' ] = $comment ;
2018-11-21 11:48:35 +00:00
wc_get_template (
'single-product/review.php' ,
array (
'comment' => $comment ,
'args' => $args ,
'depth' => $depth ,
)
);
2011-12-12 12:28:07 +00:00
}
}
2011-08-10 17:11:11 +00:00
2016-03-07 15:33:44 +00:00
if ( ! function_exists ( 'woocommerce_review_display_gravatar' ) ) {
/**
* Display the review authors gravatar
*
* @ param array $comment WP_Comment .
* @ return void
*/
function woocommerce_review_display_gravatar ( $comment ) {
echo get_avatar ( $comment , apply_filters ( 'woocommerce_review_gravatar_size' , '60' ), '' );
}
}
if ( ! function_exists ( 'woocommerce_review_display_rating' ) ) {
/**
* Display the reviewers star rating
*
* @ return void
*/
function woocommerce_review_display_rating () {
2017-06-08 14:26:30 +00:00
if ( post_type_supports ( 'product' , 'comments' ) ) {
wc_get_template ( 'single-product/review-rating.php' );
}
2016-03-07 15:33:44 +00:00
}
}
if ( ! function_exists ( 'woocommerce_review_display_meta' ) ) {
/**
* Display the review authors meta ( name , verified owner , review date )
*
* @ return void
*/
function woocommerce_review_display_meta () {
wc_get_template ( 'single-product/review-meta.php' );
}
}
if ( ! function_exists ( 'woocommerce_review_display_comment_text' ) ) {
2016-07-14 11:52:04 +00:00
2016-03-07 15:33:44 +00:00
/**
2016-07-14 11:52:04 +00:00
* Display the review content .
2016-03-07 15:33:44 +00:00
*/
function woocommerce_review_display_comment_text () {
2016-07-17 02:42:46 +00:00
echo '<div class="description">' ;
2016-07-14 11:52:04 +00:00
comment_text ();
echo '</div>' ;
2016-03-07 15:33:44 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_output_related_products' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the related products .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_output_related_products () {
2013-05-16 12:39:53 +00:00
$args = array (
2017-11-20 22:19:09 +00:00
'posts_per_page' => 4 ,
'columns' => 4 ,
2018-01-30 11:45:00 +00:00
'orderby' => 'rand' , // @codingStandardsIgnoreLine.
2013-05-16 12:39:53 +00:00
);
2013-11-25 14:16:26 +00:00
woocommerce_related_products ( apply_filters ( 'woocommerce_output_related_products_args' , $args ) );
2011-08-10 17:11:11 +00:00
}
}
2011-11-24 00:24:24 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_related_products' ) ) {
2012-11-27 16:22:47 +00:00
2012-08-14 15:30:23 +00:00
/**
* Output the related products .
2012-11-27 16:22:47 +00:00
*
2017-10-20 17:24:56 +00:00
* @ param array $args Provided arguments .
2012-08-14 15:30:23 +00:00
*/
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
function woocommerce_related_products ( $args = array () ) {
2017-12-06 18:10:19 +00:00
global $product ;
2013-05-16 12:39:53 +00:00
2017-04-11 18:21:13 +00:00
if ( ! $product ) {
return ;
}
2013-05-16 12:39:53 +00:00
$defaults = array (
'posts_per_page' => 2 ,
2013-05-17 06:55:55 +00:00
'columns' => 2 ,
2018-01-30 11:45:00 +00:00
'orderby' => 'rand' , // @codingStandardsIgnoreLine.
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
'order' => 'desc' ,
2013-05-16 12:39:53 +00:00
);
$args = wp_parse_args ( $args , $defaults );
2017-07-17 10:10:52 +00:00
// Get visible related products then sort them at random.
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
$args [ 'related_products' ] = array_filter ( array_map ( 'wc_get_product' , wc_get_related_products ( $product -> get_id (), $args [ 'posts_per_page' ], $product -> get_upsell_ids () ) ), 'wc_products_array_filter_visible' );
// Handle orderby.
$args [ 'related_products' ] = wc_products_array_orderby ( $args [ 'related_products' ], $args [ 'orderby' ], $args [ 'order' ] );
// Set global loop values.
2017-12-06 18:10:19 +00:00
wc_set_loop_prop ( 'name' , 'related' );
wc_set_loop_prop ( 'columns' , apply_filters ( 'woocommerce_related_products_columns' , $args [ 'columns' ] ) );
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/related.php' , $args );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_upsell_display' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output product up sells .
2012-11-27 16:22:47 +00:00
*
2017-10-20 17:24:56 +00:00
* @ param int $limit ( default : - 1 ) .
* @ param int $columns ( default : 4 ) .
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
* @ param string $orderby Supported values - rand , title , ID , date , modified , menu_order , price .
* @ param string $order Sort direction .
2012-08-14 15:30:23 +00:00
*/
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
function woocommerce_upsell_display ( $limit = '-1' , $columns = 4 , $orderby = 'rand' , $order = 'desc' ) {
2017-12-06 18:10:19 +00:00
global $product ;
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
2017-04-11 18:21:13 +00:00
if ( ! $product ) {
return ;
}
2017-03-02 15:29:15 +00:00
// Handle the legacy filter which controlled posts per page etc.
2018-11-21 11:48:35 +00:00
$args = apply_filters (
'woocommerce_upsell_display_args' ,
array (
'posts_per_page' => $limit ,
'orderby' => $orderby ,
2019-12-20 17:27:07 +00:00
'order' => $order ,
2018-11-21 11:48:35 +00:00
'columns' => $columns ,
)
);
2017-12-06 18:10:19 +00:00
wc_set_loop_prop ( 'name' , 'up-sells' );
wc_set_loop_prop ( 'columns' , apply_filters ( 'woocommerce_upsells_columns' , isset ( $args [ 'columns' ] ) ? $args [ 'columns' ] : $columns ) );
2018-01-30 11:45:00 +00:00
$orderby = apply_filters ( 'woocommerce_upsells_orderby' , isset ( $args [ 'orderby' ] ) ? $args [ 'orderby' ] : $orderby );
2019-11-11 17:05:32 +00:00
$order = apply_filters ( 'woocommerce_upsells_order' , isset ( $args [ 'order' ] ) ? $args [ 'order' ] : $order );
2018-01-30 11:45:00 +00:00
$limit = apply_filters ( 'woocommerce_upsells_total' , isset ( $args [ 'posts_per_page' ] ) ? $args [ 'posts_per_page' ] : $limit );
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
2017-07-17 10:10:52 +00:00
// Get visible upsells then sort them at random, then limit result set.
2017-03-02 15:29:15 +00:00
$upsells = wc_products_array_orderby ( array_filter ( array_map ( 'wc_get_product' , $product -> get_upsell_ids () ), 'wc_products_array_filter_visible' ), $orderby , $order );
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
$upsells = $limit > 0 ? array_slice ( $upsells , 0 , $limit ) : $upsells ;
2015-09-21 20:30:37 +00:00
2018-11-21 11:48:35 +00:00
wc_get_template (
'single-product/up-sells.php' ,
array (
'upsells' => $upsells ,
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
2018-11-21 11:48:35 +00:00
// Not used now, but used in previous version of up-sells.php.
'posts_per_page' => $limit ,
'orderby' => $orderby ,
'columns' => $columns ,
)
);
2011-12-12 12:28:07 +00:00
}
}
2017-10-20 17:24:56 +00:00
/** Cart */
2011-12-11 14:40:25 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_shipping_calculator' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the cart shipping calculator .
2018-06-01 20:29:33 +00:00
*
* @ param string $button_text Text for the shipping calculation toggle .
2012-08-14 15:30:23 +00:00
*/
2018-06-01 20:29:33 +00:00
function woocommerce_shipping_calculator ( $button_text = '' ) {
if ( 'no' === get_option ( 'woocommerce_enable_shipping_calc' ) || ! WC () -> cart -> needs_shipping () ) {
return ;
}
wp_enqueue_script ( 'wc-country-select' );
2018-11-21 11:48:35 +00:00
wc_get_template (
'cart/shipping-calculator.php' ,
array (
'button_text' => $button_text ,
)
);
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_cart_totals' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the cart totals .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_cart_totals () {
2016-06-27 10:42:50 +00:00
if ( is_checkout () ) {
return ;
}
2013-11-25 12:45:04 +00:00
wc_get_template ( 'cart/cart-totals.php' );
2011-09-11 16:42:50 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_cross_sell_display' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the cart cross - sells .
*
2017-10-20 17:24:56 +00:00
* @ param int $limit ( default : 2 ) .
* @ param int $columns ( default : 2 ) .
* @ param string $orderby ( default : 'rand' ) .
* @ param string $order ( default : 'desc' ) .
2012-08-14 15:30:23 +00:00
*/
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
function woocommerce_cross_sell_display ( $limit = 2 , $columns = 2 , $orderby = 'rand' , $order = 'desc' ) {
2016-06-27 10:42:50 +00:00
if ( is_checkout () ) {
return ;
}
2017-07-11 18:37:43 +00:00
// Get visible cross sells then sort them at random.
2018-01-30 11:45:00 +00:00
$cross_sells = array_filter ( array_map ( 'wc_get_product' , WC () -> cart -> get_cross_sells () ), 'wc_products_array_filter_visible' );
2017-12-06 18:10:19 +00:00
wc_set_loop_prop ( 'name' , 'cross-sells' );
wc_set_loop_prop ( 'columns' , apply_filters ( 'woocommerce_cross_sells_columns' , $columns ) );
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
// Handle orderby and limit results.
$orderby = apply_filters ( 'woocommerce_cross_sells_orderby' , $orderby );
2017-10-20 16:11:00 +00:00
$order = apply_filters ( 'woocommerce_cross_sells_order' , $order );
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
$cross_sells = wc_products_array_orderby ( $cross_sells , $orderby , $order );
$limit = apply_filters ( 'woocommerce_cross_sells_total' , $limit );
$cross_sells = $limit > 0 ? array_slice ( $cross_sells , 0 , $limit ) : $cross_sells ;
2018-11-21 11:48:35 +00:00
wc_get_template (
'cart/cross-sells.php' ,
array (
'cross_sells' => $cross_sells ,
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
2018-11-21 11:48:35 +00:00
// Not used now, but used in previous version of up-sells.php.
'posts_per_page' => $limit ,
'orderby' => $orderby ,
'columns' => $columns ,
)
);
2011-12-12 12:28:07 +00:00
}
}
2014-10-06 11:33:36 +00:00
if ( ! function_exists ( 'woocommerce_button_proceed_to_checkout' ) ) {
/**
* Output the proceed to checkout button .
*/
function woocommerce_button_proceed_to_checkout () {
2015-05-28 10:48:33 +00:00
wc_get_template ( 'cart/proceed-to-checkout-button.php' );
2014-10-06 11:33:36 +00:00
}
}
2016-07-28 14:06:51 +00:00
if ( ! function_exists ( 'woocommerce_widget_shopping_cart_button_view_cart' ) ) {
/**
2017-07-06 11:54:28 +00:00
* Output the view cart button .
2016-07-28 14:06:51 +00:00
*/
function woocommerce_widget_shopping_cart_button_view_cart () {
2017-03-13 05:39:46 +00:00
echo '<a href="' . esc_url ( wc_get_cart_url () ) . '" class="button wc-forward">' . esc_html__ ( 'View cart' , 'woocommerce' ) . '</a>' ;
2016-07-28 14:06:51 +00:00
}
}
2014-10-06 11:33:36 +00:00
2016-07-28 14:06:51 +00:00
if ( ! function_exists ( 'woocommerce_widget_shopping_cart_proceed_to_checkout' ) ) {
/**
* Output the proceed to checkout button .
*/
function woocommerce_widget_shopping_cart_proceed_to_checkout () {
2017-03-13 05:39:46 +00:00
echo '<a href="' . esc_url ( wc_get_checkout_url () ) . '" class="button checkout wc-forward">' . esc_html__ ( 'Checkout' , 'woocommerce' ) . '</a>' ;
2016-07-28 14:06:51 +00:00
}
}
2014-10-06 11:33:36 +00:00
2019-07-14 17:27:42 +00:00
if ( ! function_exists ( 'woocommerce_widget_shopping_cart_subtotal' ) ) {
/**
* Output to view cart subtotal .
*
* @ since 3.7 . 0
*/
function woocommerce_widget_shopping_cart_subtotal () {
2020-06-05 15:22:34 +00:00
echo '<strong>' . esc_html__ ( 'Subtotal:' , 'woocommerce' ) . '</strong> ' . WC () -> cart -> get_cart_subtotal (); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2019-07-14 17:27:42 +00:00
}
}
2017-10-20 17:24:56 +00:00
/** Mini-Cart */
2012-07-25 17:59:12 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_mini_cart' ) ) {
2012-08-14 15:30:23 +00:00
/**
2015-11-03 13:31:20 +00:00
* Output the Mini - cart - used by cart widget .
2012-08-14 15:30:23 +00:00
*
2017-10-20 17:24:56 +00:00
* @ param array $args Arguments .
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_mini_cart ( $args = array () ) {
2012-08-08 08:58:36 +00:00
2012-07-25 17:59:12 +00:00
$defaults = array (
2016-08-27 01:46:45 +00:00
'list_class' => '' ,
2012-07-25 17:59:12 +00:00
);
$args = wp_parse_args ( $args , $defaults );
2012-08-08 08:58:36 +00:00
2013-11-25 12:45:04 +00:00
wc_get_template ( 'cart/mini-cart.php' , $args );
2012-07-25 17:59:12 +00:00
}
}
2017-10-20 17:24:56 +00:00
/** Login */
2011-12-11 14:40:25 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_login_form' ) ) {
2012-08-14 15:30:23 +00:00
/**
2015-11-03 13:31:20 +00:00
* Output the WooCommerce Login Form .
2012-08-14 15:30:23 +00:00
*
2017-10-20 17:24:56 +00:00
* @ param array $args Arguments .
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_login_form ( $args = array () ) {
2012-02-03 16:17:35 +00:00
2011-12-12 12:28:07 +00:00
$defaults = array (
2013-02-25 10:17:16 +00:00
'message' => '' ,
'redirect' => '' ,
2016-08-27 01:46:45 +00:00
'hidden' => false ,
2011-12-12 12:28:07 +00:00
);
2011-11-24 00:24:24 +00:00
2016-09-02 01:33:57 +00:00
$args = wp_parse_args ( $args , $defaults );
2012-04-25 09:51:20 +00:00
2013-11-28 17:23:41 +00:00
wc_get_template ( 'global/form-login.php' , $args );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_checkout_login_form' ) ) {
2012-08-14 15:30:23 +00:00
/**
2015-11-03 13:31:20 +00:00
* Output the WooCommerce Checkout Login Form .
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_checkout_login_form () {
2018-11-21 11:48:35 +00:00
wc_get_template (
'checkout/form-login.php' ,
array (
'checkout' => WC () -> checkout (),
)
);
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_breadcrumb' ) ) {
2012-08-14 15:30:23 +00:00
/**
2015-11-03 13:31:20 +00:00
* Output the WooCommerce Breadcrumb .
2016-01-06 16:11:09 +00:00
*
2017-10-20 17:24:56 +00:00
* @ param array $args Arguments .
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_breadcrumb ( $args = array () ) {
2018-11-21 11:48:35 +00:00
$args = wp_parse_args (
$args ,
apply_filters (
'woocommerce_breadcrumb_defaults' ,
array (
'delimiter' => ' / ' ,
'wrap_before' => '<nav class="woocommerce-breadcrumb">' ,
'wrap_after' => '</nav>' ,
'before' => '' ,
'after' => '' ,
'home' => _x ( 'Home' , 'breadcrumb' , 'woocommerce' ),
)
)
);
2011-11-24 00:24:24 +00:00
2014-12-05 13:42:19 +00:00
$breadcrumbs = new WC_Breadcrumb ();
2016-06-29 09:44:27 +00:00
if ( ! empty ( $args [ 'home' ] ) ) {
2015-02-12 20:34:40 +00:00
$breadcrumbs -> add_crumb ( $args [ 'home' ], apply_filters ( 'woocommerce_breadcrumb_home_url' , home_url () ) );
2014-12-05 13:42:19 +00:00
}
$args [ 'breadcrumb' ] = $breadcrumbs -> generate ();
2011-11-24 00:24:24 +00:00
2016-08-11 23:29:35 +00:00
/**
2017-10-20 17:24:56 +00:00
* WooCommerce Breadcrumb hook
*
2016-08-14 22:39:01 +00:00
* @ hooked WC_Structured_Data :: generate_breadcrumblist_data () - 10
2016-08-11 23:29:35 +00:00
*/
2016-08-18 18:37:34 +00:00
do_action ( 'woocommerce_breadcrumb' , $breadcrumbs , $args );
2016-07-24 21:46:30 +00:00
2013-11-28 17:23:41 +00:00
wc_get_template ( 'global/breadcrumb.php' , $args );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_order_review' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the Order review table for the checkout .
*
2017-10-20 17:24:56 +00:00
* @ param bool $deprecated Deprecated param .
2012-08-14 15:30:23 +00:00
*/
2014-11-26 14:19:53 +00:00
function woocommerce_order_review ( $deprecated = false ) {
2018-11-21 11:48:35 +00:00
wc_get_template (
'checkout/review-order.php' ,
array (
'checkout' => WC () -> checkout (),
)
);
2014-11-26 14:19:53 +00:00
}
}
if ( ! function_exists ( 'woocommerce_checkout_payment' ) ) {
/**
2015-11-03 13:31:20 +00:00
* Output the Payment Methods on the checkout .
2014-11-26 14:19:53 +00:00
*/
function woocommerce_checkout_payment () {
if ( WC () -> cart -> needs_payment () ) {
$available_gateways = WC () -> payment_gateways () -> get_available_payment_gateways ();
WC () -> payment_gateways () -> set_current_gateway ( $available_gateways );
} else {
$available_gateways = array ();
}
2018-11-21 11:48:35 +00:00
wc_get_template (
'checkout/payment.php' ,
array (
'checkout' => WC () -> checkout (),
'available_gateways' => $available_gateways ,
'order_button_text' => apply_filters ( 'woocommerce_order_button_text' , __ ( 'Place order' , 'woocommerce' ) ),
)
);
2011-12-11 15:40:17 +00:00
}
2011-09-04 00:02:44 +00:00
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_checkout_coupon_form' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the Coupon form for the checkout .
*/
2013-11-25 14:35:10 +00:00
function woocommerce_checkout_coupon_form () {
2018-11-21 11:48:35 +00:00
wc_get_template (
'checkout/form-coupon.php' ,
array (
'checkout' => WC () -> checkout (),
)
);
2011-12-19 17:10:53 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_products_will_display' ) ) {
2012-10-14 12:06:37 +00:00
/**
2015-11-14 15:44:15 +00:00
* Check if we will be showing products or not ( and not sub - categories only ) .
2017-10-20 17:24:56 +00:00
*
2013-11-27 18:20:31 +00:00
* @ return bool
2012-10-14 12:06:37 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_products_will_display () {
2017-12-13 15:46:09 +00:00
$display_type = woocommerce_get_loop_display_mode ();
2018-01-30 11:45:00 +00:00
return 0 < wc_get_loop_prop ( 'total' , 0 ) && 'subcategories' !== $display_type ;
2017-12-06 18:10:19 +00:00
}
}
2012-11-27 16:22:47 +00:00
2017-12-13 15:46:09 +00:00
if ( ! function_exists ( 'woocommerce_get_loop_display_mode' ) ) {
2012-11-27 16:22:47 +00:00
2017-12-06 18:10:19 +00:00
/**
2017-12-13 15:46:09 +00:00
* See what is going to display in the loop .
2017-12-06 18:10:19 +00:00
*
* @ since 3.3 . 0
2017-12-13 15:46:09 +00:00
* @ return string Either products , subcategories , or both , based on current page .
2017-12-06 18:10:19 +00:00
*/
2017-12-13 15:46:09 +00:00
function woocommerce_get_loop_display_mode () {
// Only return products when filtering things.
2019-01-28 15:23:25 +00:00
if ( wc_get_loop_prop ( 'is_search' ) || wc_get_loop_prop ( 'is_filtered' ) ) {
2017-12-13 15:46:09 +00:00
return 'products' ;
2014-02-06 09:21:47 +00:00
}
2017-12-06 18:10:19 +00:00
$parent_id = 0 ;
2017-11-09 10:30:27 +00:00
$display_type = '' ;
2014-02-06 09:21:47 +00:00
2017-11-08 20:00:23 +00:00
if ( is_shop () ) {
$display_type = get_option ( 'woocommerce_shop_page_display' , '' );
} elseif ( is_product_category () ) {
$parent_id = get_queried_object_id ();
2019-01-25 20:47:54 +00:00
$display_type = get_term_meta ( $parent_id , 'display_type' , true );
2017-11-08 20:00:23 +00:00
$display_type = '' === $display_type ? get_option ( 'woocommerce_category_archive_display' , '' ) : $display_type ;
2014-02-06 09:21:47 +00:00
}
2019-02-04 17:47:44 +00:00
if ( ( ! is_shop () || 'subcategories' !== $display_type ) && 1 < wc_get_loop_prop ( 'current_page' ) ) {
return 'products' ;
}
2017-12-13 15:46:09 +00:00
// Ensure valid value.
if ( '' === $display_type || ! in_array ( $display_type , array ( 'products' , 'subcategories' , 'both' ), true ) ) {
$display_type = 'products' ;
}
// If we're showing categories, ensure we actually have something to show.
if ( in_array ( $display_type , array ( 'subcategories' , 'both' ), true ) ) {
$subcategories = woocommerce_get_product_subcategories ( $parent_id );
if ( empty ( $subcategories ) ) {
$display_type = 'products' ;
}
}
return $display_type ;
}
}
if ( ! function_exists ( 'woocommerce_maybe_show_product_subcategories' ) ) {
/**
* Maybe display categories before , or instead of , a product loop .
*
* @ since 3.3 . 0
* @ param string $loop_html HTML .
* @ return string
*/
2018-03-07 12:54:00 +00:00
function woocommerce_maybe_show_product_subcategories ( $loop_html = '' ) {
2018-02-08 17:37:56 +00:00
if ( wc_get_loop_prop ( 'is_shortcode' ) && ! WC_Template_Loader :: in_content_filter () ) {
return $loop_html ;
}
2017-12-13 15:46:09 +00:00
$display_type = woocommerce_get_loop_display_mode ();
2017-12-06 18:10:19 +00:00
// If displaying categories, append to the loop.
2017-12-13 15:46:09 +00:00
if ( 'subcategories' === $display_type || 'both' === $display_type ) {
2017-12-06 18:10:19 +00:00
ob_start ();
2018-11-21 11:48:35 +00:00
woocommerce_output_product_categories (
array (
'parent_id' => is_product_category () ? get_queried_object_id () : 0 ,
)
);
2017-12-06 18:10:19 +00:00
$loop_html .= ob_get_clean ();
2014-02-06 09:21:47 +00:00
2017-12-06 18:10:19 +00:00
if ( 'subcategories' === $display_type ) {
wc_set_loop_prop ( 'total' , 0 );
2018-02-01 13:31:41 +00:00
// This removes pagination and products from display for themes not using wc_get_loop_prop in their product loops. @todo Remove in future major version.
global $wp_query ;
if ( $wp_query -> is_main_query () ) {
$wp_query -> post_count = 0 ;
$wp_query -> max_num_pages = 0 ;
}
2012-10-14 12:06:37 +00:00
}
}
2014-02-06 09:21:47 +00:00
2017-12-06 18:10:19 +00:00
return $loop_html ;
2012-10-14 12:06:37 +00:00
}
}
2018-01-30 23:24:26 +00:00
if ( ! function_exists ( 'woocommerce_product_subcategories' ) ) {
2017-12-13 15:46:09 +00:00
/**
2018-01-30 23:24:26 +00:00
* This is a legacy function which used to check if we needed to display subcats and then output them . It was called by templates .
2017-12-13 15:46:09 +00:00
*
2018-01-30 23:24:26 +00:00
* From 3.3 onwards this is all handled via hooks and the woocommerce_maybe_show_product_subcategories function .
*
* Since some templates have not updated compatibility , to avoid showing incorrect categories this function has been deprecated and will
* return nothing . Replace usage with woocommerce_output_product_categories to render the category list manually .
*
* This is a legacy function which also checks if things should display .
* Themes no longer need to call these functions . It ' s all done via hooks .
*
2018-01-31 15:46:47 +00:00
* @ deprecated 3.3 . 1 @ todo Add a notice in a future version .
2018-01-30 23:24:26 +00:00
* @ param array $args Arguments .
* @ return null | boolean
2018-02-01 13:31:41 +00:00
*/
2018-01-30 23:24:26 +00:00
function woocommerce_product_subcategories ( $args = array () ) {
$defaults = array (
'before' => '' ,
'after' => '' ,
'force_display' => false ,
);
2017-12-13 15:46:09 +00:00
2018-01-30 23:24:26 +00:00
$args = wp_parse_args ( $args , $defaults );
2017-12-13 15:46:09 +00:00
2018-01-30 23:24:26 +00:00
if ( $args [ 'force_display' ] ) {
// We can still render if display is forced.
2018-11-21 11:48:35 +00:00
woocommerce_output_product_categories (
array (
'before' => $args [ 'before' ],
'after' => $args [ 'after' ],
'parent_id' => is_product_category () ? get_queried_object_id () : 0 ,
)
);
2018-01-30 23:24:26 +00:00
return true ;
} else {
2018-01-31 15:46:47 +00:00
// Output nothing. woocommerce_maybe_show_product_subcategories will handle the output of cats.
2018-01-30 23:24:26 +00:00
$display_type = woocommerce_get_loop_display_mode ();
if ( 'subcategories' === $display_type ) {
2018-02-01 13:31:41 +00:00
// This removes pagination and products from display for themes not using wc_get_loop_prop in their product loops. @todo Remove in future major version.
2018-01-30 23:24:26 +00:00
global $wp_query ;
2018-02-01 13:31:41 +00:00
if ( $wp_query -> is_main_query () ) {
$wp_query -> post_count = 0 ;
$wp_query -> max_num_pages = 0 ;
}
2018-01-30 23:24:26 +00:00
}
return 'subcategories' === $display_type || 'both' === $display_type ;
}
2017-12-13 15:46:09 +00:00
}
}
2012-08-14 15:30:23 +00:00
2018-01-30 23:24:26 +00:00
if ( ! function_exists ( 'woocommerce_output_product_categories' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Display product sub categories as thumbnails .
*
2018-01-30 23:24:26 +00:00
* This is a replacement for woocommerce_product_subcategories which also does some logic
* based on the loop . This function however just outputs when called .
*
* @ since 3.3 . 1
2017-10-20 17:24:56 +00:00
* @ param array $args Arguments .
2017-11-08 20:00:23 +00:00
* @ return boolean
2012-08-14 15:30:23 +00:00
*/
2018-01-30 23:24:26 +00:00
function woocommerce_output_product_categories ( $args = array () ) {
2018-11-21 11:48:35 +00:00
$args = wp_parse_args (
$args ,
array (
'before' => apply_filters ( 'woocommerce_before_output_product_categories' , '' ),
'after' => apply_filters ( 'woocommerce_after_output_product_categories' , '' ),
'parent_id' => 0 ,
)
);
2012-04-25 09:51:20 +00:00
2017-12-13 15:46:09 +00:00
$product_categories = woocommerce_get_product_subcategories ( $args [ 'parent_id' ] );
2012-08-08 08:58:36 +00:00
2017-12-06 18:10:19 +00:00
if ( ! $product_categories ) {
return false ;
}
2012-04-25 09:51:20 +00:00
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo $args [ 'before' ];
2014-05-28 16:25:33 +00:00
2017-12-06 18:10:19 +00:00
foreach ( $product_categories as $category ) {
2018-11-21 11:48:35 +00:00
wc_get_template (
2020-11-23 23:52:27 +00:00
'content-product_cat.php' ,
2018-11-21 11:48:35 +00:00
array (
'category' => $category ,
)
);
2015-05-19 16:49:34 +00:00
}
2012-11-27 16:22:47 +00:00
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo $args [ 'after' ];
2014-06-03 10:04:06 +00:00
2017-12-06 18:10:19 +00:00
return true ;
2011-12-11 15:40:17 +00:00
}
2011-10-07 19:27:10 +00:00
}
2018-01-30 23:24:26 +00:00
if ( ! function_exists ( 'woocommerce_get_product_subcategories' ) ) {
/**
* Get ( and cache ) product subcategories .
*
* @ param int $parent_id Get subcategories of this ID .
* @ return array
*/
function woocommerce_get_product_subcategories ( $parent_id = 0 ) {
$parent_id = absint ( $parent_id );
2019-03-01 10:55:11 +00:00
$cache_key = apply_filters ( 'woocommerce_get_product_subcategories_cache_key' , 'product-category-hierarchy-' . $parent_id , $parent_id );
$product_categories = $cache_key ? wp_cache_get ( $cache_key , 'product_cat' ) : false ;
2018-01-30 23:24:26 +00:00
if ( false === $product_categories ) {
// NOTE: using child_of instead of parent - this is not ideal but due to a WP bug ( https://core.trac.wordpress.org/ticket/15626 ) pad_counts won't work.
2018-11-21 11:48:35 +00:00
$product_categories = get_categories (
apply_filters (
'woocommerce_product_subcategories_args' ,
array (
'parent' => $parent_id ,
'hide_empty' => 0 ,
'hierarchical' => 1 ,
'taxonomy' => 'product_cat' ,
'pad_counts' => 1 ,
)
)
);
2018-02-28 18:24:03 +00:00
2019-03-01 10:55:11 +00:00
if ( $cache_key ) {
wp_cache_set ( $cache_key , $product_categories , 'product_cat' );
}
2018-01-30 23:24:26 +00:00
}
if ( apply_filters ( 'woocommerce_product_subcategories_hide_empty' , true ) ) {
$product_categories = wp_list_filter ( $product_categories , array ( 'count' => 0 ), 'NOT' );
}
return $product_categories ;
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_subcategory_thumbnail' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Show subcategory thumbnails .
*
2017-10-20 17:24:56 +00:00
* @ param mixed $category Category .
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_subcategory_thumbnail ( $category ) {
2017-11-20 22:19:09 +00:00
$small_thumbnail_size = apply_filters ( 'subcategory_archive_thumbnail_size' , 'woocommerce_thumbnail' );
$dimensions = wc_get_image_size ( $small_thumbnail_size );
2019-01-25 20:47:54 +00:00
$thumbnail_id = get_term_meta ( $category -> term_id , 'thumbnail_id' , true );
2012-04-25 09:51:20 +00:00
if ( $thumbnail_id ) {
2016-09-02 01:33:57 +00:00
$image = wp_get_attachment_image_src ( $thumbnail_id , $small_thumbnail_size );
2016-08-04 07:16:58 +00:00
$image = $image [ 0 ];
$image_srcset = function_exists ( 'wp_get_attachment_image_srcset' ) ? wp_get_attachment_image_srcset ( $thumbnail_id , $small_thumbnail_size ) : false ;
2016-08-04 07:28:03 +00:00
$image_sizes = function_exists ( 'wp_get_attachment_image_sizes' ) ? wp_get_attachment_image_sizes ( $thumbnail_id , $small_thumbnail_size ) : false ;
2012-04-25 09:51:20 +00:00
} else {
2016-08-04 07:28:03 +00:00
$image = wc_placeholder_img_src ();
2017-11-20 22:19:09 +00:00
$image_srcset = false ;
$image_sizes = false ;
2012-04-25 09:51:20 +00:00
}
2014-02-17 10:48:43 +00:00
if ( $image ) {
2017-10-20 17:24:56 +00:00
// Prevent esc_url from breaking spaces in urls for image embeds.
// Ref: https://core.trac.wordpress.org/ticket/23605.
2014-02-17 10:48:43 +00:00
$image = str_replace ( ' ' , '%20' , $image );
2017-10-20 17:24:56 +00:00
// Add responsive image markup if available.
2016-08-04 07:16:58 +00:00
if ( $image_srcset && $image_sizes ) {
echo '<img src="' . esc_url ( $image ) . '" alt="' . esc_attr ( $category -> name ) . '" width="' . esc_attr ( $dimensions [ 'width' ] ) . '" height="' . esc_attr ( $dimensions [ 'height' ] ) . '" srcset="' . esc_attr ( $image_srcset ) . '" sizes="' . esc_attr ( $image_sizes ) . '" />' ;
} else {
echo '<img src="' . esc_url ( $image ) . '" alt="' . esc_attr ( $category -> name ) . '" width="' . esc_attr ( $dimensions [ 'width' ] ) . '" height="' . esc_attr ( $dimensions [ 'height' ] ) . '" />' ;
}
2014-02-17 10:48:43 +00:00
}
2011-12-11 15:40:17 +00:00
}
2011-10-07 19:27:10 +00:00
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_order_details_table' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Displays order details in a table .
*
2017-10-20 17:24:56 +00:00
* @ param mixed $order_id Order ID .
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_order_details_table ( $order_id ) {
2017-03-07 20:24:24 +00:00
if ( ! $order_id ) {
return ;
}
2012-02-03 16:17:35 +00:00
2018-11-21 11:48:35 +00:00
wc_get_template (
'order/order-details.php' ,
array (
'order_id' => $order_id ,
)
);
2012-04-25 09:51:20 +00:00
}
2011-12-21 16:03:45 +00:00
}
2017-07-11 12:45:35 +00:00
if ( ! function_exists ( 'woocommerce_order_downloads_table' ) ) {
/**
* Displays order downloads in a table .
*
* @ since 3.2 . 0
2017-10-20 17:24:56 +00:00
* @ param array $downloads Downloads .
2017-07-11 12:45:35 +00:00
*/
function woocommerce_order_downloads_table ( $downloads ) {
if ( ! $downloads ) {
return ;
}
2018-11-21 11:48:35 +00:00
wc_get_template (
'order/order-downloads.php' ,
array (
'downloads' => $downloads ,
)
);
2017-07-11 12:45:35 +00:00
}
}
2013-06-05 10:13:36 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_order_again_button' ) ) {
2013-06-05 10:13:36 +00:00
/**
* Display an 'order again' button on the view order page .
*
2017-10-20 17:24:56 +00:00
* @ param object $order Order .
2013-06-05 10:13:36 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_order_again_button ( $order ) {
2017-08-17 22:05:46 +00:00
if ( ! $order || ! $order -> has_status ( apply_filters ( 'woocommerce_valid_order_statuses_for_order_again' , array ( 'completed' ) ) ) || ! is_user_logged_in () ) {
2013-06-05 10:13:36 +00:00
return ;
2014-05-30 16:16:22 +00:00
}
2014-11-12 15:33:00 +00:00
2018-11-21 11:48:35 +00:00
wc_get_template (
'order/order-again.php' ,
array (
'order' => $order ,
'order_again_url' => wp_nonce_url ( add_query_arg ( 'order_again' , $order -> get_id (), wc_get_cart_url () ), 'woocommerce-order_again' ),
)
);
2013-06-05 10:13:36 +00:00
}
}
2017-10-20 17:24:56 +00:00
/** Forms */
2011-12-21 16:03:45 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_form_field' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Outputs a checkout / address form field .
*
2017-10-20 17:24:56 +00:00
* @ param string $key Key .
* @ param mixed $args Arguments .
* @ param string $value ( default : null ) .
2017-05-12 08:48:46 +00:00
* @ return string
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_form_field ( $key , $args , $value = null ) {
2011-12-21 16:03:45 +00:00
$defaults = array (
2012-12-10 14:50:49 +00:00
'type' => 'text' ,
'label' => '' ,
2014-02-14 23:19:49 +00:00
'description' => '' ,
2012-12-10 14:50:49 +00:00
'placeholder' => '' ,
'maxlength' => false ,
'required' => false ,
2015-12-24 19:54:34 +00:00
'autocomplete' => false ,
2014-09-10 09:39:31 +00:00
'id' => $key ,
2012-12-10 14:50:49 +00:00
'class' => array (),
'label_class' => array (),
2013-11-12 21:14:14 +00:00
'input_class' => array (),
2012-12-10 14:50:49 +00:00
'return' => false ,
'options' => array (),
'custom_attributes' => array (),
2013-03-03 14:51:25 +00:00
'validate' => array (),
2014-09-10 08:32:24 +00:00
'default' => '' ,
2016-09-12 19:33:52 +00:00
'autofocus' => '' ,
2016-12-13 18:48:39 +00:00
'priority' => '' ,
2011-12-21 16:03:45 +00:00
);
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
$args = wp_parse_args ( $args , $defaults );
2015-02-12 10:42:43 +00:00
$args = apply_filters ( 'woocommerce_form_field_args' , $args , $key , $value );
2012-04-25 09:51:20 +00:00
2012-12-10 14:50:49 +00:00
if ( $args [ 'required' ] ) {
$args [ 'class' ][] = 'validate-required' ;
2018-04-04 14:45:40 +00:00
$required = ' <abbr class="required" title="' . esc_attr__ ( 'required' , 'woocommerce' ) . '">*</abbr>' ;
2012-12-10 14:50:49 +00:00
} else {
2018-04-06 10:43:30 +00:00
$required = ' <span class="optional">(' . esc_html__ ( 'optional' , 'woocommerce' ) . ')</span>' ;
2012-12-10 14:50:49 +00:00
}
2014-12-01 12:13:41 +00:00
if ( is_string ( $args [ 'label_class' ] ) ) {
2013-08-13 16:26:21 +00:00
$args [ 'label_class' ] = array ( $args [ 'label_class' ] );
2014-12-01 12:13:41 +00:00
}
2013-08-13 16:26:21 +00:00
2014-12-01 12:13:41 +00:00
if ( is_null ( $value ) ) {
2013-03-10 13:17:15 +00:00
$value = $args [ 'default' ];
2014-12-01 12:13:41 +00:00
}
2013-03-03 14:51:25 +00:00
2017-10-20 17:24:56 +00:00
// Custom attribute handling.
2016-10-11 17:08:02 +00:00
$custom_attributes = array ();
2017-11-29 20:45:44 +00:00
$args [ 'custom_attributes' ] = array_filter ( ( array ) $args [ 'custom_attributes' ], 'strlen' );
2012-11-27 16:22:47 +00:00
2016-10-11 16:51:05 +00:00
if ( $args [ 'maxlength' ] ) {
2016-11-23 18:43:38 +00:00
$args [ 'custom_attributes' ][ 'maxlength' ] = absint ( $args [ 'maxlength' ] );
2016-10-11 16:51:05 +00:00
}
2016-11-23 18:43:38 +00:00
if ( ! empty ( $args [ 'autocomplete' ] ) ) {
$args [ 'custom_attributes' ][ 'autocomplete' ] = $args [ 'autocomplete' ];
2016-10-11 16:51:05 +00:00
}
if ( true === $args [ 'autofocus' ] ) {
2016-11-23 18:43:38 +00:00
$args [ 'custom_attributes' ][ 'autofocus' ] = 'autofocus' ;
2016-10-11 17:08:02 +00:00
}
2018-04-05 15:56:00 +00:00
if ( $args [ 'description' ] ) {
$args [ 'custom_attributes' ][ 'aria-describedby' ] = $args [ 'id' ] . '-description' ;
}
2016-10-11 17:08:02 +00:00
if ( ! empty ( $args [ 'custom_attributes' ] ) && is_array ( $args [ 'custom_attributes' ] ) ) {
foreach ( $args [ 'custom_attributes' ] as $attribute => $attribute_value ) {
$custom_attributes [] = esc_attr ( $attribute ) . '="' . esc_attr ( $attribute_value ) . '"' ;
}
2016-10-11 16:51:05 +00:00
}
2014-12-01 12:13:41 +00:00
if ( ! empty ( $args [ 'validate' ] ) ) {
2016-08-27 04:23:02 +00:00
foreach ( $args [ 'validate' ] as $validate ) {
2012-12-10 14:50:49 +00:00
$args [ 'class' ][] = 'validate-' . $validate ;
2014-12-01 12:13:41 +00:00
}
}
2012-12-10 14:50:49 +00:00
2016-12-12 15:23:28 +00:00
$field = '' ;
$label_id = $args [ 'id' ];
2016-12-13 18:48:39 +00:00
$sort = $args [ 'priority' ] ? $args [ 'priority' ] : '' ;
2017-04-19 15:33:32 +00:00
$field_container = '<p class="form-row %1$s" id="%2$s" data-priority="' . esc_attr ( $sort ) . '">%3$s</p>' ;
2015-07-03 19:37:47 +00:00
2012-04-25 09:51:20 +00:00
switch ( $args [ 'type' ] ) {
2017-11-20 22:19:09 +00:00
case 'country' :
2015-12-01 04:02:00 +00:00
$countries = 'shipping_country' === $key ? WC () -> countries -> get_shipping_countries () : WC () -> countries -> get_allowed_countries ();
2013-08-02 15:54:28 +00:00
2017-10-20 17:24:56 +00:00
if ( 1 === count ( $countries ) ) {
2012-11-27 16:22:47 +00:00
2014-12-01 12:13:41 +00:00
$field .= '<strong>' . current ( array_values ( $countries ) ) . '</strong>' ;
2012-11-27 16:22:47 +00:00
2017-10-02 19:24:37 +00:00
$field .= '<input type="hidden" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" value="' . current ( array_keys ( $countries ) ) . '" ' . implode ( ' ' , $custom_attributes ) . ' class="country_to_state" readonly="readonly" />' ;
2012-11-27 16:22:47 +00:00
2014-12-01 12:13:41 +00:00
} else {
2012-04-25 09:51:20 +00:00
2020-12-10 14:12:39 +00:00
$field = '<select name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" class="country_to_state country_select ' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '" ' . implode ( ' ' , $custom_attributes ) . ' data-placeholder="' . esc_attr ( $args [ 'placeholder' ] ? $args [ 'placeholder' ] : esc_attr__ ( 'Select a country / region…' , 'woocommerce' ) ) . '"><option value="">' . esc_html__ ( 'Select a country / region…' , 'woocommerce' ) . '</option>' ;
2012-11-27 16:22:47 +00:00
2014-12-01 12:13:41 +00:00
foreach ( $countries as $ckey => $cvalue ) {
2020-06-16 15:15:12 +00:00
$field .= '<option value="' . esc_attr ( $ckey ) . '" ' . selected ( $value , $ckey , false ) . '>' . esc_html ( $cvalue ) . '</option>' ;
2014-12-01 12:13:41 +00:00
}
2012-11-27 16:22:47 +00:00
2014-12-01 12:13:41 +00:00
$field .= '</select>' ;
2012-11-27 16:22:47 +00:00
2020-01-30 11:42:41 +00:00
$field .= '<noscript><button type="submit" name="woocommerce_checkout_update_totals" value="' . esc_attr__ ( 'Update country / region' , 'woocommerce' ) . '">' . esc_html__ ( 'Update country / region' , 'woocommerce' ) . '</button></noscript>' ;
2012-11-27 16:22:47 +00:00
2014-12-01 12:13:41 +00:00
}
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
break ;
2017-11-20 22:19:09 +00:00
case 'state' :
2017-06-16 10:45:53 +00:00
/* Get country this state field is representing */
$for_country = isset ( $args [ 'country' ] ) ? $args [ 'country' ] : WC () -> checkout -> get_value ( 'billing_state' === $key ? 'billing_country' : 'shipping_country' );
$states = WC () -> countries -> get_states ( $for_country );
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
if ( is_array ( $states ) && empty ( $states ) ) {
2012-08-08 08:58:36 +00:00
2015-07-03 19:37:47 +00:00
$field_container = '<p class="form-row %1$s" id="%2$s" style="display: none">%3$s</p>' ;
2013-01-03 12:34:31 +00:00
2019-04-22 16:18:48 +00:00
$field .= '<input type="hidden" class="hidden" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" value="" ' . implode ( ' ' , $custom_attributes ) . ' placeholder="' . esc_attr ( $args [ 'placeholder' ] ) . '" readonly="readonly" data-input-classes="' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '"/>' ;
2014-06-03 10:04:06 +00:00
2017-06-16 10:45:53 +00:00
} elseif ( ! is_null ( $for_country ) && is_array ( $states ) ) {
2012-08-08 08:58:36 +00:00
2019-06-11 17:47:22 +00:00
$field .= '<select name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" class="state_select ' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '" ' . implode ( ' ' , $custom_attributes ) . ' data-placeholder="' . esc_attr ( $args [ 'placeholder' ] ? $args [ 'placeholder' ] : esc_html__ ( 'Select an option…' , 'woocommerce' ) ) . '" data-input-classes="' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . ' " >
2019-01-15 15:24:17 +00:00
< option value = " " > ' . esc_html__( ' Select an option & hellip ; ', ' woocommerce ' ) . ' </ option > ' ;
2012-08-08 08:58:36 +00:00
2014-12-01 12:13:41 +00:00
foreach ( $states as $ckey => $cvalue ) {
2020-06-16 15:15:12 +00:00
$field .= '<option value="' . esc_attr ( $ckey ) . '" ' . selected ( $value , $ckey , false ) . '>' . esc_html ( $cvalue ) . '</option>' ;
2014-12-01 12:13:41 +00:00
}
2012-08-08 08:58:36 +00:00
2014-12-01 12:13:41 +00:00
$field .= '</select>' ;
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
} else {
2012-08-08 08:58:36 +00:00
2019-04-22 16:18:48 +00:00
$field .= '<input type="text" class="input-text ' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '" value="' . esc_attr ( $value ) . '" placeholder="' . esc_attr ( $args [ 'placeholder' ] ) . '" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" ' . implode ( ' ' , $custom_attributes ) . ' data-input-classes="' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '"/>' ;
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
}
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
break ;
2017-11-20 22:19:09 +00:00
case 'textarea' :
2016-10-11 17:03:27 +00:00
$field .= '<textarea name="' . esc_attr ( $key ) . '" class="input-text ' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" placeholder="' . esc_attr ( $args [ 'placeholder' ] ) . '" ' . ( empty ( $args [ 'custom_attributes' ][ 'rows' ] ) ? ' rows="2"' : '' ) . ( empty ( $args [ 'custom_attributes' ][ 'cols' ] ) ? ' cols="5"' : '' ) . implode ( ' ' , $custom_attributes ) . '>' . esc_textarea ( $value ) . '</textarea>' ;
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
break ;
2017-11-20 22:19:09 +00:00
case 'checkbox' :
2016-09-01 20:50:14 +00:00
$field = '<label class="checkbox ' . implode ( ' ' , $args [ 'label_class' ] ) . '" ' . implode ( ' ' , $custom_attributes ) . ' >
2018-01-30 11:45:00 +00:00
< input type = " ' . esc_attr( $args['type'] ) . ' " class = " input-checkbox ' . esc_attr( implode( ' ', $args['input_class'] ) ) . ' " name = " ' . esc_attr( $key ) . ' " id = " ' . esc_attr( $args['id'] ) . ' " value = " 1 " ' . checked( $value, 1, false ) . ' /> ' . $args[' label '] . $required . ' </ label > ' ;
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
break ;
2017-11-20 22:19:09 +00:00
case 'text' :
2018-01-25 13:14:30 +00:00
case 'password' :
case 'datetime' :
case 'datetime-local' :
case 'date' :
case 'month' :
case 'time' :
case 'week' :
case 'number' :
2017-11-20 22:19:09 +00:00
case 'email' :
2018-01-25 13:14:30 +00:00
case 'url' :
2017-11-20 22:19:09 +00:00
case 'tel' :
2016-10-11 17:03:27 +00:00
$field .= '<input type="' . esc_attr ( $args [ 'type' ] ) . '" class="input-text ' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" placeholder="' . esc_attr ( $args [ 'placeholder' ] ) . '" value="' . esc_attr ( $value ) . '" ' . implode ( ' ' , $custom_attributes ) . ' />' ;
2015-04-01 16:36:58 +00:00
2020-07-12 15:38:36 +00:00
break ;
case 'hidden' :
2020-07-20 14:45:13 +00:00
$field .= '<input type="' . esc_attr ( $args [ 'type' ] ) . '" class="input-hidden ' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" value="' . esc_attr ( $value ) . '" ' . implode ( ' ' , $custom_attributes ) . ' />' ;
2020-07-12 15:38:36 +00:00
2014-12-01 12:13:41 +00:00
break ;
2017-11-20 22:19:09 +00:00
case 'select' :
$field = '' ;
$options = '' ;
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
if ( ! empty ( $args [ 'options' ] ) ) {
2015-03-03 11:43:41 +00:00
foreach ( $args [ 'options' ] as $option_key => $option_text ) {
2015-12-01 04:02:00 +00:00
if ( '' === $option_key ) {
2017-10-20 17:24:56 +00:00
// If we have a blank option, select2 needs a placeholder.
2015-03-03 11:43:41 +00:00
if ( empty ( $args [ 'placeholder' ] ) ) {
$args [ 'placeholder' ] = $option_text ? $option_text : __ ( 'Choose an option' , 'woocommerce' );
}
$custom_attributes [] = 'data-allow_clear="true"' ;
}
2020-06-16 15:15:12 +00:00
$options .= '<option value="' . esc_attr ( $option_key ) . '" ' . selected ( $value , $option_key , false ) . '>' . esc_html ( $option_text ) . '</option>' ;
2015-03-03 11:43:41 +00:00
}
2012-04-25 09:51:20 +00:00
2016-10-11 17:03:27 +00:00
$field .= '<select name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" class="select ' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '" ' . implode ( ' ' , $custom_attributes ) . ' data-placeholder="' . esc_attr ( $args [ 'placeholder' ] ) . ' " >
2014-12-01 12:13:41 +00:00
' . $options . '
</ select > ' ;
}
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
break ;
2017-11-20 22:19:09 +00:00
case 'radio' :
2019-02-08 01:02:44 +00:00
$label_id .= '_' . current ( array_keys ( $args [ 'options' ] ) );
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
if ( ! empty ( $args [ 'options' ] ) ) {
foreach ( $args [ 'options' ] as $option_key => $option_text ) {
2017-07-21 13:23:21 +00:00
$field .= '<input type="radio" class="input-radio ' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '" value="' . esc_attr ( $option_key ) . '" name="' . esc_attr ( $key ) . '" ' . implode ( ' ' , $custom_attributes ) . ' id="' . esc_attr ( $args [ 'id' ] ) . '_' . esc_attr ( $option_key ) . '"' . checked ( $value , $option_key , false ) . ' />' ;
2020-06-16 15:15:12 +00:00
$field .= '<label for="' . esc_attr ( $args [ 'id' ] ) . '_' . esc_attr ( $option_key ) . '" class="radio ' . implode ( ' ' , $args [ 'label_class' ] ) . '">' . esc_html ( $option_text ) . '</label>' ;
2014-12-01 12:13:41 +00:00
}
2014-06-03 10:04:06 +00:00
}
2014-12-01 12:13:41 +00:00
break ;
2015-07-03 19:37:47 +00:00
}
2012-04-25 09:51:20 +00:00
2015-07-03 19:37:47 +00:00
if ( ! empty ( $field ) ) {
$field_html = '' ;
2012-04-25 09:51:20 +00:00
2017-11-20 22:19:09 +00:00
if ( $args [ 'label' ] && 'checkbox' !== $args [ 'type' ] ) {
2020-09-29 12:25:56 +00:00
$field_html .= '<label for="' . esc_attr ( $label_id ) . '" class="' . esc_attr ( implode ( ' ' , $args [ 'label_class' ] ) ) . '">' . wp_kses_post ( $args [ 'label' ] ) . $required . '</label>' ;
2015-07-03 19:37:47 +00:00
}
2018-04-05 15:56:00 +00:00
$field_html .= '<span class="woocommerce-input-wrapper">' . $field ;
2015-07-03 19:37:47 +00:00
if ( $args [ 'description' ] ) {
2018-04-05 15:56:00 +00:00
$field_html .= '<span class="description" id="' . esc_attr ( $args [ 'id' ] ) . '-description" aria-hidden="true">' . wp_kses_post ( $args [ 'description' ] ) . '</span>' ;
2015-07-03 19:37:47 +00:00
}
2018-04-05 15:56:00 +00:00
$field_html .= '</span>' ;
2016-10-28 18:14:28 +00:00
$container_class = esc_attr ( implode ( ' ' , $args [ 'class' ] ) );
2017-03-14 17:49:42 +00:00
$container_id = esc_attr ( $args [ 'id' ] ) . '_field' ;
$field = sprintf ( $field_container , $container_class , $container_id , $field_html );
2012-04-25 09:51:20 +00:00
}
2012-02-15 17:57:12 +00:00
2018-03-13 14:30:19 +00:00
/**
* Filter by type .
*/
2015-02-12 09:54:29 +00:00
$field = apply_filters ( 'woocommerce_form_field_' . $args [ 'type' ], $field , $key , $args , $value );
2018-03-13 14:30:19 +00:00
/**
* General filter on form fields .
*
* @ since 3.4 . 0
*/
$field = apply_filters ( 'woocommerce_form_field' , $field , $key , $args , $value );
2014-12-01 12:13:41 +00:00
if ( $args [ 'return' ] ) {
return $field ;
} else {
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo $field ;
2014-12-01 12:13:41 +00:00
}
2011-12-21 16:03:45 +00:00
}
2012-03-12 17:23:04 +00:00
}
2012-04-16 13:32:58 +00:00
2012-08-14 15:30:23 +00:00
if ( ! function_exists ( 'get_product_search_form' ) ) {
/**
2014-10-13 13:42:07 +00:00
* Display product search form .
2014-10-10 11:48:02 +00:00
*
2015-11-03 13:31:20 +00:00
* Will first attempt to locate the product - searchform . php file in either the child or .
* the parent , then load it . If it doesn ' t exist , then the default search form .
2014-10-10 11:48:02 +00:00
* will be displayed .
*
* The default searchform uses html5 .
2012-08-14 15:30:23 +00:00
*
2017-10-20 17:24:56 +00:00
* @ param bool $echo ( default : true ) .
2013-11-29 18:50:31 +00:00
* @ return string
2012-08-14 15:30:23 +00:00
*/
2017-11-20 22:19:09 +00:00
function get_product_search_form ( $echo = true ) {
2016-08-02 16:43:23 +00:00
global $product_search_form_index ;
2014-10-10 11:48:02 +00:00
ob_start ();
2012-08-14 15:30:23 +00:00
2016-08-02 16:43:23 +00:00
if ( empty ( $product_search_form_index ) ) {
$product_search_form_index = 0 ;
}
2016-09-02 01:33:57 +00:00
do_action ( 'pre_get_product_search_form' );
2012-04-16 13:32:58 +00:00
2018-11-21 11:48:35 +00:00
wc_get_template (
'product-searchform.php' ,
array (
'index' => $product_search_form_index ++ ,
)
);
2014-10-10 11:48:02 +00:00
$form = apply_filters ( 'get_product_search_form' , ob_get_clean () );
2018-05-25 04:45:38 +00:00
if ( ! $echo ) {
2014-10-10 11:48:02 +00:00
return $form ;
}
2018-05-25 04:45:38 +00:00
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo $form ;
2012-04-16 13:32:58 +00:00
}
2013-02-06 23:57:57 +00:00
}
2015-04-22 15:27:12 +00:00
if ( ! function_exists ( 'woocommerce_output_auth_header' ) ) {
/**
* Output the Auth header .
*/
function woocommerce_output_auth_header () {
wc_get_template ( 'auth/header.php' );
}
}
if ( ! function_exists ( 'woocommerce_output_auth_footer' ) ) {
/**
* Output the Auth footer .
*/
function woocommerce_output_auth_footer () {
wc_get_template ( 'auth/footer.php' );
}
}
2015-07-27 15:42:22 +00:00
2015-07-28 09:32:28 +00:00
if ( ! function_exists ( 'woocommerce_single_variation' ) ) {
/**
* Output placeholders for the single variation .
*/
function woocommerce_single_variation () {
2015-12-04 13:26:44 +00:00
echo '<div class="woocommerce-variation single_variation"></div>' ;
2015-07-28 09:32:28 +00:00
}
}
if ( ! function_exists ( 'woocommerce_single_variation_add_to_cart_button' ) ) {
/**
* Output the add to cart button for variations .
*/
function woocommerce_single_variation_add_to_cart_button () {
2015-10-28 13:09:34 +00:00
wc_get_template ( 'single-product/add-to-cart/variation-add-to-cart-button.php' );
2015-07-28 09:32:28 +00:00
}
}
2015-07-27 15:42:22 +00:00
if ( ! function_exists ( 'wc_dropdown_variation_attribute_options' ) ) {
/**
* Output a list of variation attributes for use in the cart forms .
*
2017-10-20 17:24:56 +00:00
* @ param array $args Arguments .
2015-07-27 15:42:22 +00:00
* @ since 2.4 . 0
*/
function wc_dropdown_variation_attribute_options ( $args = array () ) {
2018-11-21 11:48:35 +00:00
$args = wp_parse_args (
apply_filters ( 'woocommerce_dropdown_variation_attribute_options_args' , $args ),
array (
'options' => false ,
'attribute' => false ,
'product' => false ,
'selected' => false ,
'name' => '' ,
'id' => '' ,
'class' => '' ,
'show_option_none' => __ ( 'Choose an option' , 'woocommerce' ),
)
);
2015-07-27 15:42:22 +00:00
2018-05-29 13:32:20 +00:00
// Get selected value.
if ( false === $args [ 'selected' ] && $args [ 'attribute' ] && $args [ 'product' ] instanceof WC_Product ) {
2020-04-21 13:52:40 +00:00
$selected_key = 'attribute_' . sanitize_title ( $args [ 'attribute' ] );
// phpcs:disable WordPress.Security.NonceVerification.Recommended
$args [ 'selected' ] = isset ( $_REQUEST [ $selected_key ] ) ? wc_clean ( wp_unslash ( $_REQUEST [ $selected_key ] ) ) : $args [ 'product' ] -> get_variation_default_attribute ( $args [ 'attribute' ] );
// phpcs:enable WordPress.Security.NonceVerification.Recommended
2018-05-29 13:32:20 +00:00
}
2016-12-15 12:58:41 +00:00
$options = $args [ 'options' ];
$product = $args [ 'product' ];
$attribute = $args [ 'attribute' ];
$name = $args [ 'name' ] ? $args [ 'name' ] : 'attribute_' . sanitize_title ( $attribute );
$id = $args [ 'id' ] ? $args [ 'id' ] : sanitize_title ( $attribute );
$class = $args [ 'class' ];
2018-03-21 22:57:10 +00:00
$show_option_none = ( bool ) $args [ 'show_option_none' ];
2016-12-15 17:11:08 +00:00
$show_option_none_text = $args [ 'show_option_none' ] ? $args [ 'show_option_none' ] : __ ( 'Choose an option' , 'woocommerce' ); // We'll do our best to hide the placeholder, but we'll need to show something when resetting options.
2015-07-27 15:42:22 +00:00
if ( empty ( $options ) && ! empty ( $product ) && ! empty ( $attribute ) ) {
$attributes = $product -> get_variation_attributes ();
$options = $attributes [ $attribute ];
}
2018-01-30 11:45:00 +00:00
$html = '<select id="' . esc_attr ( $id ) . '" class="' . esc_attr ( $class ) . '" name="' . esc_attr ( $name ) . '" data-attribute_name="attribute_' . esc_attr ( sanitize_title ( $attribute ) ) . '" data-show_option_none="' . ( $show_option_none ? 'yes' : 'no' ) . '">' ;
2016-12-15 12:58:41 +00:00
$html .= '<option value="">' . esc_html ( $show_option_none_text ) . '</option>' ;
2015-07-27 15:42:22 +00:00
if ( ! empty ( $options ) ) {
if ( $product && taxonomy_exists ( $attribute ) ) {
// Get terms if this is a taxonomy - ordered. We need the names too.
2018-11-21 11:48:35 +00:00
$terms = wc_get_product_terms (
$product -> get_id (),
$attribute ,
array (
'fields' => 'all' ,
)
);
2015-07-27 15:42:22 +00:00
foreach ( $terms as $term ) {
2017-11-20 22:19:09 +00:00
if ( in_array ( $term -> slug , $options , true ) ) {
2018-08-22 10:37:47 +00:00
$html .= '<option value="' . esc_attr ( $term -> slug ) . '" ' . selected ( sanitize_title ( $args [ 'selected' ] ), $term -> slug , false ) . '>' . esc_html ( apply_filters ( 'woocommerce_variation_option_name' , $term -> name , $term , $attribute , $product ) ) . '</option>' ;
2015-07-27 15:42:22 +00:00
}
}
} else {
foreach ( $options as $option ) {
// This handles < 2.4.0 bw compatibility where text attributes were not sanitized.
2015-07-27 16:48:28 +00:00
$selected = sanitize_title ( $args [ 'selected' ] ) === $args [ 'selected' ] ? selected ( $args [ 'selected' ], sanitize_title ( $option ), false ) : selected ( $args [ 'selected' ], $option , false );
2018-08-22 10:37:47 +00:00
$html .= '<option value="' . esc_attr ( $option ) . '" ' . $selected . '>' . esc_html ( apply_filters ( 'woocommerce_variation_option_name' , $option , null , $attribute , $product ) ) . '</option>' ;
2015-07-27 15:42:22 +00:00
}
}
}
2015-07-27 15:50:55 +00:00
2016-01-04 15:31:43 +00:00
$html .= '</select>' ;
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo apply_filters ( 'woocommerce_dropdown_variation_attribute_options_html' , $html , $args );
2015-07-27 15:42:22 +00:00
}
2016-01-14 20:35:31 +00:00
}
2016-06-06 11:04:53 +00:00
if ( ! function_exists ( 'woocommerce_account_content' ) ) {
/**
* My Account content output .
*/
function woocommerce_account_content () {
global $wp ;
2017-10-04 14:37:43 +00:00
if ( ! empty ( $wp -> query_vars ) ) {
foreach ( $wp -> query_vars as $key => $value ) {
// Ignore pagename param.
if ( 'pagename' === $key ) {
continue ;
}
2016-06-06 11:04:53 +00:00
2017-10-04 14:37:43 +00:00
if ( has_action ( 'woocommerce_account_' . $key . '_endpoint' ) ) {
do_action ( 'woocommerce_account_' . $key . '_endpoint' , $value );
return ;
}
2016-06-06 11:04:53 +00:00
}
}
// No endpoint found? Default to dashboard.
2018-11-21 11:48:35 +00:00
wc_get_template (
'myaccount/dashboard.php' ,
array (
'current_user' => get_user_by ( 'id' , get_current_user_id () ),
)
);
2016-06-06 11:04:53 +00:00
}
}
2016-05-30 13:16:26 +00:00
if ( ! function_exists ( 'woocommerce_account_navigation' ) ) {
/**
* My Account navigation template .
*/
function woocommerce_account_navigation () {
wc_get_template ( 'myaccount/navigation.php' );
}
}
2016-01-19 21:02:26 +00:00
if ( ! function_exists ( 'woocommerce_account_orders' ) ) {
/**
* My Account > Orders template .
2016-01-20 15:46:59 +00:00
*
* @ param int $current_page Current page number .
2016-01-19 21:02:26 +00:00
*/
2016-01-20 15:46:59 +00:00
function woocommerce_account_orders ( $current_page ) {
2016-03-09 13:25:36 +00:00
$current_page = empty ( $current_page ) ? 1 : absint ( $current_page );
2018-11-21 11:48:35 +00:00
$customer_orders = wc_get_orders (
apply_filters (
'woocommerce_my_account_my_orders_query' ,
array (
'customer' => get_current_user_id (),
'page' => $current_page ,
'paginate' => true ,
)
)
);
2016-01-20 15:46:59 +00:00
2016-04-11 21:03:09 +00:00
wc_get_template (
'myaccount/orders.php' ,
array (
2018-01-30 11:45:00 +00:00
'current_page' => absint ( $current_page ),
2016-04-11 21:03:09 +00:00
'customer_orders' => $customer_orders ,
2018-01-30 11:45:00 +00:00
'has_orders' => 0 < $customer_orders -> total ,
2016-04-11 21:03:09 +00:00
)
);
2016-01-19 21:02:26 +00:00
}
}
2016-01-14 20:35:31 +00:00
if ( ! function_exists ( 'woocommerce_account_view_order' ) ) {
/**
2016-01-19 21:02:26 +00:00
* My Account > View order template .
2016-01-14 20:35:31 +00:00
*
* @ param int $order_id Order ID .
*/
function woocommerce_account_view_order ( $order_id ) {
WC_Shortcode_My_Account :: view_order ( absint ( $order_id ) );
}
}
2016-01-19 21:02:26 +00:00
if ( ! function_exists ( 'woocommerce_account_downloads' ) ) {
/**
* My Account > Downloads template .
*/
function woocommerce_account_downloads () {
wc_get_template ( 'myaccount/downloads.php' );
}
}
2016-01-14 20:35:31 +00:00
if ( ! function_exists ( 'woocommerce_account_edit_address' ) ) {
/**
2016-01-19 21:02:26 +00:00
* My Account > Edit address template .
2016-01-14 20:35:31 +00:00
*
* @ param string $type Address type .
*/
function woocommerce_account_edit_address ( $type ) {
$type = wc_edit_address_i18n ( sanitize_title ( $type ), true );
WC_Shortcode_My_Account :: edit_address ( $type );
}
}
2016-01-20 20:13:17 +00:00
if ( ! function_exists ( 'woocommerce_account_payment_methods' ) ) {
/**
* My Account > Downloads template .
*/
function woocommerce_account_payment_methods () {
wc_get_template ( 'myaccount/payment-methods.php' );
}
}
2016-01-14 20:35:31 +00:00
if ( ! function_exists ( 'woocommerce_account_add_payment_method' ) ) {
/**
2016-01-19 21:02:26 +00:00
* My Account > Add payment method template .
2016-01-14 20:35:31 +00:00
*/
function woocommerce_account_add_payment_method () {
WC_Shortcode_My_Account :: add_payment_method ();
}
2015-07-27 15:42:22 +00:00
}
2016-01-20 20:13:17 +00:00
if ( ! function_exists ( 'woocommerce_account_edit_account' ) ) {
/**
* My Account > Edit account template .
*/
function woocommerce_account_edit_account () {
WC_Shortcode_My_Account :: edit_account ();
}
}
2016-06-21 19:26:35 +00:00
2016-08-08 12:43:42 +00:00
if ( ! function_exists ( 'wc_no_products_found' ) ) {
/**
2018-03-07 12:54:00 +00:00
* Handles the loop when no products were found / no product exist .
2016-08-08 12:43:42 +00:00
*/
function wc_no_products_found () {
wc_get_template ( 'loop/no-products-found.php' );
}
}
2016-06-21 19:26:35 +00:00
if ( ! function_exists ( 'wc_get_email_order_items' ) ) {
/**
* Get HTML for the order items to be shown in emails .
2017-05-12 08:48:46 +00:00
*
2017-10-20 17:24:56 +00:00
* @ param WC_Order $order Order object .
* @ param array $args Arguments .
2017-05-12 08:48:46 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2017-05-12 08:48:46 +00:00
* @ return string
2016-06-21 19:26:35 +00:00
*/
function wc_get_email_order_items ( $order , $args = array () ) {
ob_start ();
$defaults = array (
2016-08-08 15:31:06 +00:00
'show_sku' => false ,
'show_image' => false ,
'image_size' => array ( 32 , 32 ),
'plain_text' => false ,
'sent_to_admin' => false ,
2016-06-21 19:26:35 +00:00
);
$args = wp_parse_args ( $args , $defaults );
$template = $args [ 'plain_text' ] ? 'emails/plain/email-order-items.php' : 'emails/email-order-items.php' ;
2018-11-21 11:48:35 +00:00
wc_get_template (
$template ,
apply_filters (
'woocommerce_email_order_items_args' ,
array (
'order' => $order ,
'items' => $order -> get_items (),
'show_download_links' => $order -> is_download_permitted () && ! $args [ 'sent_to_admin' ],
'show_sku' => $args [ 'show_sku' ],
'show_purchase_note' => $order -> is_paid () && ! $args [ 'sent_to_admin' ],
'show_image' => $args [ 'show_image' ],
'image_size' => $args [ 'image_size' ],
'plain_text' => $args [ 'plain_text' ],
'sent_to_admin' => $args [ 'sent_to_admin' ],
)
)
);
2016-06-21 19:26:35 +00:00
return apply_filters ( 'woocommerce_email_order_items_table' , ob_get_clean (), $order );
}
}
if ( ! function_exists ( 'wc_display_item_meta' ) ) {
/**
* Display item meta data .
2017-10-20 17:24:56 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2017-10-20 17:24:56 +00:00
* @ param WC_Order_Item $item Order Item .
* @ param array $args Arguments .
2016-06-21 19:26:35 +00:00
* @ return string | void
*/
function wc_display_item_meta ( $item , $args = array () ) {
$strings = array ();
$html = '' ;
2018-11-21 11:48:35 +00:00
$args = wp_parse_args (
$args ,
array (
'before' => '<ul class="wc-item-meta"><li>' ,
'after' => '</li></ul>' ,
'separator' => '</li><li>' ,
'echo' => true ,
'autop' => false ,
'label_before' => '<strong class="wc-item-meta-label">' ,
'label_after' => ':</strong> ' ,
)
);
2016-06-21 19:26:35 +00:00
foreach ( $item -> get_formatted_meta_data () as $meta_id => $meta ) {
2018-01-30 11:45:00 +00:00
$value = $args [ 'autop' ] ? wp_kses_post ( $meta -> display_value ) : wp_kses_post ( make_clickable ( trim ( $meta -> display_value ) ) );
2018-09-26 18:13:29 +00:00
$strings [] = $args [ 'label_before' ] . wp_kses_post ( $meta -> display_key ) . $args [ 'label_after' ] . $value ;
2016-06-21 19:26:35 +00:00
}
if ( $strings ) {
$html = $args [ 'before' ] . implode ( $args [ 'separator' ], $strings ) . $args [ 'after' ];
}
$html = apply_filters ( 'woocommerce_display_item_meta' , $html , $item , $args );
if ( $args [ 'echo' ] ) {
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo $html ;
2016-06-21 19:26:35 +00:00
} else {
return $html ;
}
}
}
if ( ! function_exists ( 'wc_display_item_downloads' ) ) {
/**
* Display item download links .
2017-10-20 17:24:56 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2017-10-20 17:24:56 +00:00
* @ param WC_Order_Item $item Order Item .
* @ param array $args Arguments .
2016-06-21 19:26:35 +00:00
* @ return string | void
*/
function wc_display_item_downloads ( $item , $args = array () ) {
$strings = array ();
$html = '' ;
2018-11-21 11:48:35 +00:00
$args = wp_parse_args (
$args ,
array (
'before' => '<ul class ="wc-item-downloads"><li>' ,
'after' => '</li></ul>' ,
'separator' => '</li><li>' ,
'echo' => true ,
'show_url' => false ,
)
);
2016-06-21 19:26:35 +00:00
2017-11-20 22:19:09 +00:00
$downloads = is_object ( $item ) && $item -> is_type ( 'line_item' ) ? $item -> get_item_downloads () : array ();
if ( $downloads ) {
2016-06-21 19:26:35 +00:00
$i = 0 ;
foreach ( $downloads as $file ) {
$i ++ ;
if ( $args [ 'show_url' ] ) {
2016-09-01 20:50:14 +00:00
$strings [] = '<strong class="wc-item-download-label">' . esc_html ( $file [ 'name' ] ) . ':</strong> ' . esc_html ( $file [ 'download_url' ] );
2016-06-21 19:26:35 +00:00
} else {
2017-11-20 22:19:09 +00:00
/* translators: %d: downloads count */
2018-01-30 11:45:00 +00:00
$prefix = count ( $downloads ) > 1 ? sprintf ( __ ( 'Download %d' , 'woocommerce' ), $i ) : __ ( 'Download' , 'woocommerce' );
2016-06-21 19:26:35 +00:00
$strings [] = '<strong class="wc-item-download-label">' . $prefix . ':</strong> <a href="' . esc_url ( $file [ 'download_url' ] ) . '" target="_blank">' . esc_html ( $file [ 'name' ] ) . '</a>' ;
}
}
}
if ( $strings ) {
$html = $args [ 'before' ] . implode ( $args [ 'separator' ], $strings ) . $args [ 'after' ];
}
$html = apply_filters ( 'woocommerce_display_item_downloads' , $html , $item , $args );
if ( $args [ 'echo' ] ) {
2020-04-21 13:52:40 +00:00
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo $html ;
2016-06-21 19:26:35 +00:00
} else {
return $html ;
}
}
}
2016-10-13 14:25:42 +00:00
if ( ! function_exists ( 'woocommerce_photoswipe' ) ) {
/**
* Get the shop sidebar template .
*/
function woocommerce_photoswipe () {
2017-02-23 10:46:48 +00:00
if ( current_theme_supports ( 'wc-product-gallery-lightbox' ) ) {
wc_get_template ( 'single-product/photoswipe.php' );
}
2016-10-13 14:25:42 +00:00
}
}
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
/**
* Outputs a list of product attributes for a product .
2017-10-20 17:24:56 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2017-10-20 17:24:56 +00:00
* @ param WC_Product $product Product Object .
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
*/
function wc_display_product_attributes ( $product ) {
2019-01-16 12:25:19 +00:00
$product_attributes = array ();
// Display weight and dimensions before attribute list.
$display_dimensions = apply_filters ( 'wc_product_enable_dimensions_display' , $product -> has_weight () || $product -> has_dimensions () );
if ( $display_dimensions && $product -> has_weight () ) {
$product_attributes [ 'weight' ] = array (
'label' => __ ( 'Weight' , 'woocommerce' ),
'value' => wc_format_weight ( $product -> get_weight () ),
);
}
if ( $display_dimensions && $product -> has_dimensions () ) {
$product_attributes [ 'dimensions' ] = array (
'label' => __ ( 'Dimensions' , 'woocommerce' ),
'value' => wc_format_dimensions ( $product -> get_dimensions ( false ) ),
);
}
// Add product attributes to list.
$attributes = array_filter ( $product -> get_attributes (), 'wc_attributes_array_filter_visible' );
foreach ( $attributes as $attribute ) {
$values = array ();
if ( $attribute -> is_taxonomy () ) {
$attribute_taxonomy = $attribute -> get_taxonomy_object ();
$attribute_values = wc_get_product_terms ( $product -> get_id (), $attribute -> get_name (), array ( 'fields' => 'all' ) );
foreach ( $attribute_values as $attribute_value ) {
$value_name = esc_html ( $attribute_value -> name );
if ( $attribute_taxonomy -> attribute_public ) {
$values [] = '<a href="' . esc_url ( get_term_link ( $attribute_value -> term_id , $attribute -> get_name () ) ) . '" rel="tag">' . $value_name . '</a>' ;
} else {
$values [] = $value_name ;
}
}
} else {
$values = $attribute -> get_options ();
foreach ( $values as & $value ) {
$value = make_clickable ( esc_html ( $value ) );
}
}
$product_attributes [ 'attribute_' . sanitize_title_with_dashes ( $attribute -> get_name () ) ] = array (
'label' => wc_attribute_label ( $attribute -> get_name () ),
'value' => apply_filters ( 'woocommerce_attribute' , wpautop ( wptexturize ( implode ( ', ' , $values ) ) ), $attribute , $values ),
);
}
/**
* Hook : woocommerce_display_product_attributes .
*
* @ since 3.6 . 0.
* @ param array $product_attributes Array of atributes to display ; label , value .
* @ param WC_Product $product Showing attributes for this product .
*/
$product_attributes = apply_filters ( 'woocommerce_display_product_attributes' , $product_attributes , $product );
2018-11-21 11:48:35 +00:00
wc_get_template (
'single-product/product-attributes.php' ,
array (
2019-01-16 12:25:19 +00:00
'product_attributes' => $product_attributes ,
// Legacy params.
2018-11-21 11:48:35 +00:00
'product' => $product ,
2019-01-16 12:25:19 +00:00
'attributes' => $attributes ,
'display_dimensions' => $display_dimensions ,
2018-11-21 11:48:35 +00:00
)
);
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
}
/**
* Get HTML to show product stock .
2017-10-20 17:24:56 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2017-10-20 17:24:56 +00:00
* @ param WC_Product $product Product Object .
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
* @ return string
*/
function wc_get_stock_html ( $product ) {
2018-01-30 11:45:00 +00:00
$html = '' ;
2016-12-02 16:46:35 +00:00
$availability = $product -> get_availability ();
2017-03-02 16:30:01 +00:00
if ( ! empty ( $availability [ 'availability' ] ) ) {
2017-03-01 23:19:31 +00:00
ob_start ();
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
2018-11-21 11:48:35 +00:00
wc_get_template (
'single-product/stock.php' ,
array (
'product' => $product ,
'class' => $availability [ 'class' ],
'availability' => $availability [ 'availability' ],
)
);
2017-03-01 23:19:31 +00:00
$html = ob_get_clean ();
}
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
if ( has_filter ( 'woocommerce_stock_html' ) ) {
2016-11-23 16:15:00 +00:00
wc_deprecated_function ( 'The woocommerce_stock_html filter' , '' , 'woocommerce_get_stock_html' );
2016-12-02 16:46:35 +00:00
$html = apply_filters ( 'woocommerce_stock_html' , $html , $availability [ 'availability' ], $product );
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
}
return apply_filters ( 'woocommerce_get_stock_html' , $html , $product );
}
/**
* Get HTML for ratings .
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
* @ param float $rating Rating being shown .
2017-05-02 19:48:00 +00:00
* @ param int $count Total number of ratings .
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
* @ return string
*/
2017-04-28 22:56:05 +00:00
function wc_get_rating_html ( $rating , $count = 0 ) {
2019-02-01 17:13:41 +00:00
$html = '' ;
if ( 0 < $rating ) {
/* translators: %s: rating */
$label = sprintf ( __ ( 'Rated %s out of 5' , 'woocommerce' ), $rating );
$html = '<div class="star-rating" role="img" aria-label="' . esc_attr ( $label ) . '">' . wc_get_star_rating_html ( $rating , $count ) . '</div>' ;
}
2017-04-28 22:56:05 +00:00
return apply_filters ( 'woocommerce_product_get_rating_html' , $html , $rating , $count );
2017-04-28 22:32:25 +00:00
}
/**
* Get HTML for star rating .
*
* @ since 3.1 . 0
* @ param float $rating Rating being shown .
2017-05-02 19:48:00 +00:00
* @ param int $count Total number of ratings .
2017-04-28 22:32:25 +00:00
* @ return string
*/
2017-04-28 22:56:05 +00:00
function wc_get_star_rating_html ( $rating , $count = 0 ) {
2017-04-28 22:36:43 +00:00
$html = '<span style="width:' . ( ( $rating / 5 ) * 100 ) . '%">' ;
2017-04-28 22:56:05 +00:00
if ( 0 < $count ) {
/* translators: 1: rating 2: rating count */
2017-04-28 22:59:50 +00:00
$html .= sprintf ( _n ( 'Rated %1$s out of 5 based on %2$s customer rating' , 'Rated %1$s out of 5 based on %2$s customer ratings' , $count , 'woocommerce' ), '<strong class="rating">' . esc_html ( $rating ) . '</strong>' , '<span class="rating">' . esc_html ( $count ) . '</span>' );
2017-04-28 22:56:05 +00:00
} else {
/* translators: %s: rating */
2017-04-28 22:59:50 +00:00
$html .= sprintf ( esc_html__ ( 'Rated %s out of 5' , 'woocommerce' ), '<strong class="rating">' . esc_html ( $rating ) . '</strong>' );
2017-04-28 22:56:05 +00:00
}
2017-04-28 22:36:43 +00:00
$html .= '</span>' ;
2017-04-28 22:32:25 +00:00
2017-06-27 21:19:59 +00:00
return apply_filters ( 'woocommerce_get_star_rating_html' , $html , $rating , $count );
WIP - Product CRUD (#12065)
* Created function to get the catalog visibility options
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Sanitize ids later
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Bump template version
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* Made abstract function useful
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* Allow WP_Query to preload post data, and meta in wc_get_products()
Allow WP_Query to bulk query for post data and meta if more than
just IDs are requested from wc_get_products(). Reduces query count
significantly.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* First methods for WP_Product crud
* Product set methods
* Fixed several erros while setting data
* Hardcode the get_type per product class
* Initial look through getters and setters and abstract data
* Missing var
* Fixed coding standards and improved the docblocks
* Get cached terms from wc_get_related_terms()
* Fixed wrong variable in wc_get_related_terms
* Use count() instead of sizeof()
* Add related product functions and deprecate those in class.
* No need to exclude ID
* Sanitize ids later
* Clean up the abstract product class a bit, deprecate two functions we have renamed, make update & create work properly, and add some tests for it.
* Remove unneeded comments
* wc_get_product_term_ids instead of related wording and use in other places.
get_the_terms is used here and also handles caching, something
wp_get_post_terms does not.
* Handle PR feedback: Remove duplicate regular_price update, allow changing of post status for products, remove deprecation for get_title since we might still offer it as a function
* External Product CRUD
* _virtual meta should be 'no', not taxable, in product unit test helper
* Bump template version
* Made abstract function useful
* Grouped product class
* Tests
* Move children to meta and update test
* Use get_upsell_ids
* Spacing in query
* Moving and refactoring methods
* Availability html
* Tidy/add todos
* Rename method
* Put back review functions (still todo)
* missing $this
* get_price_including_tax/excluding_tax functions
* wc_get_price_to_display
* Price handling
* [Product CRUD] Variable (#12146)
* [Product CRUD] Variable Products
* Handle PR feedback.
* [Product CRUD] Grouped Handling (#12151)
* Handle grouped product saving
* Update routine
* [Product CRUD] Product crud terms (#12149)
* Category and tag id handling
* Replace template functions
* Remove todo
* Handle default name in save function
* Product crud admin save routine (#12174)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Spacing
* Fix comment
* wc_implode_text_attributes helper function
* [Product CRUD] Product crud admin use getters (#12196)
* Initial props
* Work on admin saving
* Set/get attributes
* Atom was moaning about this before but no longer.
* Update get_shipping_class
* WC_Product_Attribute
* Use getter in admin panel
* Fix attribute saving
* Move settings into new files
* Refactor panels and use getters
* Use getters for variation panel
* Revert save variation changes for now
* Add todos
* Fix downloads
* REST API CRUD Updates
* Additional API updates/fixes. Added some todos
* Fix final failing tests and implementing setters/getters and attributes functionality.
* Fix comparison for is_on_sale and remove download_type from WC_Product.
* Add a wc_get_products wrapper.
* Remove the download type input from the product data metabox for downloadable products. (#12221)
* [Product CRUD] Variations - setters, getters and admin. (#12228)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* Feedback fixes
* Implement CRUD in the legacy REST API
* Handle PR feedback
* [Product CRUD] Getter setter proxy methods (#12236)
* Started on variation changes
* Stock functions
* Variation class
* Bulk change ->id to get_id() to fix variation form display
* Missing status
* Fix add to cart
* Start on stored data save
* save variation
* Save_variations
* Variation edit panel
* Save variations code works.
* Remove stored data code and fix save
* Improve legacy class
* wc_bool_to_string
* prepare_set_attributes
* Use wc_get_products
* More feedback fixes
* get_prop implementation in abstract and data classes
* Implement set_prop
* Change handling
* Array key exists
* set_object_read
* Use get_the_terms() instead of wp_get_post_terms()
wp_get_post_terms() is a wrapper around wp_get_object_terms() which does not
use the object cache, and generates a database query every time it is used.
get_the_terms() however can use data from the object cache if present.
* [Product CRUD] Variable, variation, notices, and stock handling (#12277)
* No longer needed
* Remove old todos
* Use getters in admin list
* Related and upsells update for CRUD
* Fix notice in gallery
* Variable fixes and todos
* Context
* Price sync
* Revert variation attributes change
* Return parent data in view context
* Defer term counting
* wc_find_matching_product_variation
* Stock manage tweaks
* Stock fixes
* Correct id
* correct id
* Better sync
* Data logic setter fix
* feedback
* Prevent notices
* Handle image_id from parent
* Fix error
* Remove _wc_save_product_price
* Remove todo
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* [Product CRUD] Abstract todos (#12305)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Revert "[Product CRUD] Abstract todos (#12305)"
This reverts commit 9a6136fcf88fec16f97457b7c8a4388f7587bfa2.
* Remove deprecated get_variation_id()
* New default attributes method
* [Product CRUD] Product Datastore (#12317)
* Fix up tests in the product/* folder.
* Handle data store updates for grouped, variable, external, simple, and general data store updates for products.
* Variations & variable changes.
* Update -functions.php calls to use data store.
* Add an interface for the public product data store methods.
* Finished product factory tests
* Correctly delete in the api, fix up some comments, and implement an interface for the public variable methods.
* Fix up delete in all versions of the api
* Handle feedback
* Match protected decloration to parent
* Product crud abstract todos (#12316)
* Get dimensions and weights, with soft deprecation
* Product attributes
* Ratings
* Fix read method
* Downloads
* Feedback
* Fix up store
* Fixed method returning in write context
* Fix error in variation admin
* Check for parent value - fixes tax class
* Remove old/complete todos
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed wrong variation URLs
* Fixed undefined $image_id in WC_Product_Variation::get_image_id()
* Allow wc_rest_prepare_date_response() handle timestamps
* Updated get methods on REST API for variations
* Use variations CRUD to save variations metadata
* Remove deprecated get_variation_id()
* New default attributes method
* Fixed method returning in write context
* Allow set tax class as "parent"
* Removed duplicated sync
* Fixed coding standards
* TODO is not accurate.
* Should pass WC_Product instancies to WC_Comments methods (#12327)
* Use new method in abstract order class to prevent headers sent issue in tests
* Fixed variable description in REST API
* Updated how create initial product variation
* Fixed a few fatal errors and warnings in Products CRUD (#12329)
* Fixed a few fatal errors and warnings in Products CRUD
* Fixed sync functions
* Add variations CRUD to legacy API (#12331)
* Apply crud to variable products in legacy API v1
* New REST API do not need fallback for default attributes
* Apply variations CRUD to legacy API v2
* Legacy v2 - save default attributes
* Variations in legacy API v2 do not have descriptions
* Fixed legacy API v2 variations params
* Applied variations CRUD to legacy API v3
* Sync before save in legacy apis
* Punc
* Removed API todos
* Removed test
* Products endpoint tweaks (#12354)
* Var type already normalized on CRUD
* Let Product CRUD handle with validation, sanitization and conditional checks
* Set downloads using WC_Product_Download
* Stop try catch exceptions more than one time
* Handle WC_Data_Exception in legacy API
* Complete remove products when fails on creating
* On creating I mean!
* Already have a method to complete delete products
* Fixed standards using WP CodeSniffer
* get_the_terms() returns false when empty
* get_manage_stock returns boolean
@claudiosanches
* Merge conflict
* Variations API endpoint fixes
* Product CRUD improvements (#12359)
* args is not used any more - remove todo
* Added test for attributes
* wc_get_price_excluding_tax usage
* parent usage
* Fix rating counts
* Test fixes
* Cleanup after tests
* Make sure status transition code runs even during API calls, not just in admin.
* Default visibility
* Fix attribute setting in API
* Use get name instead of get title
* variation id usage
* Improved cross sell templates
* variation_data
* Grouped product sync
* Notices
* Sync is not needed in API
* Delete
* Rename interfaces
* Update counts in data store
2016-11-16 12:38:24 +00:00
}
2016-12-05 13:13:30 +00:00
/**
* Returns a 'from' prefix if you want to show where prices start at .
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-12-05 13:13:30 +00:00
* @ return string
*/
function wc_get_price_html_from_text () {
return apply_filters ( 'woocommerce_get_price_html_from_text' , '<span class="from">' . _x ( 'From:' , 'min_price' , 'woocommerce' ) . ' </span>' );
}
2016-12-07 12:04:44 +00:00
/**
* Get logout endpoint .
*
* @ since 2.6 . 9
2017-05-15 11:50:52 +00:00
*
2017-10-20 17:24:56 +00:00
* @ param string $redirect Redirect URL .
2017-05-15 11:50:52 +00:00
*
2016-12-07 12:04:44 +00:00
* @ return string
*/
function wc_logout_url ( $redirect = '' ) {
2019-07-31 23:35:10 +00:00
$redirect = $redirect ? $redirect : apply_filters ( 'woocommerce_logout_default_redirect_url' , wc_get_page_permalink ( 'myaccount' ) );
2016-12-07 12:04:44 +00:00
2018-05-25 10:34:06 +00:00
if ( get_option ( 'woocommerce_logout_endpoint' ) ) {
2017-06-12 13:02:29 +00:00
return wp_nonce_url ( wc_get_endpoint_url ( 'customer-logout' , '' , $redirect ), 'customer-logout' );
2016-12-07 12:04:44 +00:00
}
2018-05-25 10:34:06 +00:00
return wp_logout_url ( $redirect );
2016-12-07 12:04:44 +00:00
}
2017-04-26 12:25:14 +00:00
/**
* Show notice if cart is empty .
*
* @ since 3.1 . 0
*/
function wc_empty_cart_message () {
2019-03-26 17:35:21 +00:00
echo '<p class="cart-empty woocommerce-info">' . wp_kses_post ( apply_filters ( 'wc_empty_cart_message' , __ ( 'Your cart is currently empty.' , 'woocommerce' ) ) ) . '</p>' ;
2017-04-26 12:25:14 +00:00
}
2017-06-21 11:52:52 +00:00
/**
* Disable search engines indexing core , dynamic , cart / checkout pages .
*
2021-02-01 22:15:10 +00:00
* @ todo Deprecated this function after dropping support for WP 5.6 .
2017-06-21 11:52:52 +00:00
* @ since 3.2 . 0
*/
function wc_page_noindex () {
2021-02-01 22:15:10 +00:00
// wp_no_robots is deprecated since WP 5.7.
2021-02-01 22:30:43 +00:00
if ( function_exists ( 'wp_robots_no_robots' ) ) {
2021-02-01 22:15:10 +00:00
return ;
}
2017-06-21 11:52:52 +00:00
if ( is_page ( wc_get_page_id ( 'cart' ) ) || is_page ( wc_get_page_id ( 'checkout' ) ) || is_page ( wc_get_page_id ( 'myaccount' ) ) ) {
2021-02-01 22:15:10 +00:00
wp_no_robots ();
2017-06-21 11:52:52 +00:00
}
}
add_action ( 'wp_head' , 'wc_page_noindex' );
2017-11-06 21:46:50 +00:00
2021-02-01 22:15:10 +00:00
/**
* Disable search engines indexing core , dynamic , cart / checkout pages .
* Uses " wp_robots " filter introduced in WP 5.7 .
*
* @ since 5.0 . 0
* @ param array $robots Associative array of robots directives .
* @ return array Filtered robots directives .
*/
function wc_page_no_robots ( $robots ) {
if ( is_page ( wc_get_page_id ( 'cart' ) ) || is_page ( wc_get_page_id ( 'checkout' ) ) || is_page ( wc_get_page_id ( 'myaccount' ) ) ) {
return wp_robots_no_robots ( $robots );
}
return $robots ;
}
add_filter ( 'wp_robots' , 'wc_page_no_robots' );
2017-11-06 21:46:50 +00:00
/**
* Get a slug identifying the current theme .
*
* @ since 3.3 . 0
* @ return string
*/
function wc_get_theme_slug_for_templates () {
2017-11-07 16:45:05 +00:00
return apply_filters ( 'woocommerce_theme_slug_for_templates' , get_option ( 'template' ) );
2017-11-06 21:46:50 +00:00
}
2017-12-05 12:00:21 +00:00
/**
* Gets and formats a list of cart item data + variations for display on the frontend .
*
* @ since 3.3 . 0
* @ param array $cart_item Cart item object .
* @ param bool $flat Should the data be returned flat or in a list .
* @ return string
*/
2017-12-07 14:53:16 +00:00
function wc_get_formatted_cart_item_data ( $cart_item , $flat = false ) {
2017-12-05 12:00:21 +00:00
$item_data = array ();
// Variation values are shown only if they are not found in the title as of 3.0.
// This is because variation titles display the attributes.
if ( $cart_item [ 'data' ] -> is_type ( 'variation' ) && is_array ( $cart_item [ 'variation' ] ) ) {
foreach ( $cart_item [ 'variation' ] as $name => $value ) {
$taxonomy = wc_attribute_taxonomy_name ( str_replace ( 'attribute_pa_' , '' , urldecode ( $name ) ) );
if ( taxonomy_exists ( $taxonomy ) ) {
// If this is a term slug, get the term's nice name.
$term = get_term_by ( 'slug' , $value , $taxonomy );
if ( ! is_wp_error ( $term ) && $term && $term -> name ) {
$value = $term -> name ;
}
$label = wc_attribute_label ( $taxonomy );
} else {
// If this is a custom option slug, get the options name.
2018-08-22 10:37:47 +00:00
$value = apply_filters ( 'woocommerce_variation_option_name' , $value , null , $taxonomy , $cart_item [ 'data' ] );
2017-12-05 12:00:21 +00:00
$label = wc_attribute_label ( str_replace ( 'attribute_' , '' , $name ), $cart_item [ 'data' ] );
}
// Check the nicename against the title.
if ( '' === $value || wc_is_attribute_in_product_name ( $value , $cart_item [ 'data' ] -> get_name () ) ) {
continue ;
}
$item_data [] = array (
'key' => $label ,
'value' => $value ,
);
}
}
// Filter item data to allow 3rd parties to add more to the array.
$item_data = apply_filters ( 'woocommerce_get_item_data' , $item_data , $cart_item );
// Format item data ready to display.
foreach ( $item_data as $key => $data ) {
// Set hidden to true to not display meta on cart.
if ( ! empty ( $data [ 'hidden' ] ) ) {
unset ( $item_data [ $key ] );
continue ;
}
$item_data [ $key ][ 'key' ] = ! empty ( $data [ 'key' ] ) ? $data [ 'key' ] : $data [ 'name' ];
$item_data [ $key ][ 'display' ] = ! empty ( $data [ 'display' ] ) ? $data [ 'display' ] : $data [ 'value' ];
}
// Output flat or in list format.
if ( count ( $item_data ) > 0 ) {
ob_start ();
if ( $flat ) {
foreach ( $item_data as $data ) {
echo esc_html ( $data [ 'key' ] ) . ': ' . wp_kses_post ( $data [ 'display' ] ) . " \n " ;
}
} else {
wc_get_template ( 'cart/cart-item-data.php' , array ( 'item_data' => $item_data ) );
}
return ob_get_clean ();
}
return '' ;
}
/**
* Gets the url to remove an item from the cart .
*
* @ since 3.3 . 0
* @ param string $cart_item_key contains the id of the cart item .
* @ return string url to page
*/
function wc_get_cart_remove_url ( $cart_item_key ) {
2019-08-29 07:49:11 +00:00
$cart_page_url = wc_get_cart_url ();
2017-12-05 12:00:21 +00:00
return apply_filters ( 'woocommerce_get_remove_url' , $cart_page_url ? wp_nonce_url ( add_query_arg ( 'remove_item' , $cart_item_key , $cart_page_url ), 'woocommerce-cart' ) : '' );
}
/**
* Gets the url to re - add an item into the cart .
*
* @ since 3.3 . 0
* @ param string $cart_item_key Cart item key to undo .
* @ return string url to page
*/
function wc_get_cart_undo_url ( $cart_item_key ) {
2019-08-29 07:49:11 +00:00
$cart_page_url = wc_get_cart_url ();
2017-12-05 12:00:21 +00:00
$query_args = array (
'undo_item' => $cart_item_key ,
);
return apply_filters ( 'woocommerce_get_undo_url' , $cart_page_url ? wp_nonce_url ( add_query_arg ( $query_args , $cart_page_url ), 'woocommerce-cart' ) : '' , $cart_item_key );
2017-12-07 22:29:07 +00:00
}
2017-12-07 19:16:08 +00:00
2018-04-19 17:37:07 +00:00
/**
* Outputs all queued notices on WC pages .
*
* @ since 3.5 . 0
*/
function woocommerce_output_all_notices () {
echo '<div class="woocommerce-notices-wrapper">' ;
wc_print_notices ();
echo '</div>' ;
}
2017-12-07 22:29:07 +00:00
/**
2017-12-06 18:10:19 +00:00
* Products RSS Feed .
*
* @ deprecated 2.6
*/
function wc_products_rss_feed () {
wc_deprecated_function ( 'wc_products_rss_feed' , '2.6' );
}
if ( ! function_exists ( 'woocommerce_reset_loop' ) ) {
/**
* Reset the loop 's index and columns when we' re done outputting a product loop .
*
* @ deprecated 3.3
*/
function woocommerce_reset_loop () {
wc_reset_loop ();
}
}
if ( ! function_exists ( 'woocommerce_product_reviews_tab' ) ) {
/**
* Output the reviews tab content .
*
* @ deprecated 2.4 . 0 Unused .
*/
function woocommerce_product_reviews_tab () {
wc_deprecated_function ( 'woocommerce_product_reviews_tab' , '2.4' );
}
2017-12-05 12:00:21 +00:00
}
2019-11-07 20:23:38 +00:00
/**
* Display pay buttons HTML .
*
* @ since 3.9 . 0
*/
function wc_get_pay_buttons () {
$supported_gateways = array ();
$available_gateways = WC () -> payment_gateways () -> get_available_payment_gateways ();
foreach ( $available_gateways as $gateway ) {
if ( $gateway -> supports ( 'pay_button' ) ) {
$supported_gateways [] = $gateway -> get_pay_button_id ();
}
}
if ( ! $supported_gateways ) {
return ;
}
echo '<div class="woocommerce-pay-buttons">' ;
foreach ( $supported_gateways as $pay_button_id ) {
echo sprintf ( '<div class="woocommerce-pay-button__%1$s %1$s" id="%1$s"></div>' , esc_attr ( $pay_button_id ) );
}
echo '</div>' ;
}
2020-04-21 13:52:40 +00:00
// phpcs:enable Generic.Commenting.Todo.TaskFound