Aunque es un tema cuanto menos, aburrido, es muy necesario a la hora de trabajar en grupo, o si vas a publicar tu plugin o plantilla en WordPress. Las convenciones son normas aplicadas al código para que todos los desarrolladores puedan interpretar el código sin muchos problemas. También por estética: queda más elegante un código con la misma tabulación (por ejemplo) en cada linea que, que cada programador ponga la tabulación que se le antoje. Sin más preámbulos vamos al tema:

 

COMILLAS SIMPLES Y DOBLES

[codesyntax lang=»php»]

<?php

echo '<a href="/static/link" title="Yeah yeah!">Link name</a>';
echo "<a href='$link' title='$linktitle'>$linkname</a>"

[/codesyntax]

Si no tienes nada que evaluar en la cadena, pon comillas simples, sino comillas dobles.

 

SANGRÍA

Usa tabulaciones y no espacios.

[codesyntax lang=»php»]

<?php

$foo   = 'somevalue';
$foo2  = 'somevalue2';
$foo34 = 'somevalue3';
$foo5  = 'somevalue4';

[/codesyntax]

Los arrays asociativos deberían empezar en una linea nueva.

[codesyntax lang=»php»]

<?php

$my_array = array(
'foo'   => 'somevalue',
'foo2'  => 'somevalue2',
'foo3'  => 'somevalue3',
'foo34' => 'somevalue3',
);

[/codesyntax]

 

LLAVES

En bloques multilinea se deben poner las llaves tal como sigue:

[codesyntax lang=»php»]

<?php

if ( condition ) {
    action1();
    action2();
} elseif ( condition2 && condition3 ) {
    action3();
    action4();
} else {
    defaultaction();
}

[/codesyntax]

Si solo hay una linea en cada bloque se pueden omitir por brevedad.

[codesyntax lang=»php»]

<?php

if ( condition )
    action1();
elseif ( condition2 )
    action2();
else
    action3();

[/codesyntax]

Si hay un bloque con más de una linea se deberán escribir con llaves:

[codesyntax lang=»php»]

<?php

if ( condition ) {
    action1();
} elseif ( condition2 ) {
    action2a();
    action2b();
}

[/codesyntax]

Los bucles deben contenerse siempre entre llaves:

[codesyntax lang=»php»]

<?php

foreach ( $items as $item ) {
    process_item( $item );
}

[/codesyntax]

 

NO UTILIZAR LA ETIQUETA DE INICIO CORTA DE PHP

La forma correcta sería:

<?php ... ?>

 

NO CERRAR EL SCRIPT DE PHP CON SU ETIQUETA

Es decir en vez de usar:

<?php ... ?>

Usaremos solo la inicial

<?php ...

 

USO DEL ESPACIO

Pon espacios siempre después de las comas y en ambos lados de los operadores lógicos, de comparación, de cadenas y de asignación.

x == 23
foo && bar
! foo
array( 1, 2, 3 )
$baz . '-5'
$term .= 'X'

Pon espacios a ambos lados de los paréntesis de apertura y cierre.

foreach ( $foo as $bar ) { ...

Cuando definas una función, hazlo así:

function my_function( $param1 = 'foo', $param2 = 'bar' ) { ...

Al realizar comparaciones lógicas:

if ( ! $foo ) { ...

Cuando hagas una conversión de tipos:

foreach ( (array) $foo as $bar ) { ...

$foo = (boolean) $bar;

Cuando se hace referencia a un elemento de un array, solo se incluyen espacios en blanco cuando es una variable:

$x = $foo['bar'];
$x = $foo[ $bar ];

 

FORMATEO DE SENTENCIAS SQL

Las partes de la sentencia que sean palabras de SQL deben ir en mayusculas, como SELECT o WHERE.

Es recomendable usar el método $wpdb->prepare() para formatear la sentencia SQL. Este método añadirá las comillas a los valores que lo necesiten.

$var = "dangerous'"; // Los datos en crudo podrían o no necesitar ser formateados
$id = some_foo_number(); // El dato que nosotros esperamos es un número, pero no estamos seguros

$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_title = %s WHERE ID = %d", $var, $id ) );

%s se utiliza cuando el valor es una cadena (string) y %d cuando es un número. En el método prepare() se añaden las variables que se formatearán y añadirán a la consulta en orden.

 

CONVENCIONES DE NOMENCLATURAS

Usa letras minúsculas en variables y nombres de funciones. Separa las palabras con guiones bajos (_).

function some_name( $some_variable ) { [...] }

Los nombres de clases deben utilizar palabras capitalizadas separadas con guiones bajos. Las siglas deben estar en mayúsculas:

class Walker_Category extends Walker { [...] }
class WP_HTTP { [...] }

Los archivos deben ser nombrados descriptivamente con letras minúsculas y las palabras deben separarse con guiones.

my-plugin-name.php

Los nombres de archivos de clase se basarán en el nombre de la clase precedido de class- y los guiones bajos de la clase serán sustituidos por guiones, por ejemplo WP_Error pasa a ser:

class-wp-error.php

 

VALORES DE PARÁMETROS DE FUNCIONES AUTOEXPLICATIVOS

Se prefieren valores de cadena que solo true y false cuando se llama a las funciones.

// Correcto
function eat( $what, $speed = 'slowly' ) {
...
}
eat( 'mushrooms' );
eat( 'mushrooms', 'slowly' );
eat( 'dogfood', 'fast' );

 

OPERADOR TERNARIO

El operador ternario está bien, pero siempre que lo uses prueba que la sentencia sea verdad, no falsa. De la otra forma es confuso. En el caso de empty() se permite el uso de ! empty(), ya que es más legible.

// (si la sentencia es verdad) ? (hacer esto) : (sino, hacer esto);
$musictype = ( 'jazz' == $music ) ? 'cool' : 'blah';
// (si el campo no está vacío ) ? (hacer esto) : (sino, hacer esto);

 

CONDICIONES YODA

if( true == $the_force ){
  $victorious = you_will( $be );
}

Siempre que hagas comparaciones lógicas pon la variable en el lado derecho, la constante o el literal en el izquierdo.

Esto se utiliza para en el caso de que en vez de == pongas = (admítelo, más de una vez te habrá pasado), de esta manera saltará un error ya que no puedes asignar a una constante el valor de la variable.

Es un poco extraño, pero útil.

 

CÓDIGO LIMPIO

En general, la legibilidad es más importante que la limpieza o la brevedad.

isset( $var ) || $var = some_function();
if ( ! isset( $var ) )
    $var = some_function();