Gender-fair WordPress: Fixing translation inequality at the core

At WordCamp US 2017, I took the stage to argue that it’s time that WordPress enables translators to add gender-variable translations, and that we can do this in a way compatible with our existing translation ecosystem.

The slides:

A couple of days later, during contributor day, I was joined by several amazing WordPress (and GlotPress) contributors, and we firmed the proposal which is now up on trac.

Relevant links

Right To Left in WordPress – The Right Way

Here’s the short talk I gave about languages written from right-to-left at WordCamp Europe 2017. I’m visibly nervous — this was the largest crowd I’ve ever presented to.

The slides:

While the slides make it clear that I go from talking about rtl.css — the file, used in WordPress themes, to RTLCSS — the node module, I realize that it’s somewhat hard to understand when watching the video. Sorry about that!

Helpful links:

Some relevant academic research on the effects of reading direction:

  • Influence of reading habits on line bisection – PDF
  • Reading habits influence aesthetic preference – PDF
  • Scanning direction and line bisection: a study of normal subjects and unilateral neglect patients with opposite reading habits – PDF
  • Native reading direction influences lateral biases in the perception of shape from shading – HTML


WP-CLI live presentation, like a pro

I recently gave a talk about WP-CLI at WordCamp Israel 2016. I thought it would be interesting to actually demo WP-CLI in real time, rather than use boring slides.

I used OS X split screen mode, with a terminal window on one side, and a browser on the other showing the site I’m creating and editing:

The tricky part was to not have to type the commands I wanted to demo (which would be boring, and slow). Luckily, I’ve found doitlive, which takes a bash script and types the commands in a simulated window.

By default doitlive echos the characters one by one: the presenter just has to type randomly on his keyboard (like a Madman!).

But I wanted to be able to move on stage, and control the presentation using a remote. So I set doitlive’s speed option to a large number, and each command appeared with a single key press. I still needed a return to execute the command, a key not present on my remote. I worked around this by using TextExpander to replace ‘b’ (from the ‘Black Screen’ button) with a newline.

The result: each command required just two button presses. (The truth: I forgot to turn on TextExpander,  so I had to go back to the lectern for every single command. Bah.)

Some tips that might help if you’re planning to do something similar:

  • Use the `-g` param when opening a url in the browser to keep the focus on the terminal window
  • Write a cleanup/prep script that sets up your environment the way you need it before the demo (empty the db, delete or rename files, etc)
  • Rehearse. A lot. This is true for every presentation, but is a must with live demos.

Here’s the script I’ve used, split into commented sections. I’ll link to the video once it’s up on

#doitlive shell: /bin/bash
#doitlive prompt: l33t {}{r_angle.yellow}{}
#doitlive commentecho: true
#doitlive speed: 1000
cat name.txt
cat wp-cli.txt
open -g

open -g

curl -O

# Permission and move to path as 'wp'
chmod +x wp-cli.phar

sudo mv wp-cli.phar /usr/local/bin/wp

# Test
wp --info
cd mdocs
mv index.html index.old

wp core download

ls -l

open -g

wp core config --dbname=wpcli --dbuser=root --dbpass=root --dbhost=localhost --dbprefix=wpcli_

cat wp-config.php

wp core install --url="" --title="WP-CLI Demo" --admin_user=yoav --admin_password=mypassword

open -g

wp core language install he_IL --activate

open -g

wp core update

wp core language activate en_US

wp option update blogname "l33t wp-cli demo"

open -g

wp package install aaemnnosttv/wp-cli-http-command

wp package list

wp http get --scheme=https > theme-unit-test-data.xml

wp import theme-unit-test-data.xml --authors=create

wp plugin install wordpress-importer --activate

wp import theme-unit-test-data.xml --authors=create --skip=attachment

open -g

wp option get sticky_posts

wp option update sticky_posts [] --format=json

open -g

wp post generate --count=2

open -g


wp http get | wp post generate --post_content --count=1

open -g
wp search-replace Lorem WordPress

open -g


wp scaffold child-theme wpcli-child --parent_theme=twentysixteen --author="Yoav Farhi" --author_uri= --activate

ls -l wp-content/themes/

ls -l wp-content/themes/wpcli-child

cat wp-content/themes/wpcli-child/style.css

open -g

wp scaffold _s wpcli_s --theme_name=wpcli-s --author="Yoav Farhi" --sassify --activate

ls -l wp-content/themes/

ls -l wp-content/themes/wpcli_s
wp theme list

wp theme activate twentyfourteen

open -g

# wp plugin

wp plugin list

wp plugin install jetpack --activate

wp jetpack

wp jetpack module list

wp export

wp db export l33t-backup.sql

wp core multisite-convert

mv ms-rewrite-rules.txt .htaccess

wp site create --slug=msdemo

open -g

wp theme activate twentyfifteen --url=

open -g

nano example-command.php

mkdir wp-content/mu-plugins
cp example-command.php wp-content/mu-plugins/

wp example hello "Wordcamp Israel 2016"

cd ../

cat thankyou.txt

# Thanks for following! Questions?
# Typed using doitlive

Download the full script.

Making WordPress Better

Yesterday I helped someone write their first WordPress core bug report, and then someone else write their first patch to fix that bug.

It happened after I saw a thread in a Facebook group about an issue with WordPress 3.8.
Turns out this was a bug I was responsible for (doh!), but instead of just fixing it, I offered to tutor anyone interested in how to create a bug report and write their first patch.

Revital and Niv jumped on the offer, and so we chatted about how to test and confirm the bug, and how to write a good bug report. Then we followed with installing WordPress via SVN, running the new build process, and generating a patch.

WordPress just gained two new contributors, and this is probably the most meaningful thing I did all week.