Estas en: Home > content

Entradas etiquetadas con content

Cron Job WordPress

WordPress 3.x para desarrolladores: Temas y plantillas, showcase.php y content-intro.php

0

Estas dos plantillas permiten crear un nuevo formato de página reestructurando los sidebars y los posts.

 

SHOWCASE.PHP

Creamos el archivo showcase.php y añadimos el siguiente código:

  1. <?php
  2. /**
  3.  * Template Name: Showcase Template
  4.  * Description: A Page Template that showcases Sticky Posts, Asides, and Blog Posts
  5.  *
  6.  * The showcase template in New Theme consists of a featured posts section using sticky posts,
  7.  * another recent posts area (with the latest post shown in full and the rest as a list)
  8.  * and a left sidebar holding aside posts.
  9.  *
  10.  * We are creating two queries to fetch the proper posts and a custom widget for the sidebar.
  11.  *
  12.  * @package WordPress
  13.  * @subpackage New_Theme
  14.  */
  15.  
  16. // Enqueue showcase script for the slider
  17. wp_enqueue_script( 'newtheme-showcase', get_template_directory_uri() . '/js/showcase.js', array( 'jquery' ), '2011-04-28' );
  18.  
  19. get_header(); ?>
  20.  
  21. <div id="primary" class="showcase">
  22. <div id="content" role="main">
  23.  
  24. <?php while ( have_posts() ) : the_post(); ?>
  25.  
  26. <?php
  27. /**
  28. * We are using a heading by rendering the_content
  29. * If we have content for this page, let's display it.
  30. */
  31. if ( '' != get_the_content() )
  32. get_template_part( 'content', 'intro' );
  33. ?>
  34.  
  35. <?php endwhile; ?>
  36.  
  37. <?php
  38. /**
  39. * Begin the featured posts section.
  40. *
  41. * See if we have any sticky posts and use them to create our featured posts.
  42. * We limit the featured posts at ten.
  43. */
  44. $sticky = get_option( 'sticky_posts' );
  45.  
  46. // Proceed only if sticky posts exist.
  47. if ( ! empty( $sticky ) ) :
  48.  
  49. $featured_args = array(
  50. 'post__in' => $sticky,
  51. 'post_status' => 'publish',
  52. 'posts_per_page' => 10,
  53. 'no_found_rows' => true,
  54. );
  55.  
  56. // The Featured Posts query.
  57. $featured = new WP_Query( $featured_args );
  58.  
  59. // Proceed only if published posts exist
  60. if ( $featured->have_posts() ) :
  61.  
  62. /**
  63. * We will need to count featured posts starting from zero
  64. * to create the slider navigation.
  65. */
  66. $counter_slider = 0;
  67.  
  68. // Compatibility with versions of WordPress prior to 3.4.
  69. if ( function_exists( 'get_custom_header' ) )
  70. $header_image_width = get_theme_support( 'custom-header', 'width' );
  71. else
  72. $header_image_width = HEADER_IMAGE_WIDTH;
  73. ?>
  74.  
  75. <div class="featured-posts">
  76. <h1 class="showcase-heading"><?php _e( 'Featured Post', 'newtheme' ); ?></h1>
  77.  
  78. <?php
  79. // Let's roll.
  80. while ( $featured->have_posts() ) : $featured->the_post();
  81.  
  82. // Increase the counter.
  83. $counter_slider++;
  84.  
  85. /**
  86. * We're going to add a class to our featured post for featured images
  87. * by default it'll have the feature-text class.
  88. */
  89. $feature_class = 'feature-text';
  90.  
  91. if ( has_post_thumbnail() ) {
  92. // ... but if it has a featured image let's add some class
  93. $feature_class = 'feature-image small';
  94.  
  95. // Hang on. Let's check this here image out.
  96. $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), array( $header_image_width, $header_image_width ) );
  97.  
  98. // Is it bigger than or equal to our header?
  99. if ( $image[1] >= $header_image_width ) {
  100. // If bigger, let's add a BIGGER class. It's EXTRA classy now.
  101. $feature_class = 'feature-image large';
  102. }
  103. }
  104. ?>
  105.  
  106. <section class="featured-post <?php echo $feature_class; ?>" id="featured-post-<?php echo $counter_slider; ?>">
  107.  
  108. <?php
  109. /**
  110. * If the thumbnail is as big as the header image
  111. * make it a large featured post, otherwise render it small
  112. */
  113. if ( has_post_thumbnail() ) {
  114. if ( $image[1] >= $header_image_width )
  115. $thumbnail_size = 'large-feature';
  116. else
  117. $thumbnail_size = 'small-feature';
  118. ?>
  119. <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_post_thumbnail( $thumbnail_size ); ?></a>
  120. <?php
  121. }
  122. ?>
  123. <?php get_template_part( 'content', 'featured' ); ?>
  124. </section>
  125. <?php endwhile; ?>
  126.  
  127. <?php
  128. // Show slider only if we have more than one featured post.
  129. if ( $featured->post_count > 1 ) :
  130. ?>
  131. <nav class="feature-slider">
  132. <ul>
  133. <?php
  134.  
  135. // Reset the counter so that we end up with matching elements
  136. $counter_slider = 0;
  137.  
  138. // Begin from zero
  139. rewind_posts();
  140.  
  141. // Let's roll again.
  142. while ( $featured->have_posts() ) : $featured->the_post();
  143. $counter_slider++;
  144. if ( 1 == $counter_slider )
  145. $class = 'class="active"';
  146. else
  147. $class = '';
  148. ?>
  149. <li><a href="#featured-post-<?php echo $counter_slider; ?>" title="<?php printf( esc_attr__( 'Featuring: %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ); ?>" <?php echo $class; ?>></a></li>
  150. <?php endwhile; ?>
  151. </ul>
  152. </nav>
  153. <?php endif; // End check for more than one sticky post. ?>
  154. </div><!-- .featured-posts -->
  155. <?php endif; // End check for published posts. ?>
  156. <?php endif; // End check for sticky posts. ?>
  157.  
  158. <section class="recent-posts">
  159. <h1 class="showcase-heading"><?php _e( 'Recent Posts', 'newtheme' ); ?></h1>
  160.  
  161. <?php
  162.  
  163. // Display our recent posts, showing full content for the very latest, ignoring Aside posts.
  164. $recent_args = array(
  165. 'order' => 'DESC',
  166. 'post__not_in' => get_option( 'sticky_posts' ),
  167. 'tax_query' => array(
  168. 'taxonomy' => 'post_format',
  169. 'terms' => array( 'post-format-aside', 'post-format-link', 'post-format-quote', 'post-format-status' ),
  170. 'field' => 'slug',
  171. 'operator' => 'NOT IN',
  172. ),
  173. ),
  174. 'no_found_rows' => true,
  175. );
  176.  
  177. // Our new query for the Recent Posts section.
  178. $recent = new WP_Query( $recent_args );
  179.  
  180. // The first Recent post is displayed normally
  181. if ( $recent->have_posts() ) : $recent->the_post();
  182.  
  183. // Set $more to 0 in order to only get the first part of the post.
  184. global $more;
  185. $more = 0;
  186.  
  187. get_template_part( 'content', get_post_format() );
  188.  
  189. echo '<ol class="other-recent-posts">';
  190.  
  191. endif;
  192.  
  193. // For all other recent posts, just display the title and comment status.
  194. while ( $recent->have_posts() ) : $recent->the_post(); ?>
  195.  
  196. <li class="entry-title">
  197. <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a>
  198. <span class="comments-link">
  199. <?php comments_popup_link( '<span class="leave-reply">' . __( 'Leave a reply', 'newtheme' ) . '</span>', __( '<b>1</b> Reply', 'newtheme' ), __( '<b>%</b> Replies', 'newtheme' ) ); ?>
  200. </span>
  201. </li>
  202.  
  203. <?php
  204. endwhile;
  205.  
  206. // If we had some posts, close the <ol>
  207. if ( $recent->post_count > 0 )
  208. echo '</ol>';
  209. ?>
  210. </section><!-- .recent-posts -->
  211.  
  212. <div class="widget-area" role="complementary">
  213. <?php if ( ! dynamic_sidebar( 'sidebar-2' ) ) : ?>
  214.  
  215. <?php
  216. the_widget( 'New_Theme_Ephemera_Widget', '', array( 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>' ) );
  217. ?>
  218.  
  219. <?php endif; // end sidebar widget area ?>
  220. </div><!-- .widget-area -->
  221.  
  222. </div><!-- #content -->
  223. </div><!-- #primary -->
  224.  
  225. <?php get_footer(); ?>

Lo primero que hace el código es indicar a WordPress que cargue el archivo showcase.js, que nosotros deberemos copiar a nuestra carpeta en la ruta correcta.

  1. <?php while ( have_posts() ) : the_post(); ?>
  2.  
  3. <?php
  4. /**
  5. * We are using a heading by rendering the_content
  6. * If we have content for this page, let's display it.
  7. */
  8. if ( '' != get_the_content() )
  9. get_template_part( 'content', 'intro' );
  10. ?>
  11.  
  12. <?php endwhile; ?>

A continuación se carga el contenido de la página, normalmente una descripción, o una galería de imágenes.

  1. <?php
  2. /**
  3. * Begin the featured posts section.
  4. *
  5. * See if we have any sticky posts and use them to create our featured posts.
  6. * We limit the featured posts at ten.
  7. */
  8. $sticky = get_option( 'sticky_posts' );
  9.  
  10. // Proceed only if sticky posts exist.
  11. if ( ! empty( $sticky ) ) :
  12.  
  13. $featured_args = array(
  14. 'post__in' => $sticky,
  15. 'post_status' => 'publish',
  16. 'posts_per_page' => 10,
  17. 'no_found_rows' => true,
  18. );
  19.  
  20. // The Featured Posts query.
  21. $featured = new WP_Query( $featured_args );
  22.  
  23. // Proceed only if published posts exist
  24. if ( $featured->have_posts() ) :
  25.  
  26. /**
  27. * We will need to count featured posts starting from zero
  28. * to create the slider navigation.
  29. */
  30. $counter_slider = 0;
  31.  
  32. // Compatibility with versions of WordPress prior to 3.4.
  33. if ( function_exists( 'get_custom_header' ) )
  34. $header_image_width = get_theme_support( 'custom-header', 'width' );
  35. else
  36. $header_image_width = HEADER_IMAGE_WIDTH;
  37. ?>
  38.  
  39. <div class="featured-posts">
  40. <h1 class="showcase-heading"><?php _e( 'Featured Post', 'newtheme' ); ?></h1>
  41.  
  42. <?php
  43. // Let's roll.
  44. while ( $featured->have_posts() ) : $featured->the_post();
  45.  
  46. // Increase the counter.
  47. $counter_slider++;
  48.  
  49. /**
  50. * We're going to add a class to our featured post for featured images
  51. * by default it'll have the feature-text class.
  52. */
  53. $feature_class = 'feature-text';
  54.  
  55. if ( has_post_thumbnail() ) {
  56. // ... but if it has a featured image let's add some class
  57. $feature_class = 'feature-image small';
  58.  
  59. // Hang on. Let's check this here image out.
  60. $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), array( $header_image_width, $header_image_width ) );
  61.  
  62. // Is it bigger than or equal to our header?
  63. if ( $image[1] >= $header_image_width ) {
  64. // If bigger, let's add a BIGGER class. It's EXTRA classy now.
  65. $feature_class = 'feature-image large';
  66. }
  67. }
  68. ?>
  69.  
  70. <section class="featured-post <?php echo $feature_class; ?>" id="featured-post-<?php echo $counter_slider; ?>">
  71.  
  72. <?php
  73. /**
  74. * If the thumbnail is as big as the header image
  75. * make it a large featured post, otherwise render it small
  76. */
  77. if ( has_post_thumbnail() ) {
  78. if ( $image[1] >= $header_image_width )
  79. $thumbnail_size = 'large-feature';
  80. else
  81. $thumbnail_size = 'small-feature';
  82. ?>
  83. <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_post_thumbnail( $thumbnail_size ); ?></a>
  84. <?php
  85. }
  86. ?>
  87. <?php get_template_part( 'content', 'featured' ); ?>
  88. </section>
  89. <?php endwhile; ?>
  90.  
  91. <?php
  92. // Show slider only if we have more than one featured post.
  93. if ( $featured->post_count > 1 ) :
  94. ?>
  95. <nav class="feature-slider">
  96. <ul>
  97. <?php
  98.  
  99. // Reset the counter so that we end up with matching elements
  100. $counter_slider = 0;
  101.  
  102. // Begin from zero
  103. rewind_posts();
  104.  
  105. // Let's roll again.
  106. while ( $featured->have_posts() ) : $featured->the_post();
  107. $counter_slider++;
  108. if ( 1 == $counter_slider )
  109. $class = 'class="active"';
  110. else
  111. $class = '';
  112. ?>
  113. <li><a href="#featured-post-<?php echo $counter_slider; ?>" title="<?php printf( esc_attr__( 'Featuring: %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ); ?>" <?php echo $class; ?>></a></li>
  114. <?php endwhile; ?>
  115. </ul>
  116. </nav>
  117. <?php endif; // End check for more than one sticky post. ?>
  118. </div><!-- .featured-posts -->
  119. <?php endif; // End check for published posts. ?>
  120. <?php endif; // End check for sticky posts. ?>

A continuación comprueba si existen post destacados para mostrar, si es así se inicia el bucle para procesar los datos y mostrar el código html correspondiente.

  1. <section class="recent-posts">
  2. <h1 class="showcase-heading"><?php _e( 'Recent Posts', 'newtheme' ); ?></h1>
  3.  
  4. <?php
  5.  
  6. // Display our recent posts, showing full content for the very latest, ignoring Aside posts.
  7. $recent_args = array(
  8. 'order' => 'DESC',
  9. 'post__not_in' => get_option( 'sticky_posts' ),
  10. 'tax_query' => array(
  11. 'taxonomy' => 'post_format',
  12. 'terms' => array( 'post-format-aside', 'post-format-link', 'post-format-quote', 'post-format-status' ),
  13. 'field' => 'slug',
  14. 'operator' => 'NOT IN',
  15. ),
  16. ),
  17. 'no_found_rows' => true,
  18. );
  19.  
  20. // Our new query for the Recent Posts section.
  21. $recent = new WP_Query( $recent_args );
  22.  
  23. // The first Recent post is displayed normally
  24. if ( $recent->have_posts() ) : $recent->the_post();
  25.  
  26. // Set $more to 0 in order to only get the first part of the post.
  27. global $more;
  28. $more = 0;
  29.  
  30. get_template_part( 'content', get_post_format() );
  31.  
  32. echo '<ol class="other-recent-posts">';
  33.  
  34. endif;
  35.  
  36. // For all other recent posts, just display the title and comment status.
  37. while ( $recent->have_posts() ) : $recent->the_post(); ?>
  38.  
  39. <li class="entry-title">
  40. <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a>
  41. <span class="comments-link">
  42. <?php comments_popup_link( '<span class="leave-reply">' . __( 'Leave a reply', 'newtheme' ) . '</span>', __( '<b>1</b> Reply', 'newtheme' ), __( '<b>%</b> Replies', 'newtheme' ) ); ?>
  43. </span>
  44. </li>
  45.  
  46. <?php
  47. endwhile;
  48.  
  49. // If we had some posts, close the <ol>
  50. if ( $recent->post_count > 0 )
  51. echo '</ol>';
  52. ?>
  53. </section><!-- .recent-posts -->

Después tenemos los post más recientes, que se obtienen de la misma manera que los destacados.

  1. <div class="widget-area" role="complementary">
  2. <?php if ( ! dynamic_sidebar( 'sidebar-2' ) ) : ?>
  3.  
  4. <?php
  5. the_widget( 'New_Theme_Ephemera_Widget', '', array( 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>' ) );
  6. ?>
  7.  
  8. <?php endif; // end sidebar widget area ?>
  9. </div><!-- .widget-area -->

Por último cargamos el widget que mostrará un listado de links a diferentes post.

 

CONTENT-INTRO.PHP

Creamos el archivo content-intro.php y añadimos el siguiente código:

  1. <?php
  2. /**
  3.  * The template for displaying page content in the showcase.php page template
  4.  *
  5.  * @package WordPress
  6.  * @subpackage New_Theme
  7.  */
  8. ?>
  9.  
  10. <article id="post-<?php the_ID(); ?>" <?php post_class( 'intro' ); ?>>
  11. <header class="entry-header">
  12. <h2 class="entry-title"><?php the_title(); ?></h2>
  13. </header><!-- .entry-header -->
  14.  
  15. <div class="entry-content">
  16. <?php the_content(); ?>
  17. <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'newtheme' ) . '</span>', 'after' => '</div>' ) ); ?>
  18. <?php edit_post_link( __( 'Edit', 'newtheme' ), '<span class="edit-link">', '</span>' ); ?>
  19. </div><!-- .entry-content -->
  20. </article><!-- #post-<?php the_ID(); ?> -->

Código sencillo, simplemente da formato al contenido.

Cron Job WordPress

WordPress 3.x para desarrolladores: Temas y plantillas, content-image.php, content-link.php, content-quote.php y content-status.php

0

CONTENT-IMAGE.PHP

Creamos el archivo content-image.php y añadimos el siguiente código:

  1. <?php
  2. /**
  3.  * The template for displaying posts in the Image Post Format on index and archive pages
  4.  *
  5.  * Learn more: http://codex.wordpress.org/Post_Formats
  6.  *
  7.  * @package WordPress
  8.  * @subpackage New_Theme
  9.  */
  10. ?>
  11. <article id="post-<?php the_ID(); ?>" <?php post_class( 'indexed' ); ?>>
  12. <header class="entry-header">
  13. <hgroup>
  14. <h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
  15. <h3 class="entry-format"><?php _e( 'Image', 'newtheme' ); ?></h3>
  16. </hgroup>
  17.  
  18. <?php if ( comments_open() && ! post_password_required() ) : ?>
  19. <div class="comments-link">
  20. <?php comments_popup_link( '<span class="leave-reply">' . __( "Reply", 'newtheme' ) . '</span>', _x( '1', 'comments number', 'newtheme' ), _x( '%', 'comments number', 'newtheme' ) ); ?>
  21. </div>
  22. <?php endif; ?>
  23. </header><!-- .entry-header -->
  24.  
  25. <div class="entry-content">
  26. <?php the_content( __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'newtheme' ) ); ?>
  27. <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'newtheme' ) . '</span>', 'after' => '</div>' ) ); ?>
  28. </div><!-- .entry-content -->
  29.  
  30. <footer class="entry-meta">
  31. <div class="entry-meta">
  32. <?php
  33. printf( __( '<a href="%1$s" rel="bookmark"><time class="entry-date" datetime="%2$s" pubdate>%3$s</time></a><span class="by-author"> <span class="sep"> by </span> <span class="author vcard"><a class="url fn n" href="%4$s" title="%5$s" rel="author">%6$s</a></span></span>', 'newtheme' ),
  34. esc_url( get_permalink() ),
  35. get_the_date( 'c' ),
  36. get_the_date(),
  37. esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ),
  38. esc_attr( sprintf( __( 'View all posts by %s', 'newtheme' ), get_the_author() ) ),
  39. get_the_author()
  40. );
  41. ?>
  42. </div><!-- .entry-meta -->
  43. <div class="entry-meta">
  44. <?php
  45. /* translators: used between list items, there is a space after the comma */
  46. $categories_list = get_the_category_list( __( ', ', 'newtheme' ) );
  47. if ( $categories_list ):
  48. ?>
  49. <span class="cat-links">
  50. <?php printf( __( '<span class="%1$s">Posted in</span> %2$s', 'newtheme' ), 'entry-utility-prep entry-utility-prep-cat-links', $categories_list ); ?>
  51. </span>
  52. <?php endif; // End if categories ?>
  53. <?php
  54. /* translators: used between list items, there is a space after the comma */
  55. $tags_list = get_the_tag_list( '', __( ', ', 'newtheme' ) );
  56. if ( $tags_list ): ?>
  57. <span class="tag-links">
  58. <?php printf( __( '<span class="%1$s">Tagged</span> %2$s', 'newtheme' ), 'entry-utility-prep entry-utility-prep-tag-links', $tags_list ); ?>
  59. </span>
  60. <?php endif; // End if $tags_list ?>
  61.  
  62. <?php if ( comments_open() ) : ?>
  63. <span class="comments-link"><?php comments_popup_link( '<span class="leave-reply">' . __( 'Leave a reply', 'newtheme' ) . '</span>', __( '<b>1</b> Reply', 'newtheme' ), __( '<b>%</b> Replies', 'newtheme' ) ); ?></span>
  64. <?php endif; // End if comments_open() ?>
  65. </div><!-- .entry-meta -->
  66.  
  67. <?php edit_post_link( __( 'Edit', 'newtheme' ), '<span class="edit-link">', '</span>' ); ?>
  68. </footer><!-- #entry-meta -->
  69. </article><!-- #post-<?php the_ID(); ?> -->

Este tipo de contenido simplemente muestra una imagen y su respectivo título.

 

CONTENT-LINK.PHP

Creamos el archivo content-link.php y añadimos el siguiente código:

  1. <?php
  2. /**
  3.  * The template for displaying posts in the Link Post Format on index and archive pages
  4.  *
  5.  * Learn more: http://codex.wordpress.org/Post_Formats
  6.  *
  7.  * @package WordPress
  8.  * @subpackage New_Theme
  9.  */
  10. ?>
  11.  
  12. <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
  13. <header class="entry-header">
  14. <hgroup>
  15. <h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
  16. <h3 class="entry-format"><?php _e( 'Link', 'newtheme' ); ?></h3>
  17. </hgroup>
  18.  
  19. <?php if ( comments_open() && ! post_password_required() ) : ?>
  20. <div class="comments-link">
  21. <?php comments_popup_link( '<span class="leave-reply">' . __( 'Reply', 'newtheme' ) . '</span>', _x( '1', 'comments number', 'newtheme' ), _x( '%', 'comments number', 'newtheme' ) ); ?>
  22. </div>
  23. <?php endif; ?>
  24. </header><!-- .entry-header -->
  25.  
  26. <?php if ( is_search() ) : // Only display Excerpts for Search ?>
  27. <div class="entry-summary">
  28. <?php the_excerpt(); ?>
  29. </div><!-- .entry-summary -->
  30. <?php else : ?>
  31. <div class="entry-content">
  32. <?php the_content( __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'newtheme' ) ); ?>
  33. <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'newtheme' ) . '</span>', 'after' => '</div>' ) ); ?>
  34. </div><!-- .entry-content -->
  35. <?php endif; ?>
  36.  
  37. <footer class="entry-meta">
  38. <?php newtheme_posted_on(); ?>
  39. <?php if ( comments_open() ) : ?>
  40. <span class="sep"> | </span>
  41. <span class="comments-link"><?php comments_popup_link( '<span class="leave-reply">' . __( 'Leave a reply', 'newtheme' ) . '</span>', __( '<b>1</b> Reply', 'newtheme' ), __( '<b>%</b> Replies', 'newtheme' ) ); ?></span>
  42. <?php endif; ?>
  43. <?php edit_post_link( __( 'Edit', 'newtheme' ), '<span class="edit-link">', '</span>' ); ?>
  44. </footer><!-- #entry-meta -->
  45. </article><!-- #post-<?php the_ID(); ?> -->

Este contenido es más sencillo aún. Simplemente mostramos un link o un conjunto de estos.

 

CONTENT-QUOTE.PHP

Creamos el archivo content-quote.php y añadimos el siguiente código:

  1. <?php
  2.  
  3. <?php
  4. /**
  5.  * The default template for displaying content
  6.  *
  7.  * @package WordPress
  8.  * @subpackage New_Theme
  9.  */
  10. ?>
  11.  
  12. <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
  13. <header class="entry-header">
  14. <hgroup>
  15. <h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
  16. <h3 class="entry-format"><?php _e( 'Quote', 'newtheme' ); ?></h3>
  17. </hgroup>
  18.  
  19. <div class="entry-meta">
  20. <?php newtheme_posted_on(); ?>
  21. </div><!-- .entry-meta -->
  22.  
  23. <?php if ( comments_open() && ! post_password_required() ) : ?>
  24. <div class="comments-link">
  25. <?php comments_popup_link( '<span class="leave-reply">' . __( 'Reply', 'newtheme' ) . '</span>', _x( '1', 'comments number', 'newtheme' ), _x( '%', 'comments number', 'newtheme' ) ); ?>
  26. </div>
  27. <?php endif; ?>
  28. </header><!-- .entry-header -->
  29.  
  30. <?php if ( is_search() ) : // Only display Excerpts for Search ?>
  31. <div class="entry-summary">
  32. <?php the_excerpt(); ?>
  33. </div><!-- .entry-summary -->
  34. <?php else : ?>
  35. <div class="entry-content">
  36. <?php the_content( __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'newtheme' ) ); ?>
  37. <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'newtheme' ) . '</span>', 'after' => '</div>' ) ); ?>
  38. </div><!-- .entry-content -->
  39. <?php endif; ?>
  40.  
  41. <footer class="entry-meta">
  42. <?php $show_sep = false; ?>
  43. <?php
  44. /* translators: used between list items, there is a space after the comma */
  45. $categories_list = get_the_category_list( __( ', ', 'newtheme' ) );
  46. if ( $categories_list ):
  47. ?>
  48. <span class="cat-links">
  49. <?php printf( __( '<span class="%1$s">Posted in</span> %2$s', 'newtheme' ), 'entry-utility-prep entry-utility-prep-cat-links', $categories_list );
  50. $show_sep = true; ?>
  51. </span>
  52. <?php endif; // End if categories ?>
  53. <?php
  54. /* translators: used between list items, there is a space after the comma */
  55. $tags_list = get_the_tag_list( '', __( ', ', 'newtheme' ) );
  56. if ( $tags_list ):
  57. if ( $show_sep ) : ?>
  58. <span class="sep"> | </span>
  59. <?php endif; // End if $show_sep ?>
  60. <span class="tag-links">
  61. <?php printf( __( '<span class="%1$s">Tagged</span> %2$s', 'newtheme' ), 'entry-utility-prep entry-utility-prep-tag-links', $tags_list );
  62. $show_sep = true; ?>
  63. </span>
  64. <?php endif; // End if $tags_list ?>
  65.  
  66. <?php if ( comments_open() ) : ?>
  67. <?php if ( $show_sep ) : ?>
  68. <span class="sep"> | </span>
  69. <?php endif; // End if $show_sep ?>
  70. <span class="comments-link"><?php comments_popup_link( '<span class="leave-reply">' . __( 'Leave a reply', 'newtheme' ) . '</span>', __( '<b>1</b> Reply', 'newtheme' ), __( '<b>%</b> Replies', 'newtheme' ) ); ?></span>
  71. <?php endif; // End if comments_open() ?>
  72.  
  73. <?php edit_post_link( __( 'Edit', 'newtheme' ), '<span class="edit-link">', '</span>' ); ?>
  74. </footer><!-- #entry-meta -->
  75. </article><!-- #post-<?php the_ID(); ?> -->

Más de lo mismo, lo único que cambia es que aparece un subtítulo indicando que es una cita.

 

CONTENT-STATUS.PHP

Creamos el archivo content-status.php y añadimos el siguiente código:

  1. <?php
  2. /**
  3.  * The template for displaying posts in the Status Post Format on index and archive pages
  4.  *
  5.  * Learn more: http://codex.wordpress.org/Post_Formats
  6.  *
  7.  * @package WordPress
  8.  * @subpackage New_Theme
  9.  */
  10. ?>
  11.  
  12. <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
  13. <header class="entry-header">
  14. <hgroup>
  15. <h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
  16. <h3 class="entry-format"><?php _e( 'Status', 'newtheme' ); ?></h3>
  17. </hgroup>
  18.  
  19. <?php if ( comments_open() && ! post_password_required() ) : ?>
  20. <div class="comments-link">
  21. <?php comments_popup_link( '<span class="leave-reply">' . __( 'Reply', 'newtheme' ) . '</span>', _x( '1', 'comments number', 'newtheme' ), _x( '%', 'comments number', 'newtheme' ) ); ?>
  22. </div>
  23. <?php endif; ?>
  24. </header><!-- .entry-header -->
  25.  
  26. <?php if ( is_search() ) : // Only display Excerpts for Search ?>
  27. <div class="entry-summary">
  28. <?php the_excerpt(); ?>
  29. </div><!-- .entry-summary -->
  30. <?php else : ?>
  31. <div class="entry-content">
  32. <div class="avatar"><?php echo get_avatar( get_the_author_meta( 'ID' ), apply_filters( 'newtheme_status_avatar', '65' ) ); ?></div>
  33.  
  34. <?php the_content( __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'newtheme' ) ); ?>
  35. <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'newtheme' ) . '</span>', 'after' => '</div>' ) ); ?>
  36. </div><!-- .entry-content -->
  37. <?php endif; ?>
  38.  
  39. <footer class="entry-meta">
  40. <?php newtheme_posted_on(); ?>
  41. <?php if ( comments_open() ) : ?>
  42. <span class="sep"> | </span>
  43. <span class="comments-link"><?php comments_popup_link( '<span class="leave-reply">' . __( 'Leave a reply', 'newtheme' ) . '</span>', __( '<b>1</b> Reply', 'newtheme' ), __( '<b>%</b> Replies', 'newtheme' ) ); ?></span>
  44. <?php endif; ?>
  45. <?php edit_post_link( __( 'Edit', 'newtheme' ), '<span class="edit-link">', '</span>' ); ?>
  46. </footer><!-- #entry-meta -->
  47. </article><!-- #post-<?php the_ID(); ?> -->

En este caso se añade la imagen del perfil del autor o avatar para acompañar al contenido.

Cron Job WordPress

WordPress 3.x para desarrolladores: Temas y plantillas, content-aside.php, content-featured.php y content-gallery.php

0

Durante los próximos post, incluido este, explicaré las últimas plantillas que quedan por crear de nuestro tema, después continuaré el tutorial con los plugins.

 

CONTENT-ASIDE.PHP

WordPress dispone de varios formatos de post que pueden ser personalizados (ver: http://codex.wordpress.org/Post_Formats), entre ellos se encuentra aside, que es parecido a una actualización de Facebook, es decir, no tiene título.

Creamos el archivo content-aside.php y añadimos el siguiente código:

  1. <?php
  2. /**
  3.  * The template for displaying posts in the Aside Post Format on index and archive pages
  4.  *
  5.  * Learn more: http://codex.wordpress.org/Post_Formats
  6.  *
  7.  * @package WordPress
  8.  * @subpackage New_Theme
  9.  */
  10. ?>
  11.  
  12. <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
  13. <header class="entry-header">
  14. <hgroup>
  15. <h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
  16. <h3 class="entry-format"><?php _e( 'Aside', 'newtheme' ); ?></h3>
  17. </hgroup>
  18.  
  19. <?php if ( comments_open() && ! post_password_required() ) : ?>
  20. <div class="comments-link">
  21. <?php comments_popup_link( '<span class="leave-reply">' . __( 'Reply', 'newtheme' ) . '</span>', _x( '1', 'comments number', 'newtheme' ), _x( '%', 'comments number', 'newtheme' ) ); ?>
  22. </div>
  23. <?php endif; ?>
  24. </header><!-- .entry-header -->
  25.  
  26. <?php if ( is_search() ) : // Only display Excerpts for Search ?>
  27. <div class="entry-summary">
  28. <?php the_excerpt(); ?>
  29. </div><!-- .entry-summary -->
  30. <?php else : ?>
  31. <div class="entry-content">
  32. <?php the_content( __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'newtheme' ) ); ?>
  33. <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'newtheme' ) . '</span>', 'after' => '</div>' ) ); ?>
  34. </div><!-- .entry-content -->
  35. <?php endif; ?>
  36.  
  37. <footer class="entry-meta">
  38. <?php newtheme_posted_on(); ?>
  39. <?php if ( comments_open() ) : ?>
  40. <span class="sep"> | </span>
  41. <span class="comments-link"><?php comments_popup_link( '<span class="leave-reply">' . __( 'Leave a reply', 'newtheme' ) . '</span>', __( '<b>1</b> Reply', 'newtheme' ), __( '<b>%</b> Replies', 'newtheme' ) ); ?></span>
  42. <?php endif; ?>
  43. <?php edit_post_link( __( 'Edit', 'newtheme' ), '<span class="edit-link">', '</span>' ); ?>
  44. </footer><!-- #entry-meta -->
  45. </article><!-- #post-<?php the_ID(); ?> -->

Como veis, lo primero que se crea es la cabecera del post, pero en este caso, en vez de mostrar el título del post se mostrará el texto «Aside«. El resto del código es prácticamente igual al de un post normal: se muestra el contenido del post y se crea el pie de este con los metadatos y los correspondientes links, entre ellos el de editar.

 

CONTENT-FEATURED.PHP

Los post featured son los post destacados de los que ya hemos hablado con anterioridad. Aunque este tipo de post no aparece en la lista de formatos de post, si es una características de los post normales que se puede personalizar con su propia plantilla.

Por tanto crearemos el archivo content-featured.php y añadiremos el siguiente código:

  1. <?php
  2. /**
  3.  * The template for displaying content featured in the showcase.php page template
  4.  *
  5.  * @package WordPress
  6.  * @subpackage New_Theme
  7.  */
  8.  
  9. global $feature_class;
  10. ?>
  11. <article id="post-<?php the_ID(); ?>" <?php post_class( $feature_class ); ?>>
  12. <header class="entry-header">
  13. <h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
  14.  
  15. <div class="entry-meta">
  16. <?php newtheme_posted_on(); ?>
  17. </div><!-- .entry-meta -->
  18. </header><!-- .entry-header -->
  19.  
  20. <div class="entry-summary">
  21. <?php the_excerpt(); ?>
  22. <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'newtheme' ) . '</span>', 'after' => '</div>' ) ); ?>
  23. </div><!-- .entry-content -->
  24.  
  25. <footer class="entry-meta">
  26. <?php
  27. /* translators: used between list items, there is a space after the comma */
  28. $tag_list = get_the_tag_list( '', __( ', ', 'newtheme' ) );
  29. if ( '' != $tag_list ) {
  30. $utility_text = __( 'This entry was posted in %1$s and tagged %2$s. Bookmark the <a href="%3$s" title="Permalink to %4$s" rel="bookmark">permalink</a>.', 'newtheme' );
  31. } else {
  32. $utility_text = __( 'This entry was posted in %1$s. Bookmark the <a href="%3$s" title="Permalink to %4$s" rel="bookmark">permalink</a>.', 'newtheme' );
  33. }
  34. $utility_text,
  35. /* translators: used between list items, there is a space after the comma */
  36. get_the_category_list( __( ', ', 'newtheme' ) ),
  37. $tag_list,
  38. esc_url( get_permalink() ),
  39. the_title_attribute( 'echo=0' )
  40. );
  41. ?>
  42.  
  43. <?php edit_post_link( __( 'Edit', 'newtheme' ), '<span class="edit-link">', '</span>' ); ?>
  44. </footer><!-- .entry-meta -->
  45. </article><!-- #post-<?php the_ID(); ?> -->

Lo mismo de antes, se muestra el título, se muestra el contenido y se muestra el pie del post, la única diferencia sería que, en este caso también mostramos el texto «FEATURED» o «DESTACADO» en la página principal.

 

CONTENT-GALLERY.PHP

Este tipo de contenido nos permite mostrar galerías de imágenes, adjuntando las imágenes al post.

Creamos el archivo content-gallery.php y añadimos el siguiente código:

  1. <?php
  2. /**
  3.  * The template for displaying posts in the Gallery Post Format on index and archive pages
  4.  *
  5.  * Learn more: http://codex.wordpress.org/Post_Formats
  6.  *
  7.  * @package WordPress
  8.  * @subpackage New_Theme
  9.  */
  10. ?>
  11.  
  12. <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
  13. <header class="entry-header">
  14. <hgroup>
  15. <h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
  16. <h3 class="entry-format"><?php _e( 'Gallery', 'newtheme' ); ?></h3>
  17. </hgroup>
  18.  
  19. <div class="entry-meta">
  20. <?php newtheme_posted_on(); ?>
  21. </div><!-- .entry-meta -->
  22. </header><!-- .entry-header -->
  23.  
  24. <?php if ( is_search() ) : // Only display Excerpts for search pages ?>
  25. <div class="entry-summary">
  26. <?php the_excerpt(); ?>
  27. </div><!-- .entry-summary -->
  28. <?php else : ?>
  29. <div class="entry-content">
  30. <?php if ( post_password_required() ) : ?>
  31. <?php the_content( __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'newtheme' ) ); ?>
  32.  
  33. <?php else : ?>
  34. <?php
  35. $images = get_children( array( 'post_parent' => $post->ID, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order', 'order' => 'ASC', 'numberposts' => 999 ) );
  36. if ( $images ) :
  37. $total_images = count( $images );
  38. $image = array_shift( $images );
  39. $image_img_tag = wp_get_attachment_image( $image->ID, 'thumbnail' );
  40. ?>
  41.  
  42. <figure class="gallery-thumb">
  43. <a href="<?php the_permalink(); ?>"><?php echo $image_img_tag; ?></a>
  44. </figure><!-- .gallery-thumb -->
  45.  
  46. <p><em><?php printf( _n( 'This gallery contains <a %1$s>%2$s photo</a>.', 'This gallery contains <a %1$s>%2$s photos</a>.', $total_images, 'newtheme' ),
  47. 'href="' . esc_url( get_permalink() ) . '" title="' . sprintf( esc_attr__( 'Permalink to %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ) . '" rel="bookmark"',
  48. number_format_i18n( $total_images )
  49. ); ?></em></p>
  50. <?php endif; ?>
  51. <?php the_excerpt(); ?>
  52. <?php endif; ?>
  53. <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'newtheme' ) . '</span>', 'after' => '</div>' ) ); ?>
  54. </div><!-- .entry-content -->
  55. <?php endif; ?>
  56.  
  57. <footer class="entry-meta">
  58. <?php $show_sep = false; ?>
  59. <?php
  60. /* translators: used between list items, there is a space after the comma */
  61. $categories_list = get_the_category_list( __( ', ', 'newtheme' ) );
  62. if ( $categories_list ):
  63. ?>
  64. <span class="cat-links">
  65. <?php printf( __( '<span class="%1$s">Posted in</span> %2$s', 'newtheme' ), 'entry-utility-prep entry-utility-prep-cat-links', $categories_list );
  66. $show_sep = true; ?>
  67. </span>
  68. <?php endif; // End if categories ?>
  69. <?php
  70. /* translators: used between list items, there is a space after the comma */
  71. $tags_list = get_the_tag_list( '', __( ', ', 'newtheme' ) );
  72. if ( $tags_list ):
  73. if ( $show_sep ) : ?>
  74. <span class="sep"> | </span>
  75. <?php endif; // End if $show_sep ?>
  76. <span class="tag-links">
  77. <?php printf( __( '<span class="%1$s">Tagged</span> %2$s', 'newtheme' ), 'entry-utility-prep entry-utility-prep-tag-links', $tags_list );
  78. $show_sep = true; ?>
  79. </span>
  80. <?php endif; // End if $tags_list ?>
  81.  
  82. <?php if ( comments_open() ) : ?>
  83. <?php if ( $show_sep ) : ?>
  84. <span class="sep"> | </span>
  85. <?php endif; // End if $show_sep ?>
  86. <span class="comments-link"><?php comments_popup_link( '<span class="leave-reply">' . __( 'Leave a reply', 'newtheme' ) . '</span>', __( '<b>1</b> Reply', 'newtheme' ), __( '<b>%</b> Replies', 'newtheme' ) ); ?></span>
  87. <?php endif; // End if comments_open() ?>
  88.  
  89. <?php edit_post_link( __( 'Edit', 'newtheme' ), '<span class="edit-link">', '</span>' ); ?>
  90. </footer><!-- #entry-meta -->
  91. </article><!-- #post-<?php the_ID(); ?> -->

La parte más importante de este código es el siguiente extracto:

  1. <?php if ( post_password_required() ) : ?>
  2. <?php the_content( __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'newtheme' ) ); ?>
  3.  
  4. <?php else : ?>
  5. <?php
  6. $images = get_children( array( 'post_parent' => $post->ID, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order', 'order' => 'ASC', 'numberposts' => 999 ) );
  7. if ( $images ) :
  8. $total_images = count( $images );
  9. $image = array_shift( $images );
  10. $image_img_tag = wp_get_attachment_image( $image->ID, 'thumbnail' );
  11. ?>
  12.  
  13. <figure class="gallery-thumb">
  14. <a href="<?php the_permalink(); ?>"><?php echo $image_img_tag; ?></a>
  15. </figure><!-- .gallery-thumb -->
  16.  
  17. <p><em><?php printf( _n( 'This gallery contains <a %1$s>%2$s photo</a>.', 'This gallery contains <a %1$s>%2$s photos</a>.', $total_images, 'newtheme' ),
  18. 'href="' . esc_url( get_permalink() ) . '" title="' . sprintf( esc_attr__( 'Permalink to %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ) . '" rel="bookmark"',
  19. number_format_i18n( $total_images )
  20. ); ?></em></p>
  21. <?php endif; ?>

Esta parte es la que calcula el número de imágenes en el post y las convierte en una galería.

WordPress 3.x para desarrolladores: Temas y plantillas, page.php, sidebar-page.php y content-page.php

1

Seguimos con más plantillas para nuestro tema. Las dos siguientes son bastante sencillas.

 

PAGE.PHP

Creamos el archivo page.php y añadimos el siguiente código:

  1. <?php
  2. /**
  3.  * The template for displaying all pages.
  4.  *
  5.  * This is the template that displays all pages by default.
  6.  * Please note that this is the WordPress construct of pages
  7.  * and that other 'pages' on your WordPress site will use a
  8.  * different template.
  9.  *
  10.  * @package WordPress
  11.  * @subpackage New_Theme
  12.  */
  13.  
  14. get_header(); ?>
  15.  
  16. <div id="primary">
  17. <div id="content" role="main">
  18.  
  19. <?php while ( have_posts() ) : the_post(); ?>
  20.  
  21. <?php get_template_part( 'content', 'page' ); ?>
  22.  
  23. <?php comments_template( '', true ); ?>
  24.  
  25. <?php endwhile; // end of the loop. ?>
  26.  
  27. </div><!-- #content -->
  28. </div><!-- #primary -->
  29.  
  30. <?php get_footer(); ?>

Poco puedo comentar del código que no hayamos visto ya. Se llama a la cabecera; se crean las capas para contener el contenido de la página; se crea el bucle que comprobará si hay posts; se recupera la plantilla content-page.php que dará formato al contenido; se recupera la plantilla de comentarios siempre que el administrador los haya habilitado para este contenido, y se recupera la plantilla del pie de página.

 

SIDEBAR-PAGE.PHP

Creamos el archivo sidebar-page.php y añadimos el siguiente código:

  1. <?php
  2. /**
  3.  * Template Name: Sidebar Template
  4.  * Description: A Page Template that adds a sidebar to pages
  5.  *
  6.  * @package WordPress
  7.  * @subpackage New_Theme
  8.  */
  9.  
  10. get_header(); ?>
  11.  
  12. <div id="primary">
  13. <div id="content" role="main">
  14.  
  15. <?php while ( have_posts() ) : the_post(); ?>
  16.  
  17. <?php get_template_part( 'content', 'page' ); ?>
  18.  
  19. <?php comments_template( '', true ); ?>
  20.  
  21. <?php endwhile; // end of the loop. ?>
  22.  
  23. </div><!-- #content -->
  24. </div><!-- #primary -->
  25.  
  26. <?php get_sidebar(); ?>
  27. <?php get_footer(); ?>

Prácticamente es el mismo código, con la única diferencia de que antes de llamar a la plantilla del pie de página llamamos a la plantilla del sidebar.

 

CONTENT-PAGE.PHP

Creamos el archivo content-page.php y añadimos el siguiente código:

  1. <?php
  2. /**
  3.  * The template used for displaying page content in page.php
  4.  *
  5.  * @package WordPress
  6.  * @subpackage New_Theme
  7.  */
  8. ?>
  9.  
  10. <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
  11. <header class="entry-header">
  12. <h1 class="entry-title"><?php the_title(); ?></h1>
  13. </header><!-- .entry-header -->
  14.  
  15. <div class="entry-content">
  16. <?php the_content(); ?>
  17. <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'newtheme' ) . '</span>', 'after' => '</div>' ) ); ?>
  18. </div><!-- .entry-content -->
  19. <footer class="entry-meta">
  20. <?php edit_post_link( __( 'Edit', 'newtheme' ), '<span class="edit-link">', '</span>' ); ?>
  21. </footer><!-- .entry-meta -->
  22. </article><!-- #post-<?php the_ID(); ?> -->

Este código también es bastante sencillo.

Creamos una etiqueta article, la cual tendrá como id el texto post- seguido del id del post, recuperado con la función the_ID(). Además a esta etiqueta le añadimos las clases de estilos correspondiente a los post, utilizando para ello la función post_class().

A continuación se crea la cabecera del post y se añade el título con la función the_title().

Ya en el contenido se hace una llamada a la función the_content() que recuperará el contenido del post, y seguidamente se hace una llamada a wp_link_pages() que creará un paginador para el post en caso de que sea necesario.

Por último se crea el pie del post con el link para poder editarlo.

Cron Job WordPress

WordPress 3.x para desarrolladores: Temas y plantillas, index.php y content.php

0

Con el anterior post os dejé un poco colgados con el tutorial, expliqué las plantillas más básicas y la creación de las plantillas de la cabecera y el pie, además de la explicación del código de cada una. Pero aun falta la parte más importante de todas, el contenido.

 

EL BUCLE ( THE LOOP )

Bueno, vamos al lío y explico esto del bucle. En el archivo index.php añadimos el siguiente código entre wp_head() y wp_footer().

 

  1. <div id="primary">
  2. <div id="content" role="main">
  3.  
  4. <?php if ( have_posts() ) : ?>
  5.  
  6. <?php newtheme_content_nav( 'nav-above' ); ?>
  7.  
  8. <?php /* Start the Loop */ ?>
  9. <?php while ( have_posts() ) : the_post(); ?>
  10.  
  11. <?php get_template_part( 'content', get_post_format() ); ?>
  12.  
  13. <?php endwhile; ?>
  14.  
  15. <?php newtheme_content_nav( 'nav-below' ); ?>
  16.  
  17. <?php else : ?>
  18.  
  19. <article id="post-0" class="post no-results not-found">
  20. <header class="entry-header">
  21. <h1 class="entry-title"><?php _e( 'Nothing Found', 'newtheme' ); ?></h1>
  22. </header><!-- .entry-header -->
  23.  
  24. <div class="entry-content">
  25. <p><?php _e( 'Apologies, but no results were found for the requested archive. Perhaps searching will help find a related post.', 'newtheme' ); ?></p>
  26. </div><!-- .entry-content -->
  27. </article><!-- #post-0 -->
  28.  
  29. <?php endif; ?>
  30.  
  31. </div><!-- #content -->
  32. </div><!-- #primary -->
  33.  
  34. <?php get_sidebar(); ?>

 

Lo primero que hacemos es crear dos capas con id primary y content, ambas contendrán el contenido que se muestre en la página.

Seguidamente tenemos un condicional que comprueba si hay posts para mostrar en la página.

Si es que sí hay posts, WordPress procesará las cinco siguientes líneas de código y dentro de estas nuestro bucle o The Loop.

Antes y después del bucle se hace una llamada a la función newtheme_content_nav(), este es un hook para crear el paginador de post en el caso de que haya más que las que pueden entrar en una página. Esta función la crearemos más adelante en el archivo functions.php.

El bucle while se ejecutará mientras have_posts() sea true, y los datos del post se obtienen de the_post(), que serán procesados en la plantilla correspondiente utilizando get_template_part( ‘content’, get_post_format() ). Esta función (get_template_part()) llama a la plantilla content para procesarla y generar el código html correspondiente.

Si no hay posts entonces se muestra un mensaje al usuario indicando esto mismo.

Cerramos las etiquetas div. Por último nos encontramos con la función get_sidebar(), que nos generará la barra lateral con los widgets de nuestro blog. De hecho ya vimos esta función en la plantilla del pie (footer.php) en ella nos encontramos con la función get_sidebar( ‘footer’ ). La razón de que una función tenga argumento y otra no, radica en la plantilla a usar. En el caso del sidebar del pie, se utilizará sidebar-footer.php y para el sidebar del index.php usaremos la genérica: sidebar.php.

Si ejecutásemos ahora la página principal de nuestro WordPress no veríamos contenido, la razón es que aun no hemos creado la plantilla que muestra el contenido, así que vamos a ello.

 

CONTENT.PHP

Este archivo es el encargado de mostrar el contenido de los posts y maquetarlo en html. Para ello vamos a crear el archivo content.php y añadir las siguientes líneas de código:

 

  1. <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
  2. <header class="entry-header">
  3. <?php if ( is_sticky() ) : ?>
  4. <hgroup>
  5. <h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
  6. <h3 class="entry-format"><?php _e( 'Featured', 'newtheme' ); ?></h3>
  7. </hgroup>
  8. <?php else : ?>
  9. <h1 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h1>
  10. <?php endif; ?>
  11.  
  12. <?php if ( 'post' == get_post_type() ) : ?>
  13. <div class="entry-meta">
  14. <?php newtheme_posted_on(); ?>
  15. </div><!-- .entry-meta -->
  16. <?php endif; ?>
  17.  
  18. <?php if ( comments_open() && ! post_password_required() ) : ?>
  19. <div class="comments-link">
  20. <?php comments_popup_link( '<span class="leave-reply">' . __( 'Reply', 'newtheme' ) . '</span>', _x( '1', 'comments number', 'newtheme' ), _x( '%', 'comments number', 'newtheme' ) ); ?>
  21. </div>
  22. <?php endif; ?>
  23. </header><!-- .entry-header -->
  24.  
  25. <?php if ( is_search() ) : // Only display Excerpts for Search ?>
  26. <div class="entry-summary">
  27. <?php the_excerpt(); ?>
  28. </div><!-- .entry-summary -->
  29. <?php else : ?>
  30. <div class="entry-content">
  31. <?php the_content( __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'newtheme' ) ); ?>
  32. <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'newtheme' ) . '</span>', 'after' => '</div>' ) ); ?>
  33. </div><!-- .entry-content -->
  34. <?php endif; ?>
  35.  
  36. <footer class="entry-meta">
  37. <?php $show_sep = false; ?>
  38. <?php if ( 'post' == get_post_type() ) : // Hide category and tag text for pages on Search ?>
  39. <?php
  40. /* translators: used between list items, there is a space after the comma */
  41. $categories_list = get_the_category_list( __( ', ', 'newtheme' ) );
  42. if ( $categories_list ):
  43. ?>
  44. <span class="cat-links">
  45. <?php printf( __( '<span class="%1$s">Posted in</span> %2$s', 'newtheme' ), 'entry-utility-prep entry-utility-prep-cat-links', $categories_list );
  46. $show_sep = true; ?>
  47. </span>
  48. <?php endif; // End if categories ?>
  49. <?php
  50. /* translators: used between list items, there is a space after the comma */
  51. $tags_list = get_the_tag_list( '', __( ', ', 'newtheme' ) );
  52. if ( $tags_list ):
  53. if ( $show_sep ) : ?>
  54. <span class="sep"> | </span>
  55. <?php endif; // End if $show_sep ?>
  56. <span class="tag-links">
  57. <?php printf( __( '<span class="%1$s">Tagged</span> %2$s', 'newtheme' ), 'entry-utility-prep entry-utility-prep-tag-links', $tags_list );
  58. $show_sep = true; ?>
  59. </span>
  60. <?php endif; // End if $tags_list ?>
  61. <?php endif; // End if 'post' == get_post_type() ?>
  62.  
  63. <?php if ( comments_open() ) : ?>
  64. <?php if ( $show_sep ) : ?>
  65. <span class="sep"> | </span>
  66. <?php endif; // End if $show_sep ?>
  67. <span class="comments-link"><?php comments_popup_link( '<span class="leave-reply">' . __( 'Leave a reply', 'newtheme' ) . '</span>', __( '<b>1</b> Reply', 'nwtheme' ), __( '<b>%</b> Replies', 'newtheme' ) ); ?></span>
  68. <?php endif; // End if comments_open() ?>
  69.  
  70. <?php edit_post_link( __( 'Edit', 'newtheme' ), '<span class="edit-link">', '</span>' ); ?>
  71. </footer><!-- #entry-meta -->
  72. </article><!-- #post-<?php the_ID(); ?> -->

 

Sí, es mucho código pero como siempre os lo explicaré casi línea por línea.

En primer lugar tenemos las etiquetas article y header del post:

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
 <header class="entry-header">

Aquí vemos dos funciones de WordPress, la primera the_ID() sirve para devolver el id del post, el segundo genera las clases de estilos para el post.

Ha continuación tenemos el siguiente bloque condicional dentro de la etiqueta header:

 

  1. <?php if ( is_sticky() ) : ?>
  2. <hgroup>
  3. <h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
  4. <h3 class="entry-format"><?php _e( 'Featured', 'newtheme' ); ?></h3>
  5. </hgroup>
  6. <?php else : ?>
  7. <h1 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'newtheme' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h1>
  8. <?php endif; ?>
  9.  
  10. <?php if ( 'post' == get_post_type() ) : ?>
  11. <div class="entry-meta">
  12. <?php newtheme_posted_on(); ?>
  13. </div><!-- .entry-meta -->
  14. <?php endif; ?>
  15.  
  16. <?php if ( comments_open() && ! post_password_required() ) : ?>
  17. <div class="comments-link">
  18. <?php comments_popup_link( '<span class="leave-reply">' . __( 'Reply', 'newtheme' ) . '</span>', _x( '1', 'comments number', 'newtheme' ), _x( '%', 'comments number', 'newtheme' ) ); ?>
  19. </div>
  20. <?php endif; ?>

 

Como puedes ver el condicional comprueba la función is_sticky(). Esta función comprueba si el post ha sido seleccionado para que se mantenga fijo en la página principal o como destacado. Como verás, si el post está fijo en la página principal se mostrará el título de la entrada y un texto (Featured o Destacado) que indica el estado de este.

En el caso que no sea un post destacado se genera el título por defecto. Para generar la url se utiliza la función the_permalink() que genera la url absoluta del post. Además se añade al atributo title del link el título del post.

  1. <?php if ( 'post' == get_post_type() ) : ?>
  2. <div class="entry-meta">
  3. <?php newtheme_posted_on(); ?>
  4. </div><!-- .entry-meta -->
  5. <?php endif; ?>

Este código genera el html correspondiente para las etiquetas meta de la página/post: fecha/hora, autor, descripción, etc.

  1. <?php if ( comments_open() && ! post_password_required() ) : ?>
  2. <div class="comments-link">
  3. <?php comments_popup_link( '<span class="leave-reply">' . __( 'Reply', 'newtheme' ) . '</span>', _x( '1', 'comments number', 'newtheme' ), _x( '%', 'comments number', 'newtheme' ) ); ?>
  4. </div>
  5. <?php endif; ?>

Aquí se comprueba si el post permite comentarios y no es requerida una contraseña. Dentro del condicional se crea el link que mostrará los comentarios, además el texto del vínculo será el número de comentarios que tiene el post. Esto crearía un número al lado del título del post, normalmente con un fondo con una burbuja de diálogo.

  1. <?php if ( is_search() ) : // Only display Excerpts for Search ?>
  2. <div class="entry-summary">
  3. <?php the_excerpt(); ?>
  4. </div><!-- .entry-summary -->
  5. <?php else : ?>
  6. <div class="entry-content">
  7. <?php the_content( __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'newtheme' ) ); ?>
  8. <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'newtheme' ) . '</span>', 'after' => '</div>' ) ); ?>
  9. </div><!-- .entry-content -->
  10. <?php endif; ?>

Se comprueba si lo que se está mostrando es una búsqueda, si es así se carga parte del cuerpo del post pero añadiendo al final del texto […].

Si no se está mostrando una búsqueda se carga el contenido con la función the_content(), que en el caso que el post contenga un separador del tipo «read more… » se mostrará un texto que lo indique. Por último se muestran una serie de links para poder ir directamente a las diferentes páginas del post.

  1. <footer class="entry-meta">
  2. <?php $show_sep = false; ?>
  3. <?php if ( 'post' == get_post_type() ) : // Hide category and tag text for pages on Search ?>
  4. <?php
  5. /* translators: used between list items, there is a space after the comma */
  6. $categories_list = get_the_category_list( __( ', ', 'newtheme' ) );
  7. if ( $categories_list ):
  8. ?>
  9. <span class="cat-links">
  10. <?php printf( __( '<span class="%1$s">Posted in</span> %2$s', 'newtheme' ), 'entry-utility-prep entry-utility-prep-cat-links', $categories_list );
  11. $show_sep = true; ?>
  12. </span>
  13. <?php endif; // End if categories ?>
  14. <?php
  15. /* translators: used between list items, there is a space after the comma */
  16. $tags_list = get_the_tag_list( '', __( ', ', 'newtheme' ) );
  17. if ( $tags_list ):
  18. if ( $show_sep ) : ?>
  19. <span class="sep"> | </span>
  20. <?php endif; // End if $show_sep ?>
  21. <span class="tag-links">
  22. <?php printf( __( '<span class="%1$s">Tagged</span> %2$s', 'newtheme' ), 'entry-utility-prep entry-utility-prep-tag-links', $tags_list );
  23. $show_sep = true; ?>
  24. </span>
  25. <?php endif; // End if $tags_list ?>
  26. <?php endif; // End if 'post' == get_post_type() ?>
  27.  
  28. <?php if ( comments_open() ) : ?>
  29. <?php if ( $show_sep ) : ?>
  30. <span class="sep"> | </span>
  31. <?php endif; // End if $show_sep ?>
  32. <span class="comments-link"><?php comments_popup_link( '<span class="leave-reply">' . __( 'Leave a reply', 'newtheme' ) . '</span>', __( '<b>1</b> Reply', 'nwtheme' ), __( '<b>%</b> Replies', 'newtheme' ) ); ?></span>
  33. <?php endif; // End if comments_open() ?>
  34.  
  35. <?php edit_post_link( __( 'Edit', 'newtheme' ), '<span class="edit-link">', '</span>' ); ?>
  36. </footer><!-- #entry-meta -->

Llegamos al pie del post donde se comprobará primero que lo que se muestra es un post y no una búsqueda, en el caso de ser esto afirmativo se cargan las categorías a la que pertenezca el post y se genera su código html correspondiente.

Después se carga el listado de tags o etiquetas y se genera el código html para mostrarlas.

A continuación mostramos de nuevo el número de comentarios del post.

Por último mostramos el link de editar post, siempre y cuando el usuario tenga permiso para ello.

Ocultar el bloque de contenido principal (main content block) de la página principal en Drupal

0

Primero debes crear un nuevo tipo de contenido, yo lo he llamado ‘home’, además en la descripción he indicado que no se genere ningún contenido de ese tipo.

Segundo, en la configuración del bloque del contenido principal nos vamos al apartado de ‘Tipos de contenido’ y seleccionamos ‘home’ para que muestre solo ese tipo de contenido.

En el bloque node que está dentro del core de Drupal abrimos el archivo node.module y vamos a la linea 2557 o al método node_page_default(), nos aparecerá este código:

  1. <?php
  2.  
  3. drupal_set_title(t('Welcome to @site-name', array('@site-name' => variable_get('site_name', 'Drupal'))), PASS_THROUGH);
  4. $default_message = '<p>' . t('No front page content has been created yet.') . '</p>';
  5. $default_links = array();
  6.  
  7. if (_node_add_access()) {
  8. $default_links[] = l(t('Add new content'), 'node/add');
  9. }
  10.  
  11. if (!empty($default_links)) {
  12. $default_message .= theme('item_list', array('items' => $default_links));
  13. }
  14.  
  15. $build['default_message'] = array(
  16. '#markup' => $default_message,
  17. '#prefix' => '<div id="first-time">',
  18. '#suffix' => '</div>',
  19. );

Bien, coméntalo y añade justo debajo:

  1. <?php
  2. drupal_set_title('');
  3. $build['default_message'] = array(
  4. '#markup' => '',
  5. '#prefix' => '',
  6. '#suffix' => '',
  7. );

El bloque de contenido principal ya no aparecerá en la página principal, aunque esto no es perfecto, lo sé… pero funciona xD.

Ir arriba