Skip to content

Instantly share code, notes, and snippets.


Chris Hardie ChrisHardie

View GitHub Profile
ChrisHardie /
Created Jul 19, 2014
Keybase identity proof

Keybase proof

I hereby claim:

  • I am ChrisHardie on github.
  • I am chrishardie ( on keybase.
  • I have a public key whose fingerprint is 20C3 E523 5B67 AB60 9F3C 1024 FFB4 0D5A 25D9 BA70

To claim this, I am signing this object:

ChrisHardie / jetpack-test.php
Created Jan 23, 2018 — forked from delputnam/jetpack-test.php
A simple WordPress plugin to allow testing of Jetpack's Related Posts module
View jetpack-test.php
* @package Jetpack_Test
* @version 1.0
Plugin Name: Jetpack Test
Description: Allows certain Jetpack modules that would otherwise require a connection to to be run in a local development environment.
Author: Del Putnam
ChrisHardie / class-jch-portfolio-postmeta.php
Created Jul 5, 2018
Extend the Jetpack Portfolio CPT to allow specifying a project URL that can be linked to instead of the portfolio item itself
View class-jch-portfolio-postmeta.php
* Class JCH_Portfolio_Postmeta
* Create meta boxes, post meta fields and archive link filters for portfolio items
* With some help from
class JCH_Portfolio_Postmeta {
ChrisHardie / functions.php
Last active Aug 21, 2018
Example function to load plugins within wp-content/themes/mytheme/plugins/
View functions.php
* Add in-theme plugins
function my_theme_plugins() {
$plugins_to_include = array(
if ( count( $plugins_to_include ) ) {
ChrisHardie / functions.php
Created Sep 12, 2018
Override Jetpack development mode to activate modules for testing in WordPress
View functions.php
* Modify Jetpack module properties for testing/development
* @param array $mod Module to look at modifying the properties of.
* @return boolean
function jp_module_override( $mod ) {
switch ( $mod['name'] ) {
case 'Related posts':
$mod['requires_connection'] = false;
ChrisHardie / functions.php
Created Sep 24, 2018
WordPress one-time role/capability fix for Yoast SEO on Multisite
View functions.php
if ( ! function_exists( 'my_add_seo_caps' ) ) {
function dnc_add_seo_caps() {
// Get admin role
$role = get_role( 'administrator' );
// Add YOAST SEO Roles
$role->add_cap( 'wpseo_manage_options' );
$role->add_cap( 'wpseo_edit_advanced_metadata' );
$role->add_cap( 'wpseo_manage_redirects' );
$role->add_cap( 'wpseo_bulk_edit' );
ChrisHardie /
Created Jan 10, 2019
Generate an RSS feed in Perl
use XML::RSS;
use strict;
my @event_array = <SQL MAGIC GOES HERE>;
my $rss = new XML::RSS;
$rss->channel( title => 'Your Title Here', link => 'https://...',
description => 'Your description here.' );
ChrisHardie / multisite_attachment_url.php
Created Mar 18, 2019
Example WordPress plugin to help simplify attachment URLs on multisite sites with mapped domains
View multisite_attachment_url.php
* Plugin Name: Multisite Domain Mapping Attachment URL Fixes
* Description: Update attachment URLs to use mapped domain and remove mention of "sites" path.
* Author: Chris Hardie
* Rewrite attachment URLs (and related srcset URLs) to the non-multisite, mapped domain version if a domain is mapped
* Requires that the related nginx config that maps the non-multisite URL to the multisite URL be in place
add_filter( 'wp_get_attachment_url', 'jch_attachment_url_with_domain_mapping' );
ChrisHardie / get-facebook-events.php
Created Oct 8, 2019
Proof of concept, retrieve publicly-available Facebook page event data.
View get-facebook-events.php
* Proof of concept, retrieve publicly-available Facebook page event data.
* Chris Hardie <>
* To use, first add Guzzle as a dependency:
* $ commposer require guzzlehttp/guzzle
ChrisHardie / storycorps-to-rss.php
Created Oct 14, 2019
Example PHP script to generate an RSS feed of a StoryCorps Archives interview search result
View storycorps-to-rss.php
$storycorps_archive_html = file_get_contents( '[places]=richmond,indiana' );
$storycorps_archive = json_decode( $storycorps_archive_html, true );
$xml = new SimpleXMLElement('<rss/>');
$xml->addAttribute("version", "2.0");
$channel = $xml->addChild("channel");