Skip to content

Instantly share code, notes, and snippets.

View doubleedesign's full-sized avatar

Leesa Ward doubleedesign

View GitHub Profile
@doubleedesign
doubleedesign / cpt-case_study.php
Created June 28, 2021 09:43
Use a WooCommerce product attribute taxonomy for a custom post type
<?php
// Register Custom Post Type
// Note: Using woocommerce_after_register_taxonomy hook instead of init because we're using a product attribute taxonomy with this CPT
function doublee_cpt_case_study() {
$labels = array(
'name' => _x('Case studies', 'Post Type General Name', 'doubleedesign'),
'singular_name' => _x('Case study', 'Post Type Singular Name', 'doubleedesign'),
'menu_name' => __('Case studies', 'doubleedesign'),
'name_admin_bar' => __('Case study', 'doubleedesign'),
@doubleedesign
doubleedesign / functions.php
Created April 28, 2021 03:48
Log all WordPress hooks that run
<?php
function doublee_log_all_actions() {
foreach($GLOBALS['wp_actions'] as $action => $count) {
error_log(print_r($action, true));
}
}
add_action('shutdown', 'doublee_log_all_actions');
@doubleedesign
doubleedesign / filter-orders-by-role.php
Last active March 22, 2023 21:45
Add the ability to filter WooCommerce orders by role in wp-admin
<?php
/**
* Add role drop-down to orders screen
*/
function doublee_add_order_user_role_filter_selectbox() {
global $typenow, $wp_query;
if (in_array($typenow, wc_get_order_types('order-meta-boxes'))) :
$user_role = '';
@doubleedesign
doubleedesign / widget-product-categories.php
Created January 17, 2021 06:27
Override the output of the WooCommerce product categories widget to be a Bootstrap accordion
<?php
/**
* Product Categories Widget
* Modifies the WooCommerce product categories widget to display as a Bootstrap accordion.
*
* @package WooCommerce/Widgets
* @version 2.3.0
*/
defined( 'ABSPATH' ) || exit;
@doubleedesign
doubleedesign / create-zip.php
Last active January 17, 2021 06:20
Add a "download all" option to emails for WooCommerce downloadable products. Zips all the files and stores the zip in a specified directory.
<?php
/**
* Utility function to create a zip file from an array of file URLs
* Used for download links in emails
* @param array $files
* @param string $filename
*
* @return string
*/
function doublee_zip_order_files(array $files, string $filename) {
@doubleedesign
doubleedesign / acf-tsf-integration.php
Last active May 17, 2025 19:46
Get meta descriptions in The SEO Framework from ACF flexible content fields
<?php
/**
* The SEO Framework + ACF flexible content integration
* TSF will look at the excerpt and then the content to generate the default meta description.
* If both of those are empty, this code looks for ACF flexible modules to get it from.
* // TODO: Make this work with archives as well as posts
* @param $description
* @param $args
*
* @return mixed|string
@doubleedesign
doubleedesign / _export-orders.php
Last active March 19, 2024 10:05
Export selected data about the currently shown WooCommerce orders to a CSV file
<?php
/**
* Function to export the orders list to a CSV download (not stored anywhere)
* CSV construction based on https://gist.github.com/vrushank-snippets/4274500
* Dev notes:
* - This file is designed to be called via AJAX, with that function providing the order IDs.
* - To use this without AJAX you would just need to define $order_ids = wp_list_pluck($wp_query->posts, 'ID') instead,
* and define $filename as something appropriate here.
*/
function doublee_export_orders() {
@doubleedesign
doubleedesign / current-menu-item.php
Created January 3, 2021 07:26
Add class to CPT archive link in menus when viewing a post of that type
<?php
// Add current-menu-item to post type archive link for this post's type
function doublee_menu_classes($classes, $item) {
global $post;
$id = (isset($post->ID) ? get_the_ID() : NULL);
if(isset($id) && $item->type == 'post_type_archive') {
$current_post_type = get_post_type($id);
$link_post_type = $item->object;
if($current_post_type == $link_post_type) {
@doubleedesign
doubleedesign / user-join-date-column.php
Created December 22, 2020 10:14
Add a join date column to the users table in wp-admin
<?php
/**
* Add custom columns in Users area in the CMS
* @param $columns
*
* @return mixed
*/
function doublee_manage_users_columns($columns) {
$columns['join_date'] = 'Join date';
@doubleedesign
doubleedesign / add-base-tier-option.php
Last active January 18, 2021 01:11
Automatically downgrade a WooCommerce subscription (to a free, no-expiry variation) instead of expiring it
<?php
/**
* Add base tier option to Advanced tab of subscription product
*/
function doublee_subscription_product_advanced_settings() {
$product = wc_get_product(get_the_id());
if($product->get_type() === 'variable-subscription') {
$variations = $product->get_available_variations();
$variation_options = array();
foreach ($variations as $variation) {