[ Index ]

WordPress Cross Reference

title

Body

[close]

/wp-content/themes/twentytwelve/ -> functions.php (source)

   1  <?php
   2  /**
   3   * Twenty Twelve functions and definitions
   4   *
   5   * Sets up the theme and provides some helper functions, which are used
   6   * in the theme as custom template tags. Others are attached to action and
   7   * filter hooks in WordPress to change core functionality.
   8   *
   9   * When using a child theme (see http://codex.wordpress.org/Theme_Development and
  10   * http://codex.wordpress.org/Child_Themes), you can override certain functions
  11   * (those wrapped in a function_exists() call) by defining them first in your child theme's
  12   * functions.php file. The child theme's functions.php file is included before the parent
  13   * theme's file, so the child theme functions would be used.
  14   *
  15   * Functions that are not pluggable (not wrapped in function_exists()) are instead attached
  16   * to a filter or action hook.
  17   *
  18   * For more information on hooks, actions, and filters, @link http://codex.wordpress.org/Plugin_API
  19   *
  20   * @package WordPress
  21   * @subpackage Twenty_Twelve
  22   * @since Twenty Twelve 1.0
  23   */
  24  
  25  // Set up the content width value based on the theme's design and stylesheet.
  26  if ( ! isset( $content_width ) )
  27      $content_width = 625;
  28  
  29  /**
  30   * Twenty Twelve setup.
  31   *
  32   * Sets up theme defaults and registers the various WordPress features that
  33   * Twenty Twelve supports.
  34   *
  35   * @uses load_theme_textdomain() For translation/localization support.
  36   * @uses add_editor_style() To add a Visual Editor stylesheet.
  37   * @uses add_theme_support() To add support for post thumbnails, automatic feed links,
  38   *     custom background, and post formats.
  39   * @uses register_nav_menu() To add support for navigation menus.
  40   * @uses set_post_thumbnail_size() To set a custom post thumbnail size.
  41   *
  42   * @since Twenty Twelve 1.0
  43   */
  44  function twentytwelve_setup() {
  45      /*
  46       * Makes Twenty Twelve available for translation.
  47       *
  48       * Translations can be added to the /languages/ directory.
  49       * If you're building a theme based on Twenty Twelve, use a find and replace
  50       * to change 'twentytwelve' to the name of your theme in all the template files.
  51       */
  52      load_theme_textdomain( 'twentytwelve', get_template_directory() . '/languages' );
  53  
  54      // This theme styles the visual editor with editor-style.css to match the theme style.
  55      add_editor_style();
  56  
  57      // Adds RSS feed links to <head> for posts and comments.
  58      add_theme_support( 'automatic-feed-links' );
  59  
  60      // This theme supports a variety of post formats.
  61      add_theme_support( 'post-formats', array( 'aside', 'image', 'link', 'quote', 'status' ) );
  62  
  63      // This theme uses wp_nav_menu() in one location.
  64      register_nav_menu( 'primary', __( 'Primary Menu', 'twentytwelve' ) );
  65  
  66      /*
  67       * This theme supports custom background color and image,
  68       * and here we also set up the default background color.
  69       */
  70      add_theme_support( 'custom-background', array(
  71          'default-color' => 'e6e6e6',
  72      ) );
  73  
  74      // This theme uses a custom image size for featured images, displayed on "standard" posts.
  75      add_theme_support( 'post-thumbnails' );
  76      set_post_thumbnail_size( 624, 9999 ); // Unlimited height, soft crop
  77  }
  78  add_action( 'after_setup_theme', 'twentytwelve_setup' );
  79  
  80  /**
  81   * Add support for a custom header image.
  82   */
  83  require( get_template_directory() . '/inc/custom-header.php' );
  84  
  85  /**
  86   * Return the Google font stylesheet URL if available.
  87   *
  88   * The use of Open Sans by default is localized. For languages that use
  89   * characters not supported by the font, the font can be disabled.
  90   *
  91   * @since Twenty Twelve 1.2
  92   *
  93   * @return string Font stylesheet or empty string if disabled.
  94   */
  95  function twentytwelve_get_font_url() {
  96      $font_url = '';
  97  
  98      /* translators: If there are characters in your language that are not supported
  99       * by Open Sans, translate this to 'off'. Do not translate into your own language.
 100       */
 101      if ( 'off' !== _x( 'on', 'Open Sans font: on or off', 'twentytwelve' ) ) {
 102          $subsets = 'latin,latin-ext';
 103  
 104          /* translators: To add an additional Open Sans character subset specific to your language,
 105           * translate this to 'greek', 'cyrillic' or 'vietnamese'. Do not translate into your own language.
 106           */
 107          $subset = _x( 'no-subset', 'Open Sans font: add new subset (greek, cyrillic, vietnamese)', 'twentytwelve' );
 108  
 109          if ( 'cyrillic' == $subset )
 110              $subsets .= ',cyrillic,cyrillic-ext';
 111          elseif ( 'greek' == $subset )
 112              $subsets .= ',greek,greek-ext';
 113          elseif ( 'vietnamese' == $subset )
 114              $subsets .= ',vietnamese';
 115  
 116          $protocol = is_ssl() ? 'https' : 'http';
 117          $query_args = array(
 118              'family' => 'Open+Sans:400italic,700italic,400,700',
 119              'subset' => $subsets,
 120          );
 121          $font_url = add_query_arg( $query_args, "$protocol://fonts.googleapis.com/css" );
 122      }
 123  
 124      return $font_url;
 125  }
 126  
 127  /**
 128   * Enqueue scripts and styles for front-end.
 129   *
 130   * @since Twenty Twelve 1.0
 131   *
 132   * @return void
 133   */
 134  function twentytwelve_scripts_styles() {
 135      global $wp_styles;
 136  
 137      /*
 138       * Adds JavaScript to pages with the comment form to support
 139       * sites with threaded comments (when in use).
 140       */
 141      if ( is_singular() && comments_open() && get_option( 'thread_comments' ) )
 142          wp_enqueue_script( 'comment-reply' );
 143  
 144      // Adds JavaScript for handling the navigation menu hide-and-show behavior.
 145      wp_enqueue_script( 'twentytwelve-navigation', get_template_directory_uri() . '/js/navigation.js', array(), '1.0', true );
 146  
 147      $font_url = twentytwelve_get_font_url();
 148      if ( ! empty( $font_url ) )
 149          wp_enqueue_style( 'twentytwelve-fonts', esc_url_raw( $font_url ), array(), null );
 150  
 151      // Loads our main stylesheet.
 152      wp_enqueue_style( 'twentytwelve-style', get_stylesheet_uri() );
 153  
 154      // Loads the Internet Explorer specific stylesheet.
 155      wp_enqueue_style( 'twentytwelve-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentytwelve-style' ), '20121010' );
 156      $wp_styles->add_data( 'twentytwelve-ie', 'conditional', 'lt IE 9' );
 157  }
 158  add_action( 'wp_enqueue_scripts', 'twentytwelve_scripts_styles' );
 159  
 160  /**
 161   * Filter TinyMCE CSS path to include Google Fonts.
 162   *
 163   * Adds additional stylesheets to the TinyMCE editor if needed.
 164   *
 165   * @uses twentytwelve_get_font_url() To get the Google Font stylesheet URL.
 166   *
 167   * @since Twenty Twelve 1.2
 168   *
 169   * @param string $mce_css CSS path to load in TinyMCE.
 170   * @return string Filtered CSS path.
 171   */
 172  function twentytwelve_mce_css( $mce_css ) {
 173      $font_url = twentytwelve_get_font_url();
 174  
 175      if ( empty( $font_url ) )
 176          return $mce_css;
 177  
 178      if ( ! empty( $mce_css ) )
 179          $mce_css .= ',';
 180  
 181      $mce_css .= esc_url_raw( str_replace( ',', '%2C', $font_url ) );
 182  
 183      return $mce_css;
 184  }
 185  add_filter( 'mce_css', 'twentytwelve_mce_css' );
 186  
 187  /**
 188   * Filter the page title.
 189   *
 190   * Creates a nicely formatted and more specific title element text
 191   * for output in head of document, based on current view.
 192   *
 193   * @since Twenty Twelve 1.0
 194   *
 195   * @param string $title Default title text for current view.
 196   * @param string $sep Optional separator.
 197   * @return string Filtered title.
 198   */
 199  function twentytwelve_wp_title( $title, $sep ) {
 200      global $paged, $page;
 201  
 202      if ( is_feed() )
 203          return $title;
 204  
 205      // Add the site name.
 206      $title .= get_bloginfo( 'name' );
 207  
 208      // Add the site description for the home/front page.
 209      $site_description = get_bloginfo( 'description', 'display' );
 210      if ( $site_description && ( is_home() || is_front_page() ) )
 211          $title = "$title $sep $site_description";
 212  
 213      // Add a page number if necessary.
 214      if ( $paged >= 2 || $page >= 2 )
 215          $title = "$title $sep " . sprintf( __( 'Page %s', 'twentytwelve' ), max( $paged, $page ) );
 216  
 217      return $title;
 218  }
 219  add_filter( 'wp_title', 'twentytwelve_wp_title', 10, 2 );
 220  
 221  /**
 222   * Filter the page menu arguments.
 223   *
 224   * Makes our wp_nav_menu() fallback -- wp_page_menu() -- show a home link.
 225   *
 226   * @since Twenty Twelve 1.0
 227   */
 228  function twentytwelve_page_menu_args( $args ) {
 229      if ( ! isset( $args['show_home'] ) )
 230          $args['show_home'] = true;
 231      return $args;
 232  }
 233  add_filter( 'wp_page_menu_args', 'twentytwelve_page_menu_args' );
 234  
 235  /**
 236   * Register sidebars.
 237   *
 238   * Registers our main widget area and the front page widget areas.
 239   *
 240   * @since Twenty Twelve 1.0
 241   */
 242  function twentytwelve_widgets_init() {
 243      register_sidebar( array(
 244          'name' => __( 'Main Sidebar', 'twentytwelve' ),
 245          'id' => 'sidebar-1',
 246          'description' => __( 'Appears on posts and pages except the optional Front Page template, which has its own widgets', 'twentytwelve' ),
 247          'before_widget' => '<aside id="%1$s" class="widget %2$s">',
 248          'after_widget' => '</aside>',
 249          'before_title' => '<h3 class="widget-title">',
 250          'after_title' => '</h3>',
 251      ) );
 252  
 253      register_sidebar( array(
 254          'name' => __( 'First Front Page Widget Area', 'twentytwelve' ),
 255          'id' => 'sidebar-2',
 256          'description' => __( 'Appears when using the optional Front Page template with a page set as Static Front Page', 'twentytwelve' ),
 257          'before_widget' => '<aside id="%1$s" class="widget %2$s">',
 258          'after_widget' => '</aside>',
 259          'before_title' => '<h3 class="widget-title">',
 260          'after_title' => '</h3>',
 261      ) );
 262  
 263      register_sidebar( array(
 264          'name' => __( 'Second Front Page Widget Area', 'twentytwelve' ),
 265          'id' => 'sidebar-3',
 266          'description' => __( 'Appears when using the optional Front Page template with a page set as Static Front Page', 'twentytwelve' ),
 267          'before_widget' => '<aside id="%1$s" class="widget %2$s">',
 268          'after_widget' => '</aside>',
 269          'before_title' => '<h3 class="widget-title">',
 270          'after_title' => '</h3>',
 271      ) );
 272  }
 273  add_action( 'widgets_init', 'twentytwelve_widgets_init' );
 274  
 275  if ( ! function_exists( 'twentytwelve_content_nav' ) ) :
 276  /**
 277   * Displays navigation to next/previous pages when applicable.
 278   *
 279   * @since Twenty Twelve 1.0
 280   */
 281  function twentytwelve_content_nav( $html_id ) {
 282      global $wp_query;
 283  
 284      $html_id = esc_attr( $html_id );
 285  
 286      if ( $wp_query->max_num_pages > 1 ) : ?>
 287          <nav id="<?php echo $html_id; ?>" class="navigation" role="navigation">
 288              <h3 class="assistive-text"><?php _e( 'Post navigation', 'twentytwelve' ); ?></h3>
 289              <div class="nav-previous"><?php next_posts_link( __( '<span class="meta-nav">&larr;</span> Older posts', 'twentytwelve' ) ); ?></div>
 290              <div class="nav-next"><?php previous_posts_link( __( 'Newer posts <span class="meta-nav">&rarr;</span>', 'twentytwelve' ) ); ?></div>
 291          </nav><!-- #<?php echo $html_id; ?> .navigation -->
 292      <?php endif;
 293  }
 294  endif;
 295  
 296  if ( ! function_exists( 'twentytwelve_comment' ) ) :
 297  /**
 298   * Template for comments and pingbacks.
 299   *
 300   * To override this walker in a child theme without modifying the comments template
 301   * simply create your own twentytwelve_comment(), and that function will be used instead.
 302   *
 303   * Used as a callback by wp_list_comments() for displaying the comments.
 304   *
 305   * @since Twenty Twelve 1.0
 306   *
 307   * @return void
 308   */
 309  function twentytwelve_comment( $comment, $args, $depth ) {
 310      $GLOBALS['comment'] = $comment;
 311      switch ( $comment->comment_type ) :
 312          case 'pingback' :
 313          case 'trackback' :
 314          // Display trackbacks differently than normal comments.
 315      ?>
 316      <li <?php comment_class(); ?> id="comment-<?php comment_ID(); ?>">
 317          <p><?php _e( 'Pingback:', 'twentytwelve' ); ?> <?php comment_author_link(); ?> <?php edit_comment_link( __( '(Edit)', 'twentytwelve' ), '<span class="edit-link">', '</span>' ); ?></p>
 318      <?php
 319              break;
 320          default :
 321          // Proceed with normal comments.
 322          global $post;
 323      ?>
 324      <li <?php comment_class(); ?> id="li-comment-<?php comment_ID(); ?>">
 325          <article id="comment-<?php comment_ID(); ?>" class="comment">
 326              <header class="comment-meta comment-author vcard">
 327                  <?php
 328                      echo get_avatar( $comment, 44 );
 329                      printf( '<cite><b class="fn">%1$s</b> %2$s</cite>',
 330                          get_comment_author_link(),
 331                          // If current post author is also comment author, make it known visually.
 332                          ( $comment->user_id === $post->post_author ) ? '<span>' . __( 'Post author', 'twentytwelve' ) . '</span>' : ''
 333                      );
 334                      printf( '<a href="%1$s"><time datetime="%2$s">%3$s</time></a>',
 335                          esc_url( get_comment_link( $comment->comment_ID ) ),
 336                          get_comment_time( 'c' ),
 337                          /* translators: 1: date, 2: time */
 338                          sprintf( __( '%1$s at %2$s', 'twentytwelve' ), get_comment_date(), get_comment_time() )
 339                      );
 340                  ?>
 341              </header><!-- .comment-meta -->
 342  
 343              <?php if ( '0' == $comment->comment_approved ) : ?>
 344                  <p class="comment-awaiting-moderation"><?php _e( 'Your comment is awaiting moderation.', 'twentytwelve' ); ?></p>
 345              <?php endif; ?>
 346  
 347              <section class="comment-content comment">
 348                  <?php comment_text(); ?>
 349                  <?php edit_comment_link( __( 'Edit', 'twentytwelve' ), '<p class="edit-link">', '</p>' ); ?>
 350              </section><!-- .comment-content -->
 351  
 352              <div class="reply">
 353                  <?php comment_reply_link( array_merge( $args, array( 'reply_text' => __( 'Reply', 'twentytwelve' ), 'after' => ' <span>&darr;</span>', 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?>
 354              </div><!-- .reply -->
 355          </article><!-- #comment-## -->
 356      <?php
 357          break;
 358      endswitch; // end comment_type check
 359  }
 360  endif;
 361  
 362  if ( ! function_exists( 'twentytwelve_entry_meta' ) ) :
 363  /**
 364   * Set up post entry meta.
 365   *
 366   * Prints HTML with meta information for current post: categories, tags, permalink, author, and date.
 367   *
 368   * Create your own twentytwelve_entry_meta() to override in a child theme.
 369   *
 370   * @since Twenty Twelve 1.0
 371   *
 372   * @return void
 373   */
 374  function twentytwelve_entry_meta() {
 375      // Translators: used between list items, there is a space after the comma.
 376      $categories_list = get_the_category_list( __( ', ', 'twentytwelve' ) );
 377  
 378      // Translators: used between list items, there is a space after the comma.
 379      $tag_list = get_the_tag_list( '', __( ', ', 'twentytwelve' ) );
 380  
 381      $date = sprintf( '<a href="%1$s" title="%2$s" rel="bookmark"><time class="entry-date" datetime="%3$s">%4$s</time></a>',
 382          esc_url( get_permalink() ),
 383          esc_attr( get_the_time() ),
 384          esc_attr( get_the_date( 'c' ) ),
 385          esc_html( get_the_date() )
 386      );
 387  
 388      $author = sprintf( '<span class="author vcard"><a class="url fn n" href="%1$s" title="%2$s" rel="author">%3$s</a></span>',
 389          esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ),
 390          esc_attr( sprintf( __( 'View all posts by %s', 'twentytwelve' ), get_the_author() ) ),
 391          get_the_author()
 392      );
 393  
 394      // Translators: 1 is category, 2 is tag, 3 is the date and 4 is the author's name.
 395      if ( $tag_list ) {
 396          $utility_text = __( 'This entry was posted in %1$s and tagged %2$s on %3$s<span class="by-author"> by %4$s</span>.', 'twentytwelve' );
 397      } elseif ( $categories_list ) {
 398          $utility_text = __( 'This entry was posted in %1$s on %3$s<span class="by-author"> by %4$s</span>.', 'twentytwelve' );
 399      } else {
 400          $utility_text = __( 'This entry was posted on %3$s<span class="by-author"> by %4$s</span>.', 'twentytwelve' );
 401      }
 402  
 403      printf(
 404          $utility_text,
 405          $categories_list,
 406          $tag_list,
 407          $date,
 408          $author
 409      );
 410  }
 411  endif;
 412  
 413  /**
 414   * Extend the default WordPress body classes.
 415   *
 416   * Extends the default WordPress body class to denote:
 417   * 1. Using a full-width layout, when no active widgets in the sidebar
 418   *    or full-width template.
 419   * 2. Front Page template: thumbnail in use and number of sidebars for
 420   *    widget areas.
 421   * 3. White or empty background color to change the layout and spacing.
 422   * 4. Custom fonts enabled.
 423   * 5. Single or multiple authors.
 424   *
 425   * @since Twenty Twelve 1.0
 426   *
 427   * @param array $classes Existing class values.
 428   * @return array Filtered class values.
 429   */
 430  function twentytwelve_body_class( $classes ) {
 431      $background_color = get_background_color();
 432      $background_image = get_background_image();
 433  
 434      if ( ! is_active_sidebar( 'sidebar-1' ) || is_page_template( 'page-templates/full-width.php' ) )
 435          $classes[] = 'full-width';
 436  
 437      if ( is_page_template( 'page-templates/front-page.php' ) ) {
 438          $classes[] = 'template-front-page';
 439          if ( has_post_thumbnail() )
 440              $classes[] = 'has-post-thumbnail';
 441          if ( is_active_sidebar( 'sidebar-2' ) && is_active_sidebar( 'sidebar-3' ) )
 442              $classes[] = 'two-sidebars';
 443      }
 444  
 445      if ( empty( $background_image ) ) {
 446          if ( empty( $background_color ) )
 447              $classes[] = 'custom-background-empty';
 448          elseif ( in_array( $background_color, array( 'fff', 'ffffff' ) ) )
 449              $classes[] = 'custom-background-white';
 450      }
 451  
 452      // Enable custom font class only if the font CSS is queued to load.
 453      if ( wp_style_is( 'twentytwelve-fonts', 'queue' ) )
 454          $classes[] = 'custom-font-enabled';
 455  
 456      if ( ! is_multi_author() )
 457          $classes[] = 'single-author';
 458  
 459      return $classes;
 460  }
 461  add_filter( 'body_class', 'twentytwelve_body_class' );
 462  
 463  /**
 464   * Adjust content width in certain contexts.
 465   *
 466   * Adjusts content_width value for full-width and single image attachment
 467   * templates, and when there are no active widgets in the sidebar.
 468   *
 469   * @since Twenty Twelve 1.0
 470   *
 471   * @return void
 472   */
 473  function twentytwelve_content_width() {
 474      if ( is_page_template( 'page-templates/full-width.php' ) || is_attachment() || ! is_active_sidebar( 'sidebar-1' ) ) {
 475          global $content_width;
 476          $content_width = 960;
 477      }
 478  }
 479  add_action( 'template_redirect', 'twentytwelve_content_width' );
 480  
 481  /**
 482   * Register postMessage support.
 483   *
 484   * Add postMessage support for site title and description for the Customizer.
 485   *
 486   * @since Twenty Twelve 1.0
 487   *
 488   * @param WP_Customize_Manager $wp_customize Customizer object.
 489   * @return void
 490   */
 491  function twentytwelve_customize_register( $wp_customize ) {
 492      $wp_customize->get_setting( 'blogname' )->transport         = 'postMessage';
 493      $wp_customize->get_setting( 'blogdescription' )->transport  = 'postMessage';
 494      $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage';
 495  }
 496  add_action( 'customize_register', 'twentytwelve_customize_register' );
 497  
 498  /**
 499   * Enqueue Javascript postMessage handlers for the Customizer.
 500   *
 501   * Binds JS handlers to make the Customizer preview reload changes asynchronously.
 502   *
 503   * @since Twenty Twelve 1.0
 504   *
 505   * @return void
 506   */
 507  function twentytwelve_customize_preview_js() {
 508      wp_enqueue_script( 'twentytwelve-customizer', get_template_directory_uri() . '/js/theme-customizer.js', array( 'customize-preview' ), '20130301', true );
 509  }
 510  add_action( 'customize_preview_init', 'twentytwelve_customize_preview_js' );


Generated: Tue Mar 25 01:41:18 2014 WordPress honlapkészítés: online1.hu