Skip to content

Instantly share code, notes, and snippets.

View doubleedesign's full-sized avatar

Leesa Ward doubleedesign

View GitHub Profile
@doubleedesign
doubleedesign / multi-column-lists.js
Last active March 27, 2018 02:54
Adds .dual-column class to the specified list element (ul or ol) when they have more than the specified number of list items, using vanilla JavaScript
/**
* Multi-column long lists
* Adds .dual-column class to the specified list element (ul or ol) when they have more than the specified number of list items
* @param selectedList - selector of lists to run the function on. Expects an array (i.e. use querySelectorAll)
* @param lengthToBreakAt - how many list items there should be before adding dual-column class
*/
function multiColumnList(selectedList, lengthToBreakAt) {
var selector = selectedList;
for (var i = 0; i < selector.length; i++) {
var listItems = selector[i].querySelectorAll('li');
@doubleedesign
doubleedesign / setHeightToHighest.js
Created April 24, 2018 02:43
Get the heights of all elements that match the given selector, and set all of them to the height of the highest one
/**
* Get the heights of all elements that match the given selector, and set all of them to the height of the highest one
* Note: According to https://coderwall.com/p/kvzbpa/don-t-use-array-foreach-use-for-instead, a for loop is faster than forEach
* @param selector - the CSS selector to set to the highest
*/
function setHeightToHighest(selector) {
// Get our items - returns a NodeList of elements
var items = document.querySelectorAll(selector);
// Create an array to store the heights
var heights = [];
@doubleedesign
doubleedesign / wrapThis.js
Created March 27, 2018 01:48
Wrap an element in a specified tag with specified classes, using vanilla JavaScript
/**
* Wrap an element
* @param elementToWrap - selector of element to wrap
* @param elementToUse - HTML tag to use for the wrapper
* @param classes - class(es) to add; accepts string or array
* @returns {Node | *}
*/
function wrapThis(elementToWrap, elementToUse, classes) {
var wrapper = document.createElement(elementToUse);
elementToWrap.parentNode.appendChild(wrapper);
@doubleedesign
doubleedesign / change-excerpt-explanation.php
Created September 5, 2018 02:37
Change the explanatory text in the WordPress excerpt meta box, according to post type.
/**
* Change the excerpt explanation in the backend
* @param $translated_text
* @param $text
* @param $domain
*
* @return string
*/
function doublee_change_excerpt_explanation( $translated_text, $text, $domain ) {
$post_type = get_post_type();
@doubleedesign
doubleedesign / accessibility-admin-notice.php
Created December 4, 2018 00:48
Add a collapsible admin notice with content accessibility tips to posts and pages
function doublee_accessibility_admin_notice() {
$screen = get_current_screen();
if(in_array($screen->id, array('post', 'page'))) { ?>
<div class="notice notice-warning notice-accessibility">
<div id="accessibility-tips" class="meta-box-sortables">
<div id="accessibility_meta" class="postbox closed">
<button type="button" class="handlediv" aria-expanded="false">
<span class="screen-reader-text">Toggle panel: Accessibility Tips</span>
<span class="toggle-indicator" aria-hidden="true"></span>
</button>
@doubleedesign
doubleedesign / shortcode-button.js
Created December 12, 2018 04:23
WordPress button shortcode builder
(function() {
tinymce.PluginManager.add('button', function( editor, url ) {
// Add button to the editor
editor.addButton('button', {
icon: 'link',
text: 'Button',
tooltip: 'Insert button',
onclick: function() {
@doubleedesign
doubleedesign / register-customised-woocommerce-filter-widgets.php
Last active April 22, 2019 12:30
Customise HTML markup of WooCommerce filter widgets: Add class according to the attribute it's being used for; add logo (using ACF field on the attribute terms) if it's the "brand" attribute filter. Could be modified to display differently, output additional data according to which attribtue it is, etc.
/**
* Widget areas
*
* @package WordPress
* @subpackage Promo Printing
* @since Promo Printing 1.0
*/
if (class_exists('Woocommerce')) {
@doubleedesign
doubleedesign / ninja-group-signup.php
Created April 22, 2019 13:02
Ninja Forms + Groups. When a user registers for an account using Ninja Forms User Management (https://ninjaforms.com/extensions/user-management), assign them to a group (https://wordpress.org/plugins/groups) according to the value of a drop-down selection which matches the "slug" format equivalent of the group name.
<?php
/**
* Get all groups
* Utility function
* @author Antonio Blanco
* @see https://github.com/eggemplo/Groups-Utilities/blob/master/get_groups.php
*/
function doublee_get_all_groups() {
global $wpdb;
$groups_table = _groups_get_tablename('group');
@doubleedesign
doubleedesign / query.php
Last active January 8, 2020 06:01
Wordpress Event CPT: Filter archive by ACF date field, with month from and two selected by the user
<?php
/**
* Archive filter queries using the drop-downs on each archive
*
* @see filters.php
* @param $query
*/
function wh_filter_archives($query) {
// Do not modify queries in the admin
@doubleedesign
doubleedesign / wc-show-cross-sells.php
Created May 16, 2017 01:06
WooCommerce - Show an unordered list of cross-sells on the single product page
<?php // Use on single product template ?>
<div class="related">
<?php
// Customised: Show cross-sells on single product pages, under the attributes and short description
global $post;
$crosssells = get_post_meta( $post->ID, '_crosssell_ids',true);
if($crosssells) {
echo '<h2>Related products</h2>';
echo '<ul>';