Just a handy collection of small snippets for customising WooCommerce.
<?php | |
// Hook the filter before calling the query. Note that we are using an anonymous | |
// function here and saving a reference to the `$fn` variable for use further down. | |
add_filter( 'posts_where', $fn = function ( $where, WP_Query $wp_query ){ | |
global $wpdb; | |
// Add a clause that ensures we only get posts with an ID greater than 200. | |
$where .= " AND {$wpdb->posts}.ID > 200"; | |
<?php | |
add_filter( 'get_the_excerpt', function ( $excerpt, $post ) { | |
if ( ! empty( $excerpt ) ) { | |
return $excerpt; | |
} | |
// On a specific post type, use an ACF field value as the excerpt. | |
if ( $post->post_type === 'my_custom_post_type' ) { | |
$excerpt = get_field( 'product_description', $post->ID ); |
<?php | |
// Need to trim zeros from a price on the fly? | |
$price = 49.00; // Can be numeric or a string. | |
$price = wc_trim_zeros( $price ); // === '49' | |
<?php | |
// Disable deprecation notices so we can get a better idea of what's going on in our log. | |
// These hooks are all in wp-includes/functions.php. | |
// Note that these hooks don't stop WooCommerce from logging deprecation notices on AJAX | |
// or REST API calls as it makes its own calls to `error_log()` from within | |
// woocommerce/includes/wc-deprecated-functions.php. | |
add_filter( 'deprecated_constructor_trigger_error', '__return_false' ); | |
add_filter( 'deprecated_function_trigger_error', '__return_false' ); | |
add_filter( 'deprecated_file_trigger_error', '__return_false' ); |
<?php | |
// Use an ACF field value to pull the number from the database. | |
$number_of_items = (int) get_field('my_numerical_field', $post_id ); | |
$string = sprintf( | |
_n( | |
'%d item in stock', | |
'%d items in stock', | |
$number_of_items |
.DS_Store | |
.sass-cache | |
node_modules | |
/upgrade | |
/cache | |
/uploads | |
/advanced-cache.php | |
/debug.log | |
/languages | |
/db.php |
<?php | |
add_action('wp_enqueue_scripts', function(){ | |
// Assuming our previous example code is in a script enqueued with the handle `my-script` e.g; | |
// wp_enqueue_script( 'my-script', … ); | |
// Localise an object containing our nonce: | |
wp_localize_script( 'my-script', 'myvars', [ | |
'nonce' => wp_create_nonce( 'wp_rest' ) |
Using ACF Custom Database Tables in conjunction with the Gravity Forms Advanced Post Creation Add-on
The Gravity Forms post creation add-on doesn't appear to use ACF's API functions in order to save post meta on newly created posts. It's likely using core meta functions such as update_post_meta()
instead of ACF's update_field()
and in doing so, the ACF Custom Database Tables plugin doesn't have a chance to intercept the call and store the data in the appropriate custom database table.
In order to make the plugins work together, it's necessary to hook into the post creation process and save the field values using ACF's update_field() function. This will allow ACF Custom Database Tables to locate the appropriate custom DB table and store data there.
An example of this is provided in the below snippets and is based on the Gravity Forms documented approach [here](https://docs.gra