Cómo crear un estado personalizado en WordPress

Utilizamos los estados en WordPress para describir la naturaleza de una publicación. WordPress cuenta con varios estados por defecto con los cuales podemos representar la situación de nuestros posts. En este tutorial veremos el significado de los distintos estados que WordPress te ofrece y también veremos cómo crear un estado personalizado. Si lo que quieres es crear un custom post type personalizado, te recomiendo que pulses en este enlace.

Existen muchos plugins para WordPress que te permiten crear estados personalizados. Por ejemplo, el plugin Edit Flow te ayuda a hacer precisamente esto, entre otras muchas opciones. Y claro, esto es lo peor. Este tipo de plugins cuentan con muchas características, para nosotros innecesarias, cuando lo único que queremos hacer es crear estados personalizados. Entonces, ¿qué podemos hacer cuando queremos crear estados personalizados y no queremos instalar este tipo de plugins? Pues crearlos nosotros mismos.

Para ello editaremos el fichero functions.php de nuestro tema. Es un proceso muy sencillo pero, si te da pavor editar ficheros de tu tema o no lo has hecho nunca, te recomendamos que instales el plugin que te hemos comentado antes. En este ejemplo, vamos a crear un estado personalizado al cual llamaremos “En proceso” y que nos servirá para identificar a aquellos posts que están en proceso de redacción y que aún no han sido finalizados. Pero antes de empezar con todo esto, vamos a ver los estados que vienen en WordPress por defecto.

estado personalizado

Estados de WordPress por defecto

Estos son los estados que vienen en WordPress por defecto y su significado.

  • Publicada: El post lo puede ver todo el mundo
  • Programada: El post se publicará en un futuro
  • Borrador: Post que aún no está completo el cual solo pueden ver los usuarios con los privilegios necesarios
  • Pendiente de revisión: Pendiente de que alguien con los permisos necesarios pueda publicar el artículo
  • Privada: No tenemos permisos para verlo
  • Papelera: Artículos eliminados
  • Auto Borrador: Revisiones automáticas creadas por WordPress durante el proceso de edición
  • Heredado: Usado para posts dependientes como los medios.

Estos estados de publicación son más que suficientes para administrar el proceso de edición y poder cambiar de un estado a otro. Si deseas crear tus propios estados con nombres significativos, continúa leyendo.

Crear un nuevo estado personalizado en WordPress

Como he comentado antes, en este artículo y para ilustrar el crear un nuevo estado personalizado, vamos a crear un estado al que llamaremos “En proceso”. El código que puedes ver más abajo, define un poco las opciones básicas para los estados. Invocaremos esta función utilizando al action hook. Como puedes ver, definimos el nombre del estado y controlamos los distintos parámetros para la visibilidad del mismo.

// Crear nuevo estado
function crear_nuevo_estado(){
    register_post_status( 'In Writing', array(
        'label'                     => _x( 'En proceso', 'post' ),
        'public'                    => true,
        'exclude_from_search'       => false,
        'show_in_admin_all_list'    => true,
        'show_in_admin_status_list' => true,
        'label_count'               => _n_noop( 'En proceso <span class="count">(%s)</span>', 'En proceso <span class="count">(%s)</span>' ),
    ) );
}
add_action( 'init', 'crear_nuevo_estado' );

Mostrar el nuevo estado en el desplegable de estados

Ojo, una vez creemos el nuevo estado, este no se mostrará como disponible en el selector de estados de la página de edición de posts. Para ello tendremos que añadir el siguiente script también en el fichero functions.php de nuestro tema.

// Mostrar nuestro nuevo estado en el desplegable del backoffice
function mostrar_estado_desplegable(){
    global $post;
    $complete = '';
    $label = '';
    if($post->post_type == 'post'){
        if($post->post_status == 'en-proceso'){
            $selected = 'selected';
        }
echo '<script>
$(document).ready(function(){
$("select#post_status").append("<option value=\"en-proceso\" '.$selected.'>En proceso</option>");
$(".misc-pub-section label").append("<span id=\"post-status-display\">En proceso</span>");
});
</script>
';
    }
}
add_action('admin_footer', 'mostrar_estado_desplegable');

Y hasta aquí nuestro artículo sobre cómo crear un estado personalizado en WordPress. Espero que te haya gustado y, si te ha resultado útil, no dudes en compartirlo en redes sociales. ¡Nos leemos!

Traffic Light by Musmellow from the Noun Project