Skip to content

Instantly share code, notes, and snippets.

mishterk / load-images-from-production.php
Last active Jul 14, 2022
WordPress plugin for loading images from production on a staging/development website. See
View load-images-from-production.php
* Plugin Name: Load Images From Production (for staging/dev)
* Description: Hooks into WP's media URL generation and replaces the domain with the production domain.
* Author: Phil Kurth
* Author URI:
// If this file is called directly, abort.
defined( 'WPINC' ) or die();
mishterk / replace-images-with-kittens.php
Last active Jul 14, 2022
Replace all attachment images with kitten placeholders...
View replace-images-with-kittens.php
add_filter( 'wp_get_attachment_image_src', function ( $image ) {
$image[0] = "$image[1]/$image[2]";
return $image;
}, 10 );
View register-custom-admin-columns.php
$post_type = 'my_post_type';
// Register the columns.
add_filter( "manage_{$post_type}_posts_columns", function ( $defaults ) {
$defaults['custom-one'] = 'Custom One';
$defaults['custom-two'] = 'Custom Two';
View how-to-add-where-clause-to-wp-query-1.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";
View use-acf-field-as-fallback-for-excerpt.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 );
View woocommerce-trim-zeros-from-price.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'
View disable-deprecation-notice-logging.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' );
View pluralise-string-based-on-variable-with-sprintf-and-acf.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(
'%d item in stock',
'%d items in stock',
mishterk / .gitignore
Last active Jan 20, 2022
This is a boilerplate for a .gitignore file when tracking at the WordPress wp-content directory level. It allows tracking of custom plugins and themes whilst ignoring everything else.
View .gitignore
mishterk / override-woocommerce-menu-item-url.php
Last active Jan 20, 2022
These snippets work together to allow us to add custom WooCommerce account menu links to any URL. See for more detail.
View override-woocommerce-menu-item-url.php
add_filter( 'woocommerce_get_endpoint_url', function ( $url, $endpoint, $value, $permalink ) {
if ( $endpoint === 'my-courses' ) {
$url = home_url( 'my-courses' );
return $url;
}, 10, 4 );