Installing WordPress Plugins with Composer

I found out a cool usage for composer that I didn’t know about; use it for installing WordPress plugins. I use Phing to do all my deployments (slowly moving towards continuous integration with Jenkins). I wanted a way to get the plugin files and include them with my deployment automagicly. Composer can download and extracting the plugin archive file rather than using the gui in the wordpress admin. This task can be done when all your other required libraries are installed.

I wanted to install Contact Form 7. In order for this to work you need to download the plugin from a custom repository, so I setup my composer.json file something like this:

{
  "repositories": [
    {
      "type": "package",
      "package": {
        "name": "takayukister/contact-form-7",
        "type": "wordpress-plugin",
        "version": "4.3.1",
        "dist": {
          "type": "zip",
          "url": "https://downloads.wordpress.org/plugin/contact-form-7.4.3.1.zip"
        },
        "require": {
          "composer/installers": "v1.0.7"
        }
      }
    }
  ],
  "require": {
    "takayukister/contact-form-7": "4.3.1"
  },
  "extra": {
    "installer-paths": {
      "public_html/wp-content/plugins/{$name}/": [
        "type:wordpress-plugin"
      ],
      "public_html/wp-content/themes/{$name}/": [
        "type:wordpress-theme"
      ]
    }
  }
}

I set the name of the repo to the “takayukister/contact-form-7″ and then used that as it’s require name with the current version (right now 4.3.1). The paths in the “extra” section tell composer where to put the plugin once it’s installed.

In my Phing build.xml I could then run this before any packaging tasks:

<exec command="php composer.phar install" level="verbose" passthru="true" />

If there’s a better way to do this I’d like to hear it.

::before and ::after

This is the first in a series of “today I learned” posts. Today it’s all about the pseudo element ::before and ::after.  This isn’t new news to most I’m sure, but I’ve just recently started using these and think they are pretty cool.

Say you are working on a site where you have access to the styles but not the DOM. You need to add an element to the page without actually adding any markup to a page. That’s where ::before and ::after come in. You can add either of these .element::before or .element::after to add extra element to the DOM this way.

I created an example (albeit kinda crude) to show how to use the elements. The snowman’s torso is a DOM element and the head and foot are added via .snowman::before and .snowman::after css elements. Same with the hands, there’s a empty .hand element on the page and the left and right hands are placed with .hands::before and .hands::after.

See the Pen MKVwLg by Nate Nolting (@natenolting) on CodePen.0

One caveat I’ve found is if you want the added ::before or ::after to behave like a block element you must add content: ""; to your css in order for the element to display, otherwise it has no height or width.

It does seem that we can all use it, so go a make some pseudo elements!