wordless, stop writing wordpress themes like it's 1998

48
W ORDLESS Stop writing themes... like it's 1998 @arkh4m @mukkoo WP Day 13/09/13

Upload: filippo-dino

Post on 10-May-2015

144 views

Category:

Software


1 download

DESCRIPTION

All the power of Haml, Compass and Coffeescript, in your WordPress theme. Stop writing themes like it's 1998. http://welaika.github.com/wordless

TRANSCRIPT

Page 1: Wordless, stop writing WordPress themes like it's 1998

WORDLESSStop writing themes... like it's 1998

@arkh4m @mukkoo

WP Day 13/09/13

Page 2: Wordless, stop writing WordPress themes like it's 1998

Why WordPress?

Page 3: Wordless, stop writing WordPress themes like it's 1998

✓ CMS standard

✓ So many plugins!

✓ Huge community

Page 4: Wordless, stop writing WordPress themes like it's 1998

Lots of freedom!

Page 5: Wordless, stop writing WordPress themes like it's 1998

Freedom is good.

Page 6: Wordless, stop writing WordPress themes like it's 1998

Some of them want to abuse you

Some of them want to be abused

FREEDOM

Page 7: Wordless, stop writing WordPress themes like it's 1998

Always mix PHP and HTML

1 <div id="content" class="site-content" role="main"> 2 <?php if ( have_posts() ) : ?> 3 <?php /* The loop */ ?> 4 <?php while ( have_posts() ) : the_post(); ?> 5 <?php get_template_part( 'content', get_post_format() ); ?> 6 <?php endwhile; ?> 7 8 <?php twentythirteen_paging_nav(); ?> 9 10 <?php else : ?> 11 <?php get_template_part( 'content', 'none' ); ?> 12 <?php endif; ?> 13 </div>

Source: twentythirteen/index.php, line 20

Page 8: Wordless, stop writing WordPress themes like it's 1998

You can mix PHP and Javascript...

1 <?php $header_image = get_header_image(); ?> 2 <style type="text/css" id="twentythirteen-admin-header-css"> 3 .appearance_page_custom-header #headimg { 4 border: none; 5 -webkit-box-sizing: border-box; 6 -moz-box-sizing: border-box; 7 box-sizing: border-box; 8 } 9 </style>

Source: twentythirteen/custom-header.php, line 143

and you can mix PHP and CSS.

Page 9: Wordless, stop writing WordPress themes like it's 1998

Write everything in functions.php

Source: twentythirteen

๏ 3 filters

๏ 6 actions

๏ 15 functions

๏ 527 lines

Page 10: Wordless, stop writing WordPress themes like it's 1998

Okay, this works.

Page 11: Wordless, stop writing WordPress themes like it's 1998

3 months later...

Page 12: Wordless, stop writing WordPress themes like it's 1998
Page 13: Wordless, stop writing WordPress themes like it's 1998

Our story

Page 14: Wordless, stop writing WordPress themes like it's 1998

Everyone is different

Every client has different needs.

Every team has different tools.

Every project is unique.

It’s very cumbersome to pass a project made

by a developer to another developer.

Page 15: Wordless, stop writing WordPress themes like it's 1998

Developer Lock-in Theorem

A developer can work on a project

if and only if he has built it.

Page 16: Wordless, stop writing WordPress themes like it's 1998

The problems we had

We have a team of 8 developers. That

means lot of different people with very

different coding styles.

We couldn’t move across projects quickly

and be agile and dynamic.

Page 17: Wordless, stop writing WordPress themes like it's 1998

We needed conventions

We needed a more structured organization,

a “framework”: always know where to put

files and where to find them.

Page 18: Wordless, stop writing WordPress themes like it's 1998

A better workflow

We want to make projects repeatable

and familiar. We like familiar.

Page 19: Wordless, stop writing WordPress themes like it's 1998

Style guides, Wikis, Docs

๏ Kind of hard to write

๏ Very easy to forget

๏ Very easy to ignore

We needed something else!

Page 20: Wordless, stop writing WordPress themes like it's 1998

Style guides, Wikis, Docs

๏ Kind of hard to write

๏ Very easy to forget

๏ Very easy to ignore

We needed something else!

Page 21: Wordless, stop writing WordPress themes like it's 1998

So we made Wordless.

Page 22: Wordless, stop writing WordPress themes like it's 1998

✓ Default theme structure

✓ Initializers and helpers

✓ Better frontend tools

Wordless, a WordPress plugin

Page 23: Wordless, stop writing WordPress themes like it's 1998

awesome_theme├──── index.php├──── assets│ ├──── fonts│ ├──── images│ ├──── javascripts│ └──── stylesheets├──── config│ ├──── initializers│ └──── locales└──── theme ├──── assets │ ├──── javascripts │ └──── stylesheets ├──── helpers │ └──── README.mdown └──── views ├──── layouts └──── posts

Folder structure

Page 24: Wordless, stop writing WordPress themes like it's 1998

Why Wordless is good

✓ Every Wordless theme has this same,

identical structure

✓ You always know where to find things

✓ Conventions are good <3

Page 25: Wordless, stop writing WordPress themes like it's 1998

config/initializers├──── backend.php├──── custom_post_types.php├──── default_hooks.php├──── hooks.php├──── login_template.php├──── menus.php├──── shortcodes.php├──── thumbnail_sizes.php└──── wordless_preferences.php

Wordless initializers

Every customization is isolated in its own file

Page 26: Wordless, stop writing WordPress themes like it's 1998

Wordless helpers

✓ link_to, image_tag, video_tag, truncate

✓ placeholder_text, placeholder_image

✓ latest_posts_of_type

✓ latest_posts_of_category

Wordless ships with 50+ default helpers:

Page 27: Wordless, stop writing WordPress themes like it's 1998

BETTER FRONTEND TOOLS

Page 28: Wordless, stop writing WordPress themes like it's 1998

Wordless supports

✓ HAML for writing beautiful HTML

✓ SASS for writing concise CSS

✓ CoffeeScript for writing safer JavaScript

Page 29: Wordless, stop writing WordPress themes like it's 1998

Your production server will just use PHP,

HTML, CSS and JavaScript. No worries!

Wordless automatically compiles

all these great languages for you.

Page 30: Wordless, stop writing WordPress themes like it's 1998

HAML haml.info

A small language which compiles to HTML, which fundamental principle is:

“Markup should be beautiful”

HAML makes markup templates faster to write and easier to read.

Page 31: Wordless, stop writing WordPress themes like it's 1998

<div id="content"> <div class="left column"> <h2>Ciao WPDay!</h2> <?php $info = "Siete caldi?"; ?></p> <p><?php echo $info; ?></p> </div> <div class="right column"> <ul> <li class="post highlight"> <img src="one.jpg" /> </li> <li class="post"> <img src="two.jpg" /> </li> <li class="post"> <img src="three.jpg" /> </li> </ul> </div></div>

HTML

Page 32: Wordless, stop writing WordPress themes like it's 1998

<div id="content"> <div class="left column"> <h2>Ciao WPDay!</h2> <?php $info = "Siete caldi?"; ?></p> <p><?php echo $info; ?></p> </div> <div class="right column"> <ul> <li class="post highlight"> <img src="one.jpg" /> </li> <li class="post"> <img src="two.jpg" /> </li> <li class="post"> <img src="three.jpg" /> </li> </ul> </div></div>

HTML#content .left.column %h2 Ciao WPDay! - $info = "Siete caldi?" %p= $info .right.column %ul %li.post.highlight %img(src="one.jpg") %li.post %img(src="two.jpg") %li.post %img(src="three.jpg")

HAML

Page 33: Wordless, stop writing WordPress themes like it's 1998

SASS sass-lang.com

An extension of CSS3 which compiles to CSS and adds nested rules, variables and mixins.

Compass is a SASS framework which adds many mixins for browser compatibility.

Page 34: Wordless, stop writing WordPress themes like it's 1998

div.button{ margin: 2em 0; -webkit-box-shadow: 0px 0px 5px #000; -moz-box-shadow: 0px 0px 5px #000; box-shadow: 0px 0px 5px #000; filter: progid: DXImageTransform. Microsoft.Alpha(Opacity=10); opacity: 0.1;}div.button span{ text-align: right;}li{ -webkit-border-radius: 25px; -moz-border-radius: 25px; -ms-border-radius: 25px; -o-border-radius: 25px; border-radius: 25px; font-family: serif; font-weight: bold; font-size: 1.2em;}

CSS SASS & Compass

Page 35: Wordless, stop writing WordPress themes like it's 1998

div.button{ margin: 2em 0; -webkit-box-shadow: 0px 0px 5px #000; -moz-box-shadow: 0px 0px 5px #000; box-shadow: 0px 0px 5px #000; filter: progid: DXImageTransform. Microsoft.Alpha(Opacity=10); opacity: 0.1;}div.button span{ text-align: right;}li{ -webkit-border-radius: 25px; -moz-border-radius: 25px; -ms-border-radius: 25px; -o-border-radius: 25px; border-radius: 25px; font-family: serif; font-weight: bold; font-size: 1.2em;}

CSSdiv.button margin: 2em 0 +box-shadow(#000, 0, 0, 5px) +opacity(0.1) span text-align: right

li +border-radius(25px) font: family: serif weight: bold size: 1.2em

SASS & Compass

Page 36: Wordless, stop writing WordPress themes like it's 1998

CoffeeScript coffeescript.org

A little language that compiles to JavaScript, which main motto is:

CoffeeScript takes the good parts of it and makes you write better, safer and faster code.

“It’s just JavaScript!”

Page 37: Wordless, stop writing WordPress themes like it's 1998

var fill = function(container, liquid) { if (container == null){ container = "cup"; } if (liquid == null){ liquid = "coffee"; } return "Filling the " + container + " with " + liquid + "...";};

var result = [], ingredients = ["coffee", "milk", "syrup", "ice"];

for (i=0; i<ingredients.length; i++) { result.push(fill(ingredients[i]));}

JavaScript

CoffeeScript

Page 38: Wordless, stop writing WordPress themes like it's 1998

var fill = function(container, liquid) { if (container == null){ container = "cup"; } if (liquid == null){ liquid = "coffee"; } return "Filling the " + container + " with " + liquid + "...";};

var result = [], ingredients = ["coffee", "milk", "syrup", "ice"];

for (i=0; i<ingredients.length; i++) { result.push(fill(ingredients[i]));}

JavaScript

fill = (container = "cup", liquid = "coffee") -> "Filling the #{container} with #{liquid}..."

ingredients = ["coffee", "milk", "syrup", "ice"]result = (fill(elem) for elem in ingredients)

CoffeeScript

Page 39: Wordless, stop writing WordPress themes like it's 1998

Compiled CoffeeScriptvar elem, fill, ingredients, result;

fill = function(container, liquid) { if (container == null) { container = "cup"; } if (liquid == null) { liquid = "coffee"; } return "Filling the " + container + " with " + liquid + "...";};

ingredients = ["coffee", "milk", "sugar", "ice"];

result = (function() { var _i, _len, _results; _results = []; for (_i = 0, _len = ingredients.length; _i < _len; _i++) { elem = ingredients[_i]; _results.push(fill(elem)); } return _results;})();

Page 40: Wordless, stop writing WordPress themes like it's 1998

WTF? I don’t need this sh*t

Page 41: Wordless, stop writing WordPress themes like it's 1998

That's cool bro, you can use

HTML, CSS and Javascript.

Page 42: Wordless, stop writing WordPress themes like it's 1998

We have been using it in production for two yearson more than 50 projects

Page 43: Wordless, stop writing WordPress themes like it's 1998

Why we use it

Page 44: Wordless, stop writing WordPress themes like it's 1998

<?php $the_query = new WP_Query(array('post_type' => 'recipe', 'posts_per_page' => -1)); if ( $the_query->have_posts() ) { while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <h2> <a href="<?php the_permalink() ?>"><?php the_title(); ?></a> </h2> <p class="content" id="recipe-<?php the_ID(); ?>"> <img src="<?php bloginfo('template_url'); ?>/images/flour.jpg" class="alignleft" />

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. </p> <?php endwhile; } else { ?> <h4><?php echo __('No posts found'); ?></h4> <?php } wp_reset_postdata();?>

WordPress

Page 45: Wordless, stop writing WordPress themes like it's 1998

- $the_query = latest_posts_of_type( 'recipe' )- if ( $the_query->have_posts() ) - while ( $the_query->have_posts() ) - $the_query->the_post() %h2= link_to(get_permalink(), get_the_title()) %p.content(id = "recipe-#{get_the_ID()}") = image_tag('flour.jpg', array('class' => 'alignleft')) = placeholder_text(20)- else %h4= __('No posts found')

Wordless

Page 46: Wordless, stop writing WordPress themes like it's 1998

- $the_query = latest_posts_of_type( 'recipe' )- if ( $the_query->have_posts() ) - while ( $the_query->have_posts() ) - $the_query->the_post() %h2= link_to(get_permalink(), get_the_title()) %p.content(id = "recipe-#{get_the_ID()}") = image_tag('flour.jpg', array('class' => 'alignleft')) = placeholder_text(20)- else %h4= __('No posts found')

Wordless

Page 47: Wordless, stop writing WordPress themes like it's 1998

Why Wordless

✓ Wordless makes themes familiar

✓ Wordless makes you more productive

✓ Wordless lets you use better tools

Page 48: Wordless, stop writing WordPress themes like it's 1998

✓ Ju Liu @arkh4m

✓ Filippo Gangi Dino @mukkoo

✓ weLaika dev.welaika.com

http://github.com/welaika/wordless

QUESTIONS!

Open Source