Crea una plantilla WordPress desde cero [con archivos descargables]

Crear una plantilla WordPress puede parecer complejo a primera vista, pero si sabes HTML, CSS y un poco de PHP,  tienes la capacidad de crear una plantilla WordPress sin problemas.

Este CMS trabaja con un sistema de plantillas que permite su fácil y rápido desarrollo, además de una inmensa documentación online en la que puedes encontrar soluciones.

En este tutorial te mostraré cómo crear un theme WordPress básico desde cero en el que podrás ver posts, páginas y loops de entradas.

Índice del artículo
  • Conocimientos básicos: Lo que necesitas saber antes de empezar a crear una plantilla para WordPress
  • Herramientas: Lo que necesitas para crear una plantilla en WordPress
  • Cómo crear una plantilla para WordPress desde 0
  • Creando las bases para el tema WordPress
  • Partes de plantillas: header, footer y sidebar
  • Crear plantilla para posts en tema WordPress (single.php)
  • Crear plantilla de páginas (page.php)
  • Crear páginas de archivos y categorías
  • Cómo empaquetar un tema WordPress
  • Conclusión

Conocimientos básicos: Lo que necesitas saber antes de empezar a crear una plantilla para WordPress


Aunque este es un tutorial desde cero, te aconsejo tener unos conocimientos mínimos para poder crear plantillas WordPress.

HTML

El lenguaje de marcado HTML es el que interpretan los navegadores: es el lenguaje base para mostrar tu contenido.

Es relativamente fácil de aprender y te permitirá maquetar tu sitio web.

CSS

En español “hoja de estilo en cascada”. Es el lenguaje que le da estilos y puede mejorar la apariencia de tu web.

Puedes ver documentación y aprender de HTML y CSS en sitios como www.w3schools.com

PHP

Es un lenguaje de programación creado para el desarrollo web que permite crear contenido dinámico.

WordPress fue creado con PHP, pero no necesitas tener un conocimiento muy avanzado para crear un template para WordPress.

Para construir un tema desde cero, no necesitas programar funciones propias ni nada complicado, WordPress tiene  todas las que necesitas. Puedes verlas en su documentación oficial.

Por ejemplo, mostrar un título viene siendo tan simple como escribir “the_title()”.

Las funciones de WordPress siempre son descriptivas y puedes buscar sus parámetros en el codex.

WordPress

Si vas a crear una plantilla para WordPress, lo ideal es que conozcas el CMS de primera mano. Aprende el funcionamiento de las entradas, páginas, categorías, etiquetas y su configuración.

Herramientas: Lo que necesitas para crear una plantilla en WordPress


Estas herramientas ayudarán a hacer las cosas más fáciles y te permitirán crear más rápido:

WordPress

El CMS en el que realizarás el tema. Puedes descargar la última versión desde la web oficial de WordPress en español.

Servidor local

Aunque puedes crear una plantilla desde cero en tu alojamiento web para WordPress actual, lo ideal es que instales un servidor local en tu ordenador y trabajes desde allí.

Esto facilitará la edición de archivos e interacción con el sitio, puedes usar XAMPP en Windows, y MAMP en Mac.

Editor de código

Los editores de código son como los coches: cada quien tiene su favorito. Yo recomiendo Visual Studio Code, por su amplia capacidad de extensión y personalización. Además, es gratis.

Codex

El codex de WordPress es la documentación oficial para desarrolladores (mayormente en inglés), muy útil al momento de entender el funcionamiento de una función de WordPress.

Una de las referencias más importantes que necesitas del codex, es la jerarquía de plantillas:

jerarquia-de-plantillas-wordpress

Esta te muestra claramente las plantillas que necesita un tema de WordPress (algunas opcionales).

Cómo crear una plantilla para WordPress desde 0


Para crear una plantilla en  WordPress tienes que empezar por los archivos base e ir escalando según necesites.

Si quieres seguir este tutorial, necesitarás descargar esta plantilla HTML de bootstrap para usarla como base, junto con la plantilla de posts.

Creando las bases para el tema WordPress


Actualmente solo tienes un HTML plano, que WordPress no reconoce.

Para que WordPress detecte la plantilla, se deben cumplir ciertos requisitos. Es imprescindible que tengas los archivos style.css e index.php.

Sistema de carpetas


Los archivos del tema deben estar en la carpeta de temas de WordPress. Ve a la carpeta raíz donde se encuentra instalado WordPress. En mi caso, como tengo WordPress instalado en local, es C:\xampp\htdocs\wp-content\themes.

Una vez allí, crea una carpeta llamada “raiola” (puedes llamar tu tema como desees, pero en este tutorial el tema será “Raiola Theme”). Esta es la carpeta del tema donde crearás todos los ficheros del mismo.

Dentro de la carpeta, copia el contenido de la plantilla HTML base.

Style.css


WordPress analizará todas las carpetas dentro de “wp-content/themes”. Leerá la información del archivo “style.css” que hay dentro de cada una para saber si se trata de un tema.

Si existe style.css, tomará la carpeta como un tema y buscará los demás archivos del theme de WordPress. Por eso es importante crearlo primero.

En la carpeta “raiola” que has creado para el tema, crea el archivo style.css y escribe el código con la información del tema:
/*
Theme Name: Raiola Theme
Theme URI: https://raiolanetworks.com
Description: Tema demostración para tutorial de cómo hacer un tema WordPress
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/

Aunque WordPress reconocerá el tema con solo el nombre, te recomiendo que especifiques al menos el nombre, URL, descripción y licencia con su URL.

Una vez que guardes los cambios, verás que en el menú “Apariencia > temas” de WordPress  aparece el tema. A simple vista parece  dañado, pero no es así:

Crashed tema WordPress

Es algo normal, aún falta mucho por hacer. Ahora viene toda la parte del sistema de plantillas en php.

Index.php


El archivo index.php es el fichero principal del tema y en él se especificará cómo se mostrará el home con las entradas.

plantilla-html-base-wordpress

Para crearlo, toma el index.html de la plantilla base que te indiqué antes y crea un archivo PHP llamado index.php con el mismo contenido. Guárdalo en la carpeta del tema.

En estos momentos, WordPress lo reconocerá como tema, por lo que puedes  activarlo. Ahora falta darle el dinamismo.

Cuando lo actives se verá mal, pero es completamente normal. Hay que especificarle de nuevo dónde están sus archivos CSS. Esto lo mostraré más adelante en functions.php.

Loop de entradas


El loop es la consulta que hace WordPress a la base de datos en busca de posts. En index.php se hace de la siguiente manera:
  <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<!-- SE MUESTRA EL CONTENIDO DEL POST -->


<!--
AQUI VA EL HTML Y PHP DE LOS POSTS DEL HOME
-->

<?php endwhile; else : ?>
<!-- SI NO SE CONSIGUE NINGÚN POST, SE RETORNA UN MENSAJE: -->
<p>Lo siento, no hemos encontrado ningún post.</p>

<?php endif; ?>
<!-- SE DETIENE EL LOOP -->

Para usar este loop en la plantilla de WordPress que estás creando, ve a la sección “BLOG POST” y copia el HTML que te muestro a continuación dentro del loop:
  <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<!-- SE MUESTRA EL CONTENIDO DEL POST -->

<div class="card mb-4">
<img class="card-img-top" src="http://placehold.it/750x300" alt="Card image cap">
<div class="card-body">
<h2 class="card-title">Post Title</h2>
<p class="card-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Reiciendis aliquid atque, nulla? Quos cum ex quis soluta, a laboriosam. Dicta expedita corporis animi vero voluptate voluptatibus possimus, veniam magni quis!</p>
<a href="#" class="btn btn-primary">Read More &rarr;</a>
</div>
<div class="card-footer text-muted">
Posted on January 1, 2017 by
<a href="#">Start Bootstrap</a>
</div>
</div>

<!--
AQUI VA EL HTML Y PHP DE LOS POSTS DEL HOME
-->

<?php endwhile; else : ?>
<!-- SI NO SE CONSIGUE NINGÚN POST, SE RETORNA UN MENSAJE: -->
<p>Lo siento, no hemos encontrado ningún post.</p>

<?php endif; ?>
<!-- SE DETIENE EL LOOP -->

Hasta aquí no se verá nada específico, porque no se ha modificado el HTML dentro del loop. Para que se vean las entradas tienes que especificar sus propiedades con las funciones de WordPress. En este loop se usarán las siguientes:

  • Título: Recuperas el título de la base de datos con la función  the_title();

  • Descripción corta: Muestras el resumen del artículo con the_excerp();

  • Leer más: Creas un enlace al post con the_permalink();

  • Fecha: Añades la fecha del artículo con the_date(); pero yo te recomiendo usar otra alternativa totalmente válida “echo get_the_date();”

  • Autor: Muestra el autor del post con the_author();

  • Imagen destacada: Recupera la imagen destacada con la función the_post_thumbnail(‘destacada’); donde “destacada” es un tamaño que se definirá en las funciones del tema.


Sustituyendo el texto por su función en PHP, se generan los posts automáticamente:

entradas-desnudas-crear-plantilla-wordpress

El código del loop debe verse así:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<div class="card mb-4">
<?php the_post_thumbnail(); ?>
<div class="card-body">
<h2 class="card-title"><?php the_title(); ?></h2>
<p class="card-text"><?php the_excerpt(); ?></p>
<a href="<?php the_permalink(); ?>" class="btn btn-primary">Leer más &rarr;</a>
</div>
<div class="card-footer text-muted">
<?php echo get_the_date(); ?> - <?php the_author(); ?>

</div>
</div>
<?php endwhile; else : ?>

<p>Lo siento, no hemos encontrado ningún post.</p>


<?php endif; ?>

¡Ya está tomando forma!

Funciones del tema


Como ya te hemos contado en otros artículos, existe un lugar para colocar todo el código de funcionalidades: el archivo functions.php.

Todo el código que construye una funcionalidad específica va en este archivo. Para crear el tema WordPress de este tutorial, usarás:

  • Tamaño de imagen personalizado

  • Soporte de título

  • Menús

  • Soporte de logo

  • Registro de sidebar

  • Registro de estilos

  • Registro de scripts


Crea el archivo functions.php en la carpeta del tema y comienza a escribir el código que necesites para hacer las  funciones deseadas:

Tamaño de imagen


De manera predeterminada, WordPress posee 4 tamaños de imagen: thumbnail, small, medium, large y full (miniatura, pequeña, mediana, grande y tamaño completo). Sin embargo, este tema requiere una imagen  de un tamaño específico:

size imagen personalizada wordpress

Por lo tanto, debes registrar ese tamaño de imagen de esta forma:
//Tamaño de imagen 
add_image_size( 'destacada', 750, 300,true );

Soporte de títulos


Hazle saber a WordPress que tu tema no incluye la meta etiqueta <title> en el código y que puede generarla. Debes hacerlo en functions.php de la siguiente manera:
// Etiqueta de titulo 
add_theme_support( 'title-tag' );

Registrar estilos


WordPress debe conocer los elementos que cargará, entre ellos los estilos, así que deberás poner las hojas de estilo CSS que necesites “en cola”. Para ello utilizarás el hook wp_enqueue_style. Coloca este código en functions.php:
 //Registrar estilos
function raiola_enqueue_styles() {
//Style.css
wp_enqueue_style( 'style', get_stylesheet_uri() );
// Registrar bootstrap
wp_enqueue_style( 'bootstrap', get_template_directory_uri() . '/css/bootstrap.min.css',false,'1.1','all');

}
add_action( 'wp_enqueue_scripts', 'raiola_enqueue_styles');

Si no sabes lo que son los hooks, te recomiendo que leas nuestro tutorial sobre qué son los ganchos en WordPress y para qué sirven.

Registrar scripts

Similar a los estilos, puedes registrar los scripts necesarios en WordPress con wp_enqueue_scripts de esta forma:
// Registrar Scripts
function raiola_enqueue_scripts() {
wp_enqueue_script( 'bootstrap', get_template_directory_uri() . '/js/bootstrap.bundle.min.js', array( 'jquery' ) );
}
add_action( 'wp_enqueue_scripts', 'raiola_enqueue_scripts');

Bien. Como ya registraste los estilos y scripts, recuerda que tienes que borrar las referencias a los archivos estáticos:
<!-- Bootstrap core CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet">

<!-- Custom styles for this template -->
<link href="style.css" rel="stylesheet">

Esta es la manera correcta de cargar los estilos y scripts en WordPress. Es una buena manera de optimizar la web, ya que no cargas el mismo componente varias veces y permites la posibilidad de minificar y concatenar archivos.

WordPress tiene la posibilidad de agrupar los elementos que se repiten en la web. Así evita el código duplicado y optimiza recursos.

elementos-en-plantilla-wordpress

Los elementos constantes en toda la web suelen ser el header, footer y sidebar. WordPress permite crear archivos para cada uno:

header.php


WordPress genera automáticamente los menús y títulos de las páginas, por lo que desde el menú de navegación todo se puede incluir en un archivo PHP.

Ve hasta la carpeta del tema (la misma en la que creaste los ficheros anteriores) y crea el archivo header.php.

Abre el archivo index.php y corta el código HTML desde la etiqueta <!DOCTYPE> hasta el cierre de </NAV> para pegarlo en header.php como te muestro a continuación:
<?php ?> 
<!DOCTYPE html>
<html lang="es">

<head>

<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">

<title>Blog Home - Start Bootstrap Template</title>

<!-- Bootstrap core CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet">

<!-- Custom styles for this template -->
<link href="style.css" rel="stylesheet">

</head>

<body>

<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
<div class="container">
<a class="navbar-brand" href="#">Start Bootstrap</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-item active">
<a class="nav-link" href="#">Home
<span class="sr-only">(current)</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Services</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Contact</a>
</li>
</ul>
</div>
</div>
</nav>

La meta es separar el header, footer y sidebar de los demás archivos.
Para facilitar el manejo de estilos, agrega en la etiqueta <body> la función body_class().

Ahora, en index.php, tienes que llamar al fichero al principio del documento de la siguiente manera:
<?php get_header(); ?>

Ya tienes el index y el header relacionados, pero en archivos separados.

Aún debes hacer algunas modificaciones, porque el header no puede ser HTML plano, debido a que hay metadatos individuales de cada página:
<meta name="description" content="">
<meta name="author" content="">

<title>Blog Home - Start Bootstrap Template</title>

Borra esas líneas, que serán reemplazadas con una función de WordPress específica del header: wp_head().

wp_head()  se encarga de mostrar la mayoría de etiquetas del <head>. Incluso las que borraste anteriormente. Recuerda que debes añadirla dentro de la etiqueta <head>.

También algunos códigos que escribes en functions.php, se muestran en <head> con esta función.

Logo personalizado


Puedes habilitar la opción de logo personalizado con unas pocas líneas de código, coloca esto en functions.php:
add_theme_support( 'custom-logo', array(
//ALTO
'height' => 50,
//ANCHO
'width' => 250,
//PERMITIR FLEXIBILIDAD EN EL TAMAÑO
'flex-height' => true,
'flex-width' => true,
//
'header-text' => array( 'site-title', 'site-description' ),
) );

?>

Ahora el personalizador de WordPress permite la opción de seleccionar un logo desde Apariencia > Personalizar > Identidad del sitio.

crear-tema-wordpress-con-logo-personalizado

Para mostrar el logo tienes que recuperarlo desde el código. Ve a header.php y  localiza y borra la línea que actualmente expresa el nombre del sitio:
<a class="navbar-brand" href="#">Start Bootstrap</a>

En sustitución, usa la función the_custom_logo() para obtener el logo con etiqueta <img> incluida.

A pesar de que con esta función ya puedes mostrar el logo, recomiendo verificar la compatibilidad de la función (introducida desde WordPress 4.5). Si no es compatible, deberás mostrar el título del sitio.

Si es compatible, entonces mostrarás el logo. Si no, puedes enseñar un logo predeterminado de esta forma:
      //Verificar que exista compatibilidad con logos personaliazados
if( function_exists( 'the_custom_logo' ) ) {
//Verificar que esté configurado el logo en el personalizador de WordPress
if(has_custom_logo()) {
//Si está configurado, mostrarki
the_custom_logo();
}
// Sino, mostrar el logo predeterminado.
else {
echo get_template_directory_uri().'/img/raiola.png';
}
}

Menú


Para hacer un menú en WordPress, debes registrarlo en functions.php y luego mostrarlo en header.php de la siguiente manera:
add_action( 'after_setup_theme', 'raiola_registrar_menu' );
function raiola_registrar_menu() {
register_nav_menu( 'menu-principal', 'Menu Principal' );
}

Así, registras un menú que puedes modificar desde Apariencia > Menús en el escritorio de WordPress.

Una vez registrado, puedes mostrarlo en el lugar deseado con la función wp_nav_menu().

Vete a header.php y localiza el código HTML del menú:
<div class="collapse navbar-collapse" id="navbarResponsive">

<ul class="navbar-nav ml-auto">
<li class="nav-item active">
<a class="nav-link" href="#">Home
<span class="sr-only">(current)</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Services</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Contact</a>
</li>
</ul>
</div>

Borra el código HTML y, en su lugar, coloca la función wp_nav_menu(). Configura los argumentos para mostrar el menú que registraste en functions.php y asigna las clases CSS del html de la plantilla:
$menuraiola = array(
'menu' => 'menu-principal',
'container' => 'div',
'container_class' => 'collapse navbar-collapse',
'container_id' => 'navbarResponsive',
'menu_class' => 'navbar-nav ml-auto',
'menu_id' => '',
'echo' => true,
'fallback_cb' => 'wp_page_menu',
'before' => '',
'after' => '',
'link_before' => '',
'link_after' => '',
'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>',
'item_spacing' => 'preserve',
'depth' => 0,
'walker' => '',
'theme_location' => '',
);
wp_nav_menu($menuraiola);
?>

Como la plantilla de bootstrap original requiere una clase de CSS en los <li> del menú, necesitas añadir un filtro de WordPress  para mostrarlo:
add_filter('nav_menu_css_class' , 'raiola_nav_class' , 10 , 2);

function raiola_nav_class($classes, $item){
$classes[] = 'nav-link';
return $classes;
}

Ahora tienes un menú dinámico y personalizable desde WordPress.

Footer.php


El footer se crea como el header, sacando el código de index.php para colocarlo en su archivo independiente footer.php.

En la misma carpeta del tema, crea el fichero footer.php. Luego ve a index.php e identifica el código actual del footer, al final del documento:
  <footer class="py-5 bg-dark">
<div class="container">
<p class="m-0 text-center text-white">Copyright &copy; Your Website 2019</p>
</div>
<!-- /.container -->
</footer>

Este bloque de código lo cortas junto con las etiquetas de cierre </body> y </html>. Lo pegas dentro de footer.php, así:
  <!-- Footer -->
<footer class="py-5 bg-dark">
<div class="container">
<p class="m-0 text-center text-white">Copyright &copy; Your Website 2019</p>
</div>
<!-- /.container -->
</footer>

<!-- Bootstrap core JavaScript -->


</body>

</html>

Para mostrar el footer, ve al final de index.php (donde cortaste el código HTML) y llama al footer.php con get_footer(); así:
<?php get_footer(); ?>

Ya tienes el footer de WordPress listo. Si quieres darle un poco de dinamismo, edita la línea del copyright para mostrar el título del sitio con la función bloginfo() y el año actual con PHP:
<p class="m-0 text-center text-white">Copyright &copy; <?php bloginfo('name'); echo ' '.date('Y'); ?> </p>
<?php wp_footer(); ?>

También, para mejorar la compatibilidad del tema, agrega la función de WordPress wp_footer() (cumple una función similar a wp_head.php ) justo antes de cerrar la etiqueta body.

El archivo footer.php debe verse de esta manera:
.page-numbers {
position: relative;
display: inline-block;
padding: .5rem .75rem;
margin-left: -1px;
line-height: 1.25;
color: #007bff;
background-color: #fff;
border: 1px solid #dee2e6;
}
.raiola-paginacion {
text-align: center;
}

sidebar.php

El sidebar es un elemento dinámico de WordPress que permite mostrar los widgets configurados en Apariencia > Widgets.

Para configurar un sidebar, debes registrarlo en functions.php de esta forma:
//REGISTRAR EL SIDEBAR
add_action( 'widgets_init', 'raiola_registrar_sidebar' );

function raiola_registrar_sidebar() {
register_sidebar( array(
'name' =>'Sidebar',
'id' => 'sidebar-raiola',
'description' => 'Barra lateral del tema Raiola.',
//DIVs del sidebar en documento HTML
'before_widget' => '<div id="%1$s" class="card my-4 %2$s">',
'after_widget' => '</div></div>',
'before_title' => '<h5 class="card-header">',
'after_title' => '</h5>
<div class="card-body">',
) );
}

Con esto, WordPress sabrá que tu tema tiene un sidebar. Ahora tienes que mostrarlo en tu plantilla. En la carpeta del tema, crea el archivo sidebar.phpLuego, en index.php, ubica el código HTML correspondiente al sidebar:
<div class="col-md-4">

<!-- Search Widget -->
<div class="card my-4">
<h5 class="card-header">Search</h5>
<div class="card-body">
<div class="input-group">
<input type="text" class="form-control" placeholder="Search for...">
<span class="input-group-btn">
<button class="btn btn-secondary" type="button">Go!</button>
</span>
</div>
</div>
</div>

<!-- Categories Widget -->
<div class="card my-4">
<h5 class="card-header">Categories</h5>
<div class="card-body">
<div class="row">
<div class="col-lg-6">
<ul class="list-unstyled mb-0">
<li>
<a href="#">Web Design</a>
</li>
<li>
<a href="#">HTML</a>
</li>
<li>
<a href="#">Freebies</a>
</li>
</ul>
</div>
<div class="col-lg-6">
<ul class="list-unstyled mb-0">
<li>
<a href="#">JavaScript</a>
</li>
<li>
<a href="#">CSS</a>
</li>
<li>
<a href="#">Tutorials</a>
</li>
</ul>
</div>
</div>
</div>
</div>

<!-- Side Widget -->
<div class="card my-4">
<h5 class="card-header">Side Widget</h5>
<div class="card-body">
You can put anything you want inside of these side widgets. They are easy to use, and feature the new Bootstrap 4 card containers!
</div>
</div>

</div>

Córtalo y pégalo en sidebar.php. En el lugar donde cortaste el sidebar HTML en index.php, coloca la función get_sidebar() para llamar al sidebar.php:
    <!-- Sidebar Widgets Column -->
<?php get_sidebar(); ?>

Ahora, en sidebar.php, puedes borrar los widgets HTML estáticos y en su lugar llamar a los Widgets de WordPress con la función dynamic_sidebar():
    <div class="col-md-4">

<?php dynamic_sidebar( 'sidebar-raiola' ); ?>

</div>

Ya tienes un sidebar funcional en el que se mostrarán los widgets que configures en Apariencia > Widgets.

Paginación


Cuando tienes más artículos de los que se muestran por página tienes que facilitarle al usuario una forma de llegar a ellos. Para eso existe la paginación de posts.

WordPress incluye su propia función de paginación, paginate_links(), que crea los links de navegación automáticamente.

Para colocar la función a tu tema, ve a index.php y busca el bloque de código HTML de la paginación estática:
        <ul class="pagination justify-content-center mb-4">
<li class="page-item">
<a class="page-link" href="#">&larr; Older</a>
</li>
<li class="page-item disabled">
<a class="page-link" href="#">Newer &rarr;</a>
</li>
</ul>

Reemplaza por la función de WordPress más una etiqueta <NAV> para poder personalizarlo y que se vea como la plantilla HTML:
        <nav class="raiola-paginacion">
<?php echo paginate_links(); ?>
</nav>

Como este código no es exactamente igual al de la plantilla bootstrap, hace falta que apliques un poco de CSS para que se mantenga el estilo. En style.css, añade:
.page-numbers {
position: relative;
display: inline-block;
padding: .5rem .75rem;
margin-left: -1px;
line-height: 1.25;
color: #007bff;
background-color: #fff;
border: 1px solid #dee2e6;
}
.raiola-paginacion {
text-align: center;
}



</style> BLOQUE DE CODIGO 25
<!-- Footer -->
<footer class="py-5 bg-dark">
<div class="container">
<p class="m-0 text-center text-white">Copyright &copy; <?php bloginfo('name'); echo ' '.date('Y'); ?> </p>
</div>
<!-- /.container -->
</footer>
<?php wp_footer(); ?>
<!-- Bootstrap core JavaScript -->


</body>

</html>

Ya tienes la paginación funcionando en el tema.

paginacion-tema-wordpress

Recuerda borrar la paginación estática HTML de la plantilla para no confundir al usuario.

Crear plantilla para posts en tema WordPress (single.php)


A pesar de que ya el tema es reconocido por WordPress y puede ser activado, aún necesitas algunas plantillas para que funcione correctamente. Por ejemplo, en el caso de los posts.

Pero no te preocupes, no tendrás que hacer todos los pasos anteriores de nuevo porque ya los componentes comunes están creados (header, sidebar y footer).

En single.php, usarás las siguientes funciones:

  • the_title(): muestra el título del artículo.

  • the_author(): recupera el nombre del autor.

  • the_category(): crea una lista con las categorías del post.

  • the_date(): muestra la fecha de publicación.

  • the_post_thumbnail(): recupera la imagen destacada del post.

  • the_content(): muestra el cuerpo del post.


Para crear la plantilla de posts, crea un archivo llamado single.php en la carpeta de tu tema.

crear-plantilla-post-tema-wordpress

En este nuevo fichero, coloca el header y footer llamándolos por sus respectivos métodos:
<?php get_header(); ?>

<!-- Contenido del single -->

<?php get_footer(); ?>

Abre el archivo post.HTML de la plantilla de bootstrap que descargaste al principio. Este fichero es el que contiene la maquetación HTML del post. Copia el bloque de código que muestra el artículo, sin header y sin footer:
  <!-- Page Content -->
<div class="container">

<div class="row">

<!-- Post Content Column -->
<div class="col-lg-8">

<!-- Title -->
<h1 class="mt-4">Post Title</h1>

<!-- Author -->
<p class="lead">
by
<a href="#">Start Bootstrap</a>
</p>

<hr>

<!-- Date/Time -->
<p>Posted on January 1, 2019 at 12:00 PM</p>

<hr>

<!-- Preview Image -->
<img class="img-fluid rounded" src="http://placehold.it/900x300" alt="">

<hr>

<!-- Post Content -->
<p class="lead">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ducimus, vero, obcaecati, aut, error quam sapiente nemo saepe quibusdam sit excepturi nam quia corporis eligendi eos magni recusandae laborum minus inventore?</p>

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.</p>

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eos, doloribus, dolorem iusto blanditiis unde eius illum consequuntur neque dicta incidunt ullam ea hic porro optio ratione repellat perspiciatis. Enim, iure!</p>

<blockquote class="blockquote">
<p class="mb-0">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
<footer class="blockquote-footer">Someone famous in
<cite title="Source Title">Source Title</cite>
</footer>
</blockquote>

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Error, nostrum, aliquid, animi, ut quas placeat totam sunt tempora commodi nihil ullam alias modi dicta saepe minima ab quo voluptatem obcaecati?</p>

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Harum, dolor quis. Sunt, ut, explicabo, aliquam tenetur ratione tempore quidem voluptates cupiditate voluptas illo saepe quaerat numquam recusandae? Qui, necessitatibus, est!</p>

<hr>

<!-- Comments Form -->
<div class="card my-4">
<h5 class="card-header">Leave a Comment:</h5>
<div class="card-body">
<form>
<div class="form-group">
<textarea class="form-control" rows="3"></textarea>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>

<!-- Single Comment -->
<div class="media mb-4">
<img class="d-flex mr-3 rounded-circle" src="http://placehold.it/50x50" alt="">
<div class="media-body">
<h5 class="mt-0">Commenter Name</h5>
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
</div>
</div>

<!-- Comment with nested comments -->
<div class="media mb-4">
<img class="d-flex mr-3 rounded-circle" src="http://placehold.it/50x50" alt="">
<div class="media-body">
<h5 class="mt-0">Commenter Name</h5>
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.

<div class="media mt-4">
<img class="d-flex mr-3 rounded-circle" src="http://placehold.it/50x50" alt="">
<div class="media-body">
<h5 class="mt-0">Commenter Name</h5>
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
</div>
</div>

<div class="media mt-4">
<img class="d-flex mr-3 rounded-circle" src="http://placehold.it/50x50" alt="">
<div class="media-body">
<h5 class="mt-0">Commenter Name</h5>
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
</div>
</div>

</div>
</div>

</div>

<!-- Sidebar Widgets Column -->
<div class="col-md-4">

<!-- Search Widget -->
<div class="card my-4">
<h5 class="card-header">Search</h5>
<div class="card-body">
<div class="input-group">
<input type="text" class="form-control" placeholder="Search for...">
<span class="input-group-btn">
<button class="btn btn-secondary" type="button">Go!</button>
</span>
</div>
</div>
</div>

<!-- Categories Widget -->
<div class="card my-4">
<h5 class="card-header">Categories</h5>
<div class="card-body">
<div class="row">
<div class="col-lg-6">
<ul class="list-unstyled mb-0">
<li>
<a href="#">Web Design</a>
</li>
<li>
<a href="#">HTML</a>
</li>
<li>
<a href="#">Freebies</a>
</li>
</ul>
</div>
<div class="col-lg-6">
<ul class="list-unstyled mb-0">
<li>
<a href="#">JavaScript</a>
</li>
<li>
<a href="#">CSS</a>
</li>
<li>
<a href="#">Tutorials</a>
</li>
</ul>
</div>
</div>
</div>
</div>

<!-- Side Widget -->
<div class="card my-4">
<h5 class="card-header">Side Widget</h5>
<div class="card-body">
You can put anything you want inside of these side widgets. They are easy to use, and feature the new Bootstrap 4 card containers!
</div>
</div>

</div>

</div>
<!-- /.row -->

</div>
<!-- /.container -->

Lo pegas en single.php entre el header y el footer. Inmediatamente, elimina el sidebar estático y llama al dinámico con la función get_sidebar():
<?php get_header(); ?>

<!-- Contenido del single -->

<!-- Page Content -->
<div class="container">

<div class="row">

<!-- Post Content Column -->
<div class="col-lg-8">

<!-- Title -->
<h1 class="mt-4">Post Title</h1>

<!-- Author -->
<p class="lead">
by
<a href="#">Start Bootstrap</a>
</p>

<hr>

<!-- Date/Time -->
<p>Posted on January 1, 2019 at 12:00 PM</p>

<hr>

<!-- Preview Image -->
<img class="img-fluid rounded" src="http://placehold.it/900x300" alt="">

<hr>

<!-- Post Content -->
<p class="lead">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ducimus, vero, obcaecati, aut, error quam sapiente nemo saepe quibusdam sit excepturi nam quia corporis eligendi eos magni recusandae laborum minus inventore?</p>

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.</p>

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eos, doloribus, dolorem iusto blanditiis unde eius illum consequuntur neque dicta incidunt ullam ea hic porro optio ratione repellat perspiciatis. Enim, iure!</p>

<blockquote class="blockquote">
<p class="mb-0">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
<footer class="blockquote-footer">Someone famous in
<cite title="Source Title">Source Title</cite>
</footer>
</blockquote>

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Error, nostrum, aliquid, animi, ut quas placeat totam sunt tempora commodi nihil ullam alias modi dicta saepe minima ab quo voluptatem obcaecati?</p>

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Harum, dolor quis. Sunt, ut, explicabo, aliquam tenetur ratione tempore quidem voluptates cupiditate voluptas illo saepe quaerat numquam recusandae? Qui, necessitatibus, est!</p>

<hr>


</div>

<!-- Sidebar Widgets Column -->
<?php get_sidebar(); ?>

</div>
<!-- /.row -->

</div>
<!-- /.container -->


<?php get_footer(); ?>

Borra también el contenido de los comentarios. En este post no cubriré su creación, pero te recomiendo ver los sistemas de comentarios disponibles para WordPress.

Hasta este punto, el contenido de los artículos es estático y, si revisas cualquier post, mostrará la misma información. Ahora tienes que tomar el contenido desde la base de datos.

En single.php, crea el loop de WordPress para recuperar contenido de la base de datos desde el título hasta antes del sidebar.

El loop es el mismo que has usado en index.php:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<!-- CONTENIDO DEL POST-->
<?php endwhile; else : ?>

<!-- SI NO SE ENCUENTRA NADA-->

<p>Lo siento, no hemos encontrado ningún post.</p>

<?php endif; ?>
<!-- FIN DEL LOOP-->

Teniendo el loop y el código HTML de los posts, sólo falta sustituir el contenido estático con las funciones que te he nombrado más arriba.

El contenido estático después de <!-- Post Content --> lo eliminas, ya que en su lugar tendrás que colocar the_content(). Single.php debe quedar así:
<?php get_header(); ?>
<!-- Page Content -->
<div class="container">
<div class="row">
<!-- Post Content Column -->
<div class="col-lg-8">
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<!-- Title -->
<h1 class="mt-4"><?php the_title(); ?></h1>
<!-- Author -->
<p class="lead">
Por
<?php the_author(); ?>
</p>
<hr>
<!-- Date/Time -->
<p>Publicado <?php the_date();?> </p>
<hr>
<!-- Preview Image -->
<?php the_post_thumbnail('destacada',array( 'class' => 'img-fluid rounded' )); ?>
<hr>
<!-- Post Content -->
<?php the_content(); ?>
<hr>
<?php endwhile; else : ?>
<p>Lo siento, no hemos encontrado ningún post.</p>
<?php endif; ?>
</div>
<!-- Sidebar Widgets Column -->
<?php get_sidebar(); ?>
</div>
<!-- /.row -->
</div>
<!-- /.container -->
<?php get_footer(); ?>

Ahora puedes ver los posts sin problemas.

Crear plantilla de páginas (page.php)


Single.php funciona solo para posts y entradas personalizadas. Por suerte, crear una plantilla para páginas es muy fácil.

Las diferencias entre posts y páginas son mínimas, por lo que el código de single.php se puede tomar como base.

Abre single.php y copia todo el contenido. Crea el archivo page.php en la carpeta del tema y pega la copia del single.php.

Elimina la línea de código que muestra las categorías del post (las páginas no tienen categoría) y guarda los cambios. El fichero page.php debe quedar así:
<?php get_header(); ?>
<!-- Page Content -->
<div class="container">
<div class="row">
<!-- Post Content Column -->
<div class="col-lg-8">
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<!-- Title -->
<h1 class="mt-4"><?php the_title(); ?></h1>
<!-- Author -->
<p class="lead">
Por
<?php the_author(); ?>
</p>
<hr>
<!-- Date/Time -->
<p>Publicado <?php the_date();?> </p>
<hr>
<!-- Preview Image -->
<?php the_post_thumbnail('destacada',array( 'class' => 'img-fluid rounded' )); ?>
<hr>
<!-- Post Content -->
<?php the_content(); ?>
<hr>
<?php endwhile; else : ?>
<p>Lo siento, no hemos encontrado ningún post.</p>
<?php endif; ?>
</div>
<!-- Sidebar Widgets Column -->
<?php get_sidebar(); ?>
</div>
<!-- /.row -->
</div>
<!-- /.container -->
<?php get_footer(); ?>

Ya puedes visualizar correctamente las páginas.

Crear páginas de archivos y categorías


Los archivos por fecha y categorías son necesarios para ver los artículos cronológica y organizadamente. Sin ellos, se tendría que navegar por todas las páginas de la navegación.

Existen plantillas específicas para categorías, fechas y etiquetas, pero la plantilla general es archive.php. Una vez tengas el fichero general, tienes una base para crear los demás.

Crea el archivo archive.php en la carpeta del tema y copia todo el contenido de index.php. A continuación, localiza el bloque de código del título de la página:
<h1 class="my-4">Page Heading
<small>Secondary Text</small>
</h1>

Este bloque de código, en index.php, lo borras, porque en el index no se muestran títulos de esta forma.

En archive.php le colocarás el título en PHP con un condicional dependiendo de si es un archivo por fecha o un archivo de taxonomía (categorías, etiquetas, etc.):
        <!-- TITULO H1 DE PÁGINA -->
<h1 class="my-4"> <?php
//Verificar que el archivo sea de fecha
if(get_the_archive_title()){
//Si es un archivo de fecha, mostrar el titulo de fecha
the_archive_title();
}
//Si NO es una fecha
else{
//Mostrar el título del término
single_term_title();
} ?>
</h1>
<p><?php //Mostrar descripción del objeto
echo term_description(); ?></p>

Así verificas que si es un archivo por fecha se muestre the_archive_title(); y si es una categoría o etiqueta se muestre el single_term_title();  y su descripción con term_description();

Cómo empaquetar un tema WordPress


Otra ventaja de WordPress es que al ser PHP, HTML, CSS y JavaScript no necesitas compilar para tener un paquete instalableBasta con colocar la carpeta del tema con los archivos dentro de un archivo comprimido .ZIP y subirlo a WordPress.

Antes de proceder con el empaquetado, recuerda borrar archivos innecesarios. Si algo no es de utilidad, no lo incluyas.
Si te interesa hacer tu blog más rápido, te recomiendo esta excelente guía de optimización WordPress.

Conclusión


Crear un tema para WordPress (y cualquier otro CMS) en términos simples es convertir una página en HTML a un sistema de plantillas.

Con este tutorial tienes un primer tema básico que puedes seguir mejorando con diferentes funcionalidades: desde mejorar la apariencia con el personalizador hasta crear un panel de opciones o custom post types.

También puedes personalizar otras plantillas HTML siguiendo los pasos mencionados aquí.

Si tienes alguna duda sobre el proceso de creación, no dudes en dejar un comentario con el problema. Seguro que se podrá solucionar.

Índice del artículo
  • Conocimientos básicos: Lo que necesitas saber antes de empezar a crear una plantilla para WordPress
  • Herramientas: Lo que necesitas para crear una plantilla en WordPress
  • Cómo crear una plantilla para WordPress desde 0
  • Creando las bases para el tema WordPress
  • Partes de plantillas: header, footer y sidebar
  • Crear plantilla para posts en tema WordPress (single.php)
  • Crear plantilla de páginas (page.php)
  • Crear páginas de archivos y categorías
  • Cómo empaquetar un tema WordPress
  • Conclusión
Jose Miguel Urdaneta
Jose Miguel Urdaneta

Jose Miguel Urdaneta, crea contenido para WordPress y además desarrolla temas y plugins para este CMS. Le gusta viajar.

Artículos relacionados

Si te ha gustado este post, aquí tienes otros que pueden ser de tu interés. ¡No dejes de aprender!

Tenemos 38 comentarios en Crea una plantilla WordPress desde cero [con archivos descargables]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Avatar del autor del comentario

Edwin Quiroga

10/05/2019 a las 16:02

Realmente es el más completo tutorial sobre creación de wordpress themes que he visto en español. Voy a poner manos a la obra. Me gustaría sugerir FreeCodeCamp para aprender HTML5 y CSS3 gratuitamente y con certificados. Aunque el sitio está en inglés. Me gustaría preguntar si conoces algún sitio donde aprender PHP básico? Gracias y a medida que vaya creando mis themes vendré aquí a consultar. Saludos a la comunidad Raiola. Edwin

Responder
Avatar del autor del comentario

Jose Miguel Urdaneta

13/05/2019 a las 10:52

Hola Edwin, muchas gracias, ¡me alegra que te haya servido!

FreeCodeCamp es buena opción, yo aprendí un poco allí y también te recomiendo Codecademy.com para PHP.

Éxitos con tus temas, cualquier otra consulta te invito a dejarla en los comentarios :)

¡Un Saludo!

Responder
Avatar del autor del comentario

Edwin Quiroga

31/05/2019 a las 16:27

¡Hola José Miguel! Espero que te esté yendo fenomenal en tu viaje.

Voy siguiendo las indicaciones del artículo. He llegado hasta la parte de crear estilos y scripts usando los "hooks" que comentas en el archivo functions.php.

Me he detenido porque tengo una duda ¿es normal que se siga viendo el theme sin cambio? Te incluyo imagen de cómo me ha quedado.

Eso viene luego ¿cierto? Al precisar header y footer?

Bueno, eso por ahora.

Un cordial saludo a ti y a la comunidad Raiola.

https://uploads.disquscdn.c...

Responder
Avatar del autor del comentario

Jose Miguel Urdaneta

17/06/2019 a las 12:30

¡Hola Edwin! Al registrar los estilos deben aparecer en el header del sitio, asegúrate de que en header.php has colocado dentro de las etiquetas HTML .

Por lo que sí, debes especificar el header (o si tienes el header dentro del index.php, especificar la función wp_head(); ).

Perdona la demora en responder. Espero haberte ayudado. ¡Saludos!

Responder
Avatar del autor del comentario

Edwin Quiroga

31/05/2019 a las 16:38

¡Otra cosa!

Sabes que creamos un index.php tomando como base el index.html. Luego añadimos código php a la sección del blog.

Pregunta: ¿Debo poner al inicio de este archivo index.php el comando < ? php ?

Fonctions.php se me mostraba en el editor Visual Studio en blanco como "código muerto" hasta que lo coloqué al principio.

Responder
Avatar del autor del comentario

Jose Miguel Urdaneta

17/06/2019 a las 12:40

No es obligatorio, pero es recomendable que lo coloques al principio e inmediatamente llames al header, de esta forma:

Lo que sí es obligatorio es envolver las instrucciones PHP dentro de las etiquetas PHP, así:

¡Muchos éxitos con el tema Edwin!

Responder
Avatar del autor del comentario

Edwin Quiroga

18/06/2019 a las 19:53

Hola! No han salido los ejemplos que me das. Te ha pasado como a mí. Al poner la etiqueta < ? php en este mensaje me dejaba en blanco todo lo que venía después. Por eso he tenido que agregar espacios dentro de la etiqueta.

Por cierto, he visto en un post soobre este tema que hablan de archivos front-page.php y home.php, que aquí no se mencionan. Ese artículo es de 2015. Será que hubo una actualización y se quedaron obsoletos y sustituidos por index.php? Gracias y saludos.

Responder
Avatar del autor del comentario

Jose Miguel Urdaneta

24/06/2019 a las 13:45

Si, ya veo que el sistema elimina el código PHP incluso dentro de las etiquetas code, espero te haya servido el comentario de todas formas :)

Respondiendo tu nueva pregunta (muy buena por cierto):

No son obsoletos, esos archivos se pueden crear para personalizar aún más, si aprecias la imagen de la jerarquía de plantillas, podrás observarlas .

Sirven en caso de que quieras personalizar la página de entradas (home.php) o si configuras una página individual como página de inicio (front-page.php).

No se suelen utilizar estas dos plantillas normalmente por las siguientes razones:

•Se puede lograr grandes personalizaciones en páginas (page.php) directamente, con constructores visuales por ejemplo.

•Se puede suplantar la funcionalidad de home.php en index.php sin afectar la funcionalidad de WordPress.

Index.php es realmente un 'fallback', el fichero que se carga cuando WordPress no encuentra la plantilla adecuada.

En este tutorial no los nombré para mantenerlo sencillo :)

Resumen:
•Front-page.php se usa para la página que se configure como página principal en Ajustes > Lectura.
•Home.php es la plantilla del feed de entradas.
•Index.php es el fichero que cargará si no existe la plantilla solicitada (ejemplo, si no existe single.php se usará index.php)

Responder
Avatar del autor del comentario

Victor Manuel Hernandez

24/01/2020 a las 23:36

Hola,

Estaba siguiendo los pasos para la creación del tema pero curiosamente no puedo cargar los insumos.

Probé de varias maneras pero no logro llegar al archivo.

tienes alguna idea de que puedo hacer.

saludos.

Responder
Avatar del autor del comentario

Jose Miguel Urdaneta

21/04/2020 a las 14:33
Hola Víctor! ¿A qué te refieres con los insumos?
Responder
Avatar del autor del comentario

Diego

05/02/2020 a las 00:02

¡Hola!, ¿qué tal?
Creé una plantilla muy chula de WorPress y me encuentro con que al instalarle Woocommerce funciona todo menos el carrito que no se actualiza (no te deja quitar items ni subir numeración) pero lo demás todo y me toca las narices no poder usar mi plantilla por ese detallito hehehehe, ¿se le ocurre a alguien dónde puede estar ese fallo o desisto y uso una plantilla genérica de WP?
Saludos y gracias!

Responder
Avatar del autor del comentario

Jose Miguel Urdaneta

21/04/2020 a las 14:38
¡Hola Diego! Espero estés bien.

Asegúrate de cargar wp_footer() y wp_header() en footer.php y header.php, sí el problema persiste revisa la consola de Javascript para ver si te reporta algún error.

Usar tu propio tema a medida ofrece mucho aprendizaje. No te desanimes. ¡Saludos!
Responder
Avatar del autor del comentario

Jorge Garcia

04/04/2020 a las 11:34
Hola,
Primero muchas gracias por este tutorial, hacía mucho tiempo que iba buscando algo así. Quería preguntar una duda sobre el menú.

1) He conseguido activar el menu en WP y crear uno.
2) He conseguido que se muestre en mi template.
3) CSS y estilos: no consigo cargar los estilos del template en el menu. Se muestra en el Nav Bar pero sin el estilo del template. He copiado y pegado tu código en functions.php ($menuraiola) y el filtro para las para asegurarme que no me he dejado nada y sigue igual, los links del menú aparecen uno debajo de otro y en el azul plano sin estilo.

¿Qué puedo estar haciendo mal?

Muchas gracias una vez más.
Responder
Avatar del autor del comentario

Jose Miguel Urdaneta

20/06/2020 a las 19:59
¡Hola Jorge!
Asegurate de que llas clases del menu concuerden con las clases de los estilos.
Responder
Avatar del autor del comentario

Juan Pablo

16/05/2020 a las 21:38
Hola

Estoy generando un tema wordpress desde cero.

¿Es posible instalar el tema raiola en wordpress? Creo que al instalarlo me seria mas fácil modificar los diferentes ficheros de acuerdo con mis necesidades en lugar de ir generándolos uno a uno.

Un saludo
Responder
Avatar del autor del comentario

Jose Miguel Urdaneta

20/06/2020 a las 20:08
¡Hola Juan Pablo!

Por supuesto puedes instalarlo y editar como gustes, es un tema para experimentar.

¡Saludos!
Responder
Avatar del autor del comentario

Johann Dabdoub

25/05/2020 a las 07:00
Hola, qué tal! Tengo duda con el tema del logo. Me gustaría saber de qué manera puedo añadir el logo de forma predefinida sin poder ser alterado en la configuración de apariencia.
En mi header lo tenía incluido en una etiqueta de , pero no la reconoce.

Con qué código y en qué archivo puedo añadirla de forma predefinida
Responder
Avatar del autor del comentario

Jose Miguel Urdaneta

20/06/2020 a las 20:41
Hola Johann,
Puedes dejarlo fijo como código HTML en header.php, de esa forma no sería editable en el personalizador.

¡Saludos!
Responder
Avatar del autor del comentario

osquel

28/09/2020 a las 20:13
Muchas gracias me fui muy util, pero tuve que añadir esta class-wp-bootstrap-navwalker.php para que mis estilos de bootstrap se vieran y funciono de maravilla.
Mi pregunta el plugin Advance Custom Fields no me muestra el contenido sera por eso mismo, hay que añadir algun snippets a mi funcion.php en este sentido.

Este es el codigo que estoy poniendo y lo muestro con var_dump y todo y no me sale nada.


<img class="img-fluid" src="" alt="">
Responder
Avatar del autor del comentario

Alvaro Fontela

23/01/2021 a las 22:12
Hola Osquel, efectivamente, para que se muestren los campos de ACF debes "enlazarlos" desde el front-end mediante PHP.
Responder
Avatar del autor del comentario

Eduardo Hernandez

20/10/2020 a las 01:36
Hola, excelente tutorial, como podria hacer que no sea blog sino que sea una pagina, con secciones como nosotros, servicios y cosas asi, muchas gracias
Responder
Avatar del autor del comentario

Alvaro Fontela

23/01/2021 a las 21:50
Hola Eduardo, lo siento pero tu pregunta es muy abstracta, en Internet hay mucha documentación paso a paso sobre lo que preguntas.
Responder
Avatar del autor del comentario

betoCFH

11/11/2020 a las 12:57
Buen dia, estoy dando mis primeros pasos con Wordpress y al desconocer sobre el catalogo de plantillas no estoy encontrando alguna que se adapta a mis necesidades, asi que he decidido crear una a la medida. En mi caso necesito hacer una web institucional, toda info estatica, no leera ninguna base de datos ni nada raro, en este caso por logica...¿Deberia ser mucho mas facil la creacion de mi plantilla verdad, salteandome casi todo los que a PHP refiere?
Responder
Avatar del autor del comentario

Alvaro Fontela

23/01/2021 a las 21:51
Hola Beto, entonces no te compensa hacer la con WordPress, sino con HTML y CSS estatico o con NodeJS y un framework como NextJS.
Responder
Avatar del autor del comentario

Aisa

11/12/2020 a las 15:51
Hola, una consulta, hay que agregar alguna función para el envío de emails?
Responder
Avatar del autor del comentario

Alvaro Fontela

23/01/2021 a las 21:51
Pues depende que emails quieras enviar desde WordPress.
Responder
Avatar del autor del comentario

Germán "Moody" Ruz

26/12/2020 a las 01:38
Tengo dudas sobre esta parte del código:

//Registrar estilos
function raiola_enqueue_styles() {
//Style.css
wp_enqueue_style( 'style', get_stylesheet_uri() );
// Registrar bootstrap
wp_enqueue_style( 'bootstrap', get_template_directory_uri() . 'https://serv4.raiolanetworks.es/css/bootstrap.min.css',false,'1.1','all');

}
add_action( 'wp_enqueue_scripts', 'raiola_enqueue_styles');


Veo que hace referencia a raiola. Yo trabajo en un servidor locar y el nombre del tema es Vréthikan Dark Glass Theme

como puedo manejar esto?
Responder
Avatar del autor del comentario

Alvaro Fontela

23/01/2021 a las 21:52
Hola German, es simplemente el nombre de la función, tu puedes declarar el nombre que quieras.
Responder
Avatar del autor del comentario

Germán "Moody" Ruz

26/12/2020 a las 01:41
Tengo tambien la misma duda que Eduardo Hernández

"Hola, excelente tutorial, como podria hacer que no sea blog sino que sea una pagina, con secciones como nosotros, servicios y cosas asi, muchas gracias"

Gracias de antemano por sus respuestas
Responder
Avatar del autor del comentario

Alvaro Fontela

23/01/2021 a las 21:52
Hola German, te contesto como a Eduardo:

Tu pregunta es muy abstracta, en Internet hay mucha documentación paso a paso sobre lo que preguntas.
Responder
Avatar del autor del comentario

Franco

28/01/2021 a las 20:37
Hola! Buenas tardes desde Chile. Estoy aprendiendo a crear plantillas desde cero usando XAMPP para tal fin. Todo bien hasta el paso de crear el index.php (uso Atom para crear los archivos principales), al actualizar la parte de Temas, donde aparece Raiola (junto a los que trae el sistema por defecto), al momento de activarlo me sale una pantalla de error crítico de la web, lo que me impide deshacer los cambios y volver a hacer todo desde cero (borrar base de datos, wordpress, etc) ....

El error arroja: array_merge() does not accept unknown named parameters (...)

A qué podría deberse esto?

Muchas gracias de antemano por su respuesta!
Responder
Avatar del autor del comentario

Alvaro Fontela

28/01/2021 a las 21:15
Hola Franco, lo siento pero no podemos decirte mucho, ya que no ofrecemos ningún tipo de soporte para servidores locales debido a sus variaciones de entorno.
Responder
Avatar del autor del comentario

Julio Alberto

28/02/2021 a las 07:31
Hola

Agradezco mucho el aporte que haces, he realizado los pasos pero el único detalle que tengo es que no logra cargar los estilos de Bootstrap verificando el código fuente no se muestra ninguna etiqueta de CSS.
Responder
Avatar del autor del comentario

juan pablo

12/01/2022 a las 07:49
hola, muchas gracias por el contenido compartido, no se si pueden ayudarme en un problema que tengo en estos momentos y esto es asi:

me cree una landpage en wordpress a purdo codigo mio y funciona solo que los post no los muestro en la pagina principal. ahora cuando hice un archivo aparte para poder mostrar los post, estos no me funcionan no me muestra las categorias con sus post y no se como resolverlo

atentemente

Juan Pablo
Responder
Avatar del autor del comentario

Alvaro Fontela

17/01/2022 a las 13:52
Hola Juan Pablo, pues...sin conocer más datos del entorno no podemos ayudarte. Si necesitas ayuda profesional, puedes contactar con nuestro departamento comercial a través de este formulario de contacto: https://raiolanetworks.com/contacto/
Responder
Avatar del autor del comentario

Arnaldo G. Lorenzo

13/04/2023 a las 05:12
Es la información más completa que he visto sobre esto, y además muy bien explicado y documentado todos los elementos que componen un Theme de Wordpress. Excelente tutorial, lo felicito. Gracias por su trabajo
Responder
Avatar del autor del comentario

Alvaro Fontela

25/04/2023 a las 19:08
Muchas gracias por tu comentario Arnaldo!!!
Responder
Avatar del autor del comentario

Clau

29/11/2023 a las 22:24
Hola, gracias por el tutorial, está muy bueno. Consulta: ¿cómo integro los comentarios en un blog? y ¿qué plugin podría usar para modificarlo? Gracias
Responder

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *