WordPress

Notebook

Tabla de contenido

Tabla de contenido

General

Instalación

Update

Update Automático

Update Manual

Moving

Deploy

Themes

Plugins

Backup

El Dashboard

Documentación

Breve Glosario

Plugins recomendados

Admin in English with Switch

Roles Editor

Edit Flow

Custom Content Type Manager (CCTM)

Simple Page Ordering

Post Types Order

NextGEN Gallery

Theming

De HTML a PHP

Útiles

URLs

Child Theme

Jerarquía de templates

Page Template

Front page

Front page estático

Logo Link

Soporte de menús

Error 404

Login personalizado

Tags Condicionales

Snippets

WP_Query

Plugins

Shortcodes

Buenas Prácticas

Checklist

Útiles

Recetas

Ideas


General

Instalación

Update

Update Automático

  1. En el Dashboard: Dashboard, Updates.
  2. Mientras se realiza el update, el site es puesto automáticamente en mantenimiento.

Update Manual

  1. Del zip usado para la instalación, extraer todo en un directorio aparte y eliminar wp-config.php y wp-content/
    Todo lo demás se copiará al site a actualizar.
  2. En el site a actualizar, se puede eliminar o mover a otro lugar, todo, excepto wp-config.php y wp-content/
  3. Copiar los archivos de la nueva versión al site.

[TODO] ¿Cómo personalizar la pantalla de mantenimiento?

Moving

Hay que tener en cuenta que WordPress almacena en la base de datos tanto los url absolutos de los enlaces como las rutas absolutas de los archivos.

Debido a esto, un cambio en el dominio del site, o de ubicación física, puede dejar inutilizable el site, o afectarlo seriamente.

Por el momento, mover un site a otra ubicación, no es una tarea trivial (como con Drupal, por ejemplo), y hay que seguir con cuidado ciertas pautas.

Deploy

Pasar un site http://localhost/mywordpress a http://mydomain.com/mywordpress puede ser una tarea complicada, ya que la base de datos contiene en duro esos url.

También las rutas de muchos archivos.

Me ha resultado usar los siguientes pasos:

  1. Copiar el árbol del site al destino
  2. Exportar la base de datos
  3. Actualizar .htaccess y wp-config.php con los valores adecuados
  4. Importar la base de datos en el servidor de destino
  5. Actualizar la base de datos con los valores de url y rutas adecuados.
    Para esto es util la herramienta
    Search and Replace DB, que se puede encontrar en http://interconnectit.com/products/search-and-replace-for-wordpress-databases/
    Un simple reemplazo en el sql exportado es incompleto, porque muchas de las menciones de los reemplazables esta serializada; es decir, aparece con la longitud de la cadena al lado. Es necesario hacer un reemplazo inteligente que recalcule esa longitud.
    Realizar tantos reemplazos como sea necesario:
  1. url del site
  2. rutas del site

Themes

Plugins

Backup

El Dashboard

Documentación

Breve Glosario


Plugins recomendados

Admin in English with Switch

Admin in English with Switch agrega a la barra superior un menú para activar o desactivar el idioma inglés para la interfaz del administrador.

Roles Editor

Users, User Role Editor. Para administrar roles de usuario.

Requiere instalar previamente el plugin User Role Editor.

Edit Flow

Edit Flow. Para administrar el flujo de publicación.

Requiere instalar previamente el plugin Edit Flow.

Custom Content Type Manager (CCTM)

Custom Content Type Manager facilita la creación de nuevos tipos de posts, nuevos campos y nuevas taxonomías.

Simple Page Ordering

Simple Page Ordering permite ordenar arbitrariamente los posts y custom posts. El reordenamiento se hace diréctamente en la lista de posts. La información de orden se guarda en el campo menu_order.

Cada tipo a reordenar debe tener soporte para page-attributes y además hierarchical en true. Si se usa CTM, para el tipo deseado, hacer click en Edit, tab Fields, check Page Attributes, check Hierarchical, Save.

Post Types Order

Post Types Order permite ordenar arbitrariamente los posts y custom posts. Para cada tipo, provee un enlace (Re-order) y una pantalla adicional donde hacer el reordenamiento.

Admin Columns

NextGEN Gallery

NextGEN Gallery facilita la creación de galerías de imágenes.

Aunque provee varias opciones y plugins adicionales (como NextGEN 3D and 2D Animated Flux Slider Template) para presentación, es posible prescindir de ellas y hacer manualmente los templates, usando cualquier biblioteca:

White Label CMS

White Label CMS facilita la personalización de la Pantalla de Administración (ocultar opciones, menús, entre otras cosas). Permite también personalizar la pantalla de login.

Es similar a: WP Admin UI Customize, AG Custom Admin


Theming

/*

Theme Name: My Minimal

Theme URI:

Author: Rulo Kobashikawa

Author URI: http://akcdev.blogspot.com

Description: My Minimal theme

Version: 1.0

License: GNU General Public License v2 or later

License URI: http://www.gnu.org/licenses/gpl-2.0.html

Tags: minimal, simple

Text Domain: minimal

*/

De HTML a PHP

  1. Hacer el template con HTML simple (constará al menos de index.html).
    Colocar placeholders, mockups, o sample content en lugar del contenido dinámico.
  2. Organizar los estilos de modo que style.css quede en el nivel principal (o raíz).
  3. Colocar en style.css un comentario cabecera con la info del tema.
  4. Colocar en index.php el contenido de index.html.
  5. Usar el sistema jerárquico de templates para dividir el HTML en secciones.
  6. Usar el API de WordPress para reemplazar las partes dinámicas.

Útiles

style.css

hoja de estilos

/*

Theme Name: My Minimal

Theme URI:

Author: Rulo Kobashikawa

Author URI: http://akcdev.blogspot.com

Description: My Minimal theme

Version: 1.0

License: GNU General Public License v2 or later

License URI: http://www.gnu.org/licenses/gpl-2.0.html

Tags: minimal, simple

Text Domain: minimal

*/

modelo de info que se pone como comentario al inicio de style.css

/*

Theme name: Twenty Twenty

URI: http://akcdev.blogspot.com

Description: twentyten child theme

Author: Rulo Kobashikawa

Template: twentyten

Version: 1.0

*/

Child theme

index.php

template mínimo

<?php get_header(); ?>

imprime el contenido de header.php

<?php get_sidebar(); ?>

imprime el contenido de sidebar.php

<?php get_footer(); ?>

imprime el contenido de footer.php

functions.php

funciona como biblioteca común, es incluido automáticamente

bloginfo($key)

imprime la info correspondiente a $key

bloginfo('template_url')

imprime la ruta del template

get_bloginfo($key)

devuelve la info correspondiente a $key

define( 'TEMPPATH', get_bloginfo('stylesheet_directory'));

define( 'IMAGES', TEMPPATH. "/images");

se puede colocar en functions.php para definir el directorio de imagenes

<title><?php bloginfo('name'); ?><?php wp_title('&#124;'); ?></title>

bloginfo('name') imprime el nombre del site o blog

wp_title() es el título de la página o post

&#124; es el código de la barra vertical que se usa como separador

<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" />

bloginfo('stylesheet_url') imprime el url de la hoja de estilos style.css

<link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" />

para pingback

<link rel="shortcut icon" type="image/x-icon" href="<?php bloginfo('template_url'); ?>/favicon.ico" />

para favicon

<!--[if lt IE 9]> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <![endif]-->

html5shim

<?php wp_head(); ?>

imprime contenido de cabecera relativo al tema y otros plugins

<?php wp_footer(); ?>

imprime contenido de pie relativo al tema y otros plugins

searchform.php

usado por el widget Search

<div class="searchbar">

        <form name="search" method="get" action="<?php bloginfo('url'); ?>">

                <input type="text" name="s" value="Search..." />

                <input type="submit" name="submit" value="Search!" />

        </form>

</div>

modelo de contenido para searchform.php

bloginfo('url') imprime el url del site

get_search_form()

imprime el contenido de searchform.php

URLs

Si se parte de un template html estático con rutas relativas internas, será necesario colocar al inicio de todas <?php bloginfo('template_url') ?>/ (imprime el url del template) para que sean absolutas y tengan sentido en wordpress.

Child Theme

Es un tema que hereda las definiciones de otro tema, llamado padre.

En la info del tema, el nombre del padre se indica en el campo Template, como en:

/*

Theme name: Twenty Twenty

URI: http://akcdev.blogspot.com

Description: twentyten child theme

Author: Rulo Kobashikawa

Template: twentyten

Version: 1.0

*/

Las definiciones que hubiera en el child theme sobrescriben a las del padre.

Excepto con functions.php, que no es sobrescrito sino extendido.

<?php bloginfo('template_url') ?>/ imprime el url del template padre, para imprimir el url del child theme, puede ser útil definir en functions una constante como:

define('theme_directory', dirname( get_bloginfo('stylesheet_url')) );

Jerarquía de templates

Es posible definir muchos archivos de template para producir diversas partes de la página.

Dado un URL, Wordpress usa un sistema de decantado para determinar qué templates se aplican.

Si ninguna regla es aplicable, el template por default es index.php.

Page Template

Es un php que se usa para generar una página. A cada página se le podría aplicar un template distinto.

La cabecera del template contiene la info con su nombre. Por ejemplo:

intro.php

<?php

/*

Template Name: Intro

*/

?>

<!DOCTYPE HTML>...

Con esto, al editar una página, Intro estará disponible como template.

Front page

Si Settings, Reading, Front Page: Your latest posts, front-page.php es usado como template, si no, home.php es usado como template. Si no, se usa index.php.

Front page estático

Settings, Reading, Front page displays: A static page. Luego, indicar cuál página (creada con Pages) será mostrada como Front page y cuál como Posts page.

home.php es ignorado pero front-page.php es usado como template. Si no, se usa el template de la página.

Logo Link

Es usual tener el logo como link a la página de inicio. Para eso puede funcionar algo como:

<div id="logo">

  <a href="<?php bloginfo('wpurl'); ?>">

    <img src="<?php bloginfo('template_url'); ?>/img/logo.jpg" alt="Site Name">

  </a>

</div>

Soporte de menús

El soporte de menús debe ser declarado explícitamente. En functions.php se puede colocar algo como:

add_action('after_setup_theme', 'mytheme_setup');

function mytheme_setup() {

  register_nav_menus(

    array(

      'primary' => __( 'Principal' )

      )

  );

}

En el template, el menú se puede presentar con un código como:

<?php wp_nav_menu(array(

    'menu' => 'header',

    'container' => false,

)); ?>

Para más información: http://codex.wordpress.org/Function_Reference/wp_nav_menu

jQuery

wp_header() y wp_footer() colocan en el header o en el footer los scripts que se hayan registrado en functions.php

Es posible registrar todos los scripts en functions, o parte de ellos.

El siguiente código en functions.php, permite cargar jQuery desde un CDN o localmente, en el estilo de bolierplate:

functions.php

// Replace default jQuery

if (!is_admin()) add_action("wp_enqueue_scripts", "my_jquery_enqueue");

function my_jquery_enqueue() {

   wp_deregister_script('jquery');

   wp_register_script('jquery', get_template_directory_uri() . "/js/jquery-local.js", array('jquery-cdn'), null);

   wp_enqueue_script('jquery');

   wp_register_script('jquery-cdn', "//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js", false, null);

   wp_enqueue_script('jquery-cdn');

}

jquery-local.js

window.jQuery || document.write('<script src="<?php bloginfo('template_url') ?>/js/vendor/jquery-1.8.3.min.js"><\/script>')

Para más información:

Error 404

Settings, Permalinks, elegir una opción distinta de Default.

Luego, el template 404.php es usado si se produce un error 404 (cuando no se encuentra una página).

Login personalizado

Settings, Theme My Login, y establecer los parámetros de configuración. Requiere instalar previamente el plugin Theme My Login. El plugin crea automáticamente la página Login, cuyo contenido es:

[theme-my-login]

Esa página se puede personalizar.

También se puede copiar plugins/theme-my-login/theme-my-login.css a la carpeta del tema y personalizarla.

También se pueden copiar los templates de plugins/theme-my-login a la carpeta del tema y personalizarlos.

También se pueden activar opciones para mejorar otros aspectos del login, como seguridad, redirección, etc.

Remover ciertos menús del Administrador

Por ejemplo, para quitar el Menú de Contact 7 En functions.php:

add_action('admin_menu', 'mytheme_remove_menus');

function mytheme_remove_menus() {

  global $menu;

  $restrict = array();

  $noadmin = array(__('Contacto'));

  if (!current_user_can('activate_plugins')) {

    $restrict = array_merge($restrict, $noadmin);

  }

  foreach ($menu as $key=>$item) {

    if ( in_array($item[0], $restrict) ) {

      unset($menu[$key]);

    }

  }

}

Tags Condicionales

is_home()

true si la página es el home

home es como se llama a la página de posts recientes

is_front_page()

true si la página es el front page

Snippets

WP_Query

<?php $query = new WP_Query($args); ?>

<?php if ($query): ?>

  <?php while($query->have_posts()) : $query->the_post();?>

    <?php the_title(); ?>

    <?php the_content(); ?>

  <?php endwhile; ?>

  </ul>

<?php endif; ?>

$args es un array, como

array('post_type'=>'mycustomtype', 'orderby'=>'menu_order', 'order'=>'ASC', 'posts_per_page'=>'-1')

El valor por default de posts_per_page es 10.

$query->found_posts devuelve el número de registros

Sobre el ordenamiento, en CCTM, el tab Advanced, elegir el mismo Order By y Order que el que se indique en el WP_Query, para que corresponda el orden que se muestra en el admin.


Plugins

/*

Plugin Name: Hello World

Plugin URI:

Description: A simple plugin for Hello World

Author: Antonio Kobashikawa Carrasco

Version: 1.0

Author URI: http://akcdev.blogspot.com

*/

Útiles

function myplugin_myfunction() {

  ?>

  <div>

  My HTML

  </div>

  <?php

}

Hooks

Un hook da a un plugin la oportunidad de participar cuando un cierto evento ocurre.

hook

descripción

wp_head

add_action('wp_head', 'myplugin_myfunction') incluye en el header la salida de 'myplugin_myfunction'

Shortcodes

Es posible definir shortcodes (que son similares a las etiquetas html, excepto que van entre [] en lugar de entre <>):

function hw_hello($who) {

  return "Hello $who!";

}

/*

Esto permite usar en el contenido de un post algo como

[hw_hello who="World"]

*/

function hw_insert_hello($atts, $content=null) {

  extract(shortcode_atts(array(

    'who' => $atts['who']

  ), $atts));

  return hw_hello($who);

}

add_shortcode('hw_hello', 'hw_insert_hello');

Buenas Prácticas

Checklist

Al desarrollar un plugin, puede ayudar este checklist:

Útiles

__FILE__

ruta del script

dirname(__FILE__)

ruta del directorio del script

plugin_dir_path(__FILE__)

ruta del directorio del script

plugins_url()

url del directorio de plugins

plugins_url('img/icon.png', __FILE__)

url de img/icon.png relativo al directorio del script

includes_url()

url del directorio de includes

content_url()

url del directorio de contenidos

admin_url()

url de administrador

site_url()

url del site

home_url()

url del home
Generalmente es igual a site_url(), pero puede ser diferente en algunas configuraciones.

register_activation_hook(__FILE__, ‘myplugin_activation’)

para que myplugin_activation se ejecute al activar el plugin

register_deactivation_hook(__FILE__, 'myplugin_deactivation')

para que myplugin_deactivation se ejecute al desactivar el plugin

register_uninstall_hook(__FILE__, 'myplugin_uninstall')

para que myplugin_uninstall se ejecute al eliminar el plugin

Es recomendable que esta línea vaya dentro de la función de activación. Por ejemplo myplugin_activation.

Si existe uninstall.php, se usará en lugar del hook.


Recetas


Ideas