added a ton of goodies - this is initial release 1.0.0

This commit is contained in:
Mickey Kay
2014-01-16 13:40:07 -08:00
parent 5fe327f54c
commit bbc4641551
26 changed files with 7516 additions and 2138 deletions
+310
View File
@@ -0,0 +1,310 @@
<?php
/**
* Trestle theme functions (front-end)
*
* Note: all admin theme functionality is located at: trestle/lib/admin/admin.php
*
* @since 1.0.0
*
* @package Trestle
*/
/*===========================================
* Header Styles & Scripts
===========================================*/
/**
* Loads theme scripts and styles.
*
* @since 1.0.0
*/
function trestle_header_actions() {
// Google fonts
wp_enqueue_style( 'trestle-google-fonts', '//fonts.googleapis.com/css?family=Lato:300,700,900' );
// Custom jQuery
wp_enqueue_script( 'trestle-jquery', get_stylesheet_directory_uri() . '/lib/js/theme-jquery.js', array( 'jquery' ), '1.0.0', true );
}
/*===========================================
* Auto & Mobile Navigation
===========================================*/
/**
* Performs modifications to the primary navigation menu
*
* @since 1.0.0
*
* @see trestle_add_mobile_nav()
* @see trestle_auto_nav_items()
* @see trestle_custom_nav_extras()
* @see trestle_nav_placeholder()
*/
function trestle_nav_modifications() {
// Add mobile nav button
add_action( 'genesis_after_header', 'trestle_add_mobile_nav', 0 );
// Auto-generate nav if Genesis theme setting is checked
if ( 1 == genesis_get_option( 'trestle_auto_nav' ) )
add_filter( 'wp_nav_menu_items', 'trestle_auto_nav_items', 9, 2 );
// Do custom nav extras
if ( 1 == genesis_get_option( 'trestle_custom_nav_extras' ) ) {
// Remove default nav extras
remove_filter( 'wp_nav_menu_items', 'genesis_nav_right' );
// Add custom nav extras
add_filter( 'wp_nav_menu_items', 'trestle_custom_nav_extras', 10, 2 );
}
// Create placeholder navigation menu object if needed
trestle_nav_placeholder();
}
/**
* Adds button to open primary mobile navigation menu.
*
* @since 1.0.0
*/
function trestle_add_mobile_nav() {
// Only add the button if there is a primary menu
if ( 1 == genesis_get_option( 'trestle_auto_nav' ) || has_nav_menu( 'primary' ) )
echo '<a id="menu-button" class="button" href="javascript: void(0)">' . do_shortcode( genesis_get_option( 'trestle_nav_button_text' ) ) . '</a>';
}
/**
* Auto-generates list of pages for use in the primary navigation menu.
*
* @since 1.0.0
*
* @param string $nav_items <li> list of navigation menu items.
* @param stdClass $menu_args Arguments for the menu.
* @return string <li> list of (modified) navigation menu items.
*/
function trestle_auto_nav_items( $nav_items, stdClass $menu_args ) {
if ( 'primary' == $menu_args->theme_location ) {
$args = array(
'echo' => false,
'show_home' => genesis_get_option( 'trestle_include_home_link' ),
'menu_class' => 'auto-menu'
);
$ul_class = 'menu genesis-nav-menu menu-primary';
$menu_args = new stdClass();
$menu_args->theme_location = 'primary';
$nav_items = wp_page_menu( $args );
// Remove opening <div class="auto-nav"><ul>
$nav_items = preg_replace( '/<div\s*.*auto-menu[^>]*>\s*<ul>/', '', $nav_items );
// Remove closing </ul></div>
$nav_items = preg_replace( '/<\/ul>\s*<\/div>/', '', $nav_items );
}
return $nav_items;
}
/**
* Replaces standard Genesis navigation extras with custom input navigation extras.
*
* @since 1.0.0
*
* @param string $nav_items <li> list of menu items.
* @param stdClass $menu_args Arguments for the menu.
* @return string <li> list of menu items with custom navigation extras <li> appended.
*/
function trestle_custom_nav_extras( $nav_items, stdClass $menu_args ) {
if ( 'primary' == $menu_args->theme_location ) {
$custom_text = esc_attr( genesis_get_option( 'trestle_custom_nav_extras_text' ) );
return $nav_items . '<li class="right custom">' . do_shortcode( genesis_get_option( 'trestle_custom_nav_extras_text' ) ) . '</li>';
}
return $nav_items;
}
/**
* Generates a placeholder navigation menu object.
*
* When using Trestle's auto-generated navigation feature,
* it is necessary to ensure that some nav menu object is
* selected as primary otherwise no navigation will be generated.
*
* @since 1.0.0
*/
function trestle_nav_placeholder() {
// Set title for Trestle placeholder navigation menu
$trestle_nav_title = __( 'Trestle Auto Nav Placeholder', 'trestle' );
// Create placeholder menu for 'primary' spot if auto-nav is selected - this ensures that nav extras can be used even when no custom menu is formally set to primary
if ( 1 == genesis_get_option( 'trestle_auto_nav' ) && ! wp_get_nav_menu_object( $trestle_nav_title ) && ! has_nav_menu( 'primary' ) ) {
// Create placholder menu
wp_create_nav_menu( $trestle_nav_title );
// Assign placeholder menu to 'primary'
$menu_locations = get_theme_mod( 'nav_menu_locations' );
$menu_locations['primary'] = wp_get_nav_menu_object( $trestle_nav_title )->term_id;
set_theme_mod( 'nav_menu_locations', $menu_locations );
}
// Remove placeholder menu if auto-nav is disabled
$menus = get_registered_nav_menus();
if ( 1 != genesis_get_option( 'trestle_auto_nav' ) && wp_get_nav_menu_object( $trestle_nav_title ) && $trestle_nav_title != $menus['primary'] )
wp_delete_nav_menu( $trestle_nav_title );
}
/*===========================================
* Posts & Pages
===========================================*/
/**
* Sets the number of post revisions.
*
* @since 1.0.0
*
* @param int $num Default number of post revisions.
* @return int Number of post revisions specified in Trestle admin panel.
*/
function trestle_update_revisions_number( $num ) {
$trestle_revisions_number = esc_attr( genesis_get_option( 'trestle_revisions_number' ) );
if ( isset( $trestle_revisions_number ) )
return $trestle_revisions_number;
return $num;
}
/**
* Manually controls display of post info/meta for all post types.
*
* @since 1.0.0
*
* @see trestle_set_page_post_type()
* @global object $post The current $post object.
*/
function trestle_post_info_meta() {
if( in_the_loop() && genesis_get_option( 'trestle_manual_post_info_meta' ) ) {
global $post;
// Get post type
$orig_post_type = '';
$post_type = get_post_type( $post->ID );
// Override "page" post type to allow for Post Info & Meta (reset back to page below)
if ( 'page' == $post_type ) {
$orig_post_type = 'page';
set_post_type( $post->ID, 'post' );
}
// Remove all Post Info & Meta
remove_action( 'genesis_entry_header', 'genesis_post_info', 12 );
remove_action( 'genesis_entry_footer', 'genesis_post_meta' );
// Single
if ( is_singular() ) {
$single_info_option = 'trestle_post_info_' . $post_type . '_single';
$single_meta_option = 'trestle_post_meta_' . $post_type . '_single';
// Post Info
if( genesis_get_option( $single_info_option ) )
add_action( 'genesis_entry_header', 'genesis_post_info', 12 );
// Post Meta
if( genesis_get_option( $single_meta_option ) )
add_action( 'genesis_entry_footer', 'genesis_post_meta' );
}
// Archive
if ( ! is_singular() ) {
$archive_info_option = 'trestle_post_info_' . $post_type . '_archive';
$archive_meta_option = 'trestle_post_meta_' . $post_type . '_archive';
// Post Info
if( genesis_get_option( $archive_info_option ) )
add_action( 'genesis_entry_header', 'genesis_post_info', 12 );
// Post Meta
if( genesis_get_option( $archive_meta_option ) )
add_action( 'genesis_entry_footer', 'genesis_post_meta' );
}
// Reset post type back to page if need be
if ( ! empty( $orig_post_type ) && 'page' == $orig_post_type )
add_action( 'genesis_entry_footer', 'trestle_set_page_post_type' );
}
}
/*===========================================
* General Actions & Filters
===========================================*/
/**
* Adds custom classes to the <body> element for styling purposes.
*
* @since 1.0.0
*
* @param array $classes Body classes.
* @return array Updated body classes.
*/
function trestle_body_classes( $classes ) {
// Add 'no-jquery' class to be removed by jQuery if enabled
$classes[] = 'no-jquery';
// Add 'bubble' class
if ( 'bubble' == genesis_get_option( 'trestle_layout' ) )
$classes[] = 'bubble';
// Add link icon classes
if ( genesis_get_option( 'trestle_external_link_icons' ) )
$classes[] = 'external-link-icons';
if ( genesis_get_option( 'trestle_email_link_icons' ) )
$classes[] = 'email-link-icons';
if ( genesis_get_option( 'trestle_pdf_link_icons' ) )
$classes[] = 'pdf-link-icons';
if ( genesis_get_option( 'trestle_doc_link_icons' ) )
$classes[] = 'doc-link-icons';
// Add footer widget number class
if ( genesis_get_option( 'trestle_footer_widgets_number' ) )
$classes[] = 'footer-widgets-number-' . esc_attr( genesis_get_option( 'trestle_footer_widgets_number' ) );
return $classes;
}
/**
* Resets post type back to page once post info / meta functionality is done.
*
* @since 1.0.0
*
* @global object $post The current $post object.
*/
function trestle_set_page_post_type() {
global $post;
set_post_type( $post->ID, 'page' );
}
/**
* Displays custom Trestle "read more" text in place of WordPress default.
*
* @since 1.0.0
*
* @param string $default_text Default "read more" text.
* @return string (Updated) "read more" text.
*/
function trestle_read_more_link( $default_text ) {
// Get Trestle custom "read more" link text
$custom_text = esc_attr( genesis_get_option( 'trestle_read_more_text' ) );
if ( $custom_text )
return '&hellip;&nbsp;<a class="more-link" href="' . get_permalink() . '">' . $custom_text . '</a>';
else
return $default_text;
}
-321
View File
@@ -1,321 +0,0 @@
<?php
/**
* Trestle Theme Functions
* @since 1.0
*/
/*===========================================
* Header styles and scripts
===========================================*/
function trestle_header_actions() {
// Google fonts
wp_enqueue_style( 'google-fonts', '//fonts.googleapis.com/css?family=Lato:300,700,900' );
// Custom jQuery
wp_enqueue_script( 'trestle-jquery', get_stylesheet_directory_uri() . '/lib/js/jquery.js', array( 'jquery' ), '1.0', true );
}
/*===========================================
* Load Required/Suggested Plugins
*
* Utilizes TGM Plugin Activation class:
* https://github.com/thomasgriffin/TGM-Plugin-Activation
===========================================*/
// Fetch & install plugins from wordpress.org
function trestle_register_required_plugins() {
$plugins = array(
// Required plugins
array(
'name' => 'Font Awesome Icons',
'slug' => 'font-awesome',
'required' => true,
),
// Optional plugins
array(
'name' => 'Black Studio TinyMCE Widget',
'slug' => 'black-studio-tinymce-widget',
'required' => true,
),
array(
'name' => 'Events Manager',
'slug' => 'events-manager',
'required' => true,
),
array(
'name' => 'Exclude Pages',
'slug' => 'exclude-pages',
'required' => true,
),
array(
'name' => 'FancyBox for WordPress',
'slug' => 'fancybox-for-wordpress',
'required' => true,
),
array(
'name' => 'Genesis Featured Widget Amplified',
'slug' => 'genesis-featured-widget-amplified',
'required' => true,
),
array(
'name' => 'Genesis Simple Edits',
'slug' => 'genesis-simple-edits',
'required' => true,
),
array(
'name' => 'MapPress Easy Google Maps',
'slug' => 'mappress-google-maps-for-wordpress',
'required' => true,
),
array(
'name' => 'My Page Order',
'slug' => 'my-page-order',
'required' => true,
),
array(
'name' => 'NextGen Gallery',
'slug' => 'nextgen-gallery',
'required' => true,
),
array(
'name' => 'Post Thumbnail Editor',
'slug' => 'post-thumbnail-editor',
'required' => true,
),
array(
'name' => 'Social Media Widget',
'slug' => 'social-media-widget',
'required' => true,
),
array(
'name' => 'Widget Context',
'slug' => 'widget-context',
'required' => true,
),
array(
'name' => 'Respond.js',
'slug' => 'respondjs',
'required' => true,
),
array(
'name' => 'Simple Image Sizes',
'slug' => 'simple-image-sizes',
'required' => true,
),
array(
'name' => 'Simple Section Navigation',
'slug' => 'simple-section-navigation',
'required' => true,
),
array(
'name' => 'Types - Custom Fields and Custom Post Types Management',
'slug' => 'types',
'required' => true,
),
);
// Change this to your theme text domain, used for internationalising strings
$theme_text_domain = 'mightyminnow';
/**
* Array of configuration settings. Amend each line as needed.
* If you want the default strings to be available under your own theme domain,
* leave the strings uncommented.
* Some of the strings are added into a sprintf, so see the comments at the
* end of each line for what each argument will be.
*/
$config = array(
'domain' => $theme_text_domain, // Text domain - likely want to be the same as your theme.
'default_path' => '', // Default absolute path to pre-packaged plugins
'parent_menu_slug' => 'themes.php', // Default parent menu slug
'parent_url_slug' => 'themes.php', // Default parent URL slug
'menu' => 'install-required-plugins', // Menu slug
'has_notices' => true, // Show admin notices or not
'is_automatic' => true, // Automatically activate plugins after installation or not
'message' => '', // Message to output right before the plugins table
'strings' => array(
'page_title' => __( 'Install Required Plugins', $theme_text_domain ),
'menu_title' => __( 'Install Plugins', $theme_text_domain ),
'installing' => __( 'Installing Plugin: %s', $theme_text_domain ), // %1$s = plugin name
'oops' => __( 'Something went wrong with the plugin API.', $theme_text_domain ),
'notice_can_install_required' => _n_noop( 'This theme requires the following plugin: %1$s.', 'This theme requires the following plugins: %1$s.' ), // %1$s = plugin name(s)
'notice_can_install_recommended' => _n_noop( 'This theme recommends the following plugin: %1$s.', 'This theme recommends the following plugins: %1$s.' ), // %1$s = plugin name(s)
'notice_cannot_install' => _n_noop( 'Sorry, but you do not have the correct permissions to install the %s plugin. Contact the administrator of this site for help on getting the plugin installed.', 'Sorry, but you do not have the correct permissions to install the %s plugins. Contact the administrator of this site for help on getting the plugins installed.' ), // %1$s = plugin name(s)
'notice_can_activate_required' => _n_noop( 'The following required plugin is currently inactive: %1$s.', 'The following required plugins are currently inactive: %1$s.' ), // %1$s = plugin name(s)
'notice_can_activate_recommended' => _n_noop( 'The following recommended plugin is currently inactive: %1$s.', 'The following recommended plugins are currently inactive: %1$s.' ), // %1$s = plugin name(s)
'notice_cannot_activate' => _n_noop( 'Sorry, but you do not have the correct permissions to activate the %s plugin. Contact the administrator of this site for help on getting the plugin activated.', 'Sorry, but you do not have the correct permissions to activate the %s plugins. Contact the administrator of this site for help on getting the plugins activated.' ), // %1$s = plugin name(s)
'notice_ask_to_update' => _n_noop( 'The following plugin needs to be updated to its latest version to ensure maximum compatibility with this theme: %1$s.', 'The following plugins need to be updated to their latest version to ensure maximum compatibility with this theme: %1$s.' ), // %1$s = plugin name(s)
'notice_cannot_update' => _n_noop( 'Sorry, but you do not have the correct permissions to update the %s plugin. Contact the administrator of this site for help on getting the plugin updated.', 'Sorry, but you do not have the correct permissions to update the %s plugins. Contact the administrator of this site for help on getting the plugins updated.' ), // %1$s = plugin name(s)
'install_link' => _n_noop( 'Begin installing plugin', 'Begin installing plugins' ),
'activate_link' => _n_noop( 'Activate installed plugin', 'Activate installed plugins' ),
'return' => __( 'Return to Required Plugins Installer', $theme_text_domain ),
'plugin_activated' => __( 'Plugin activated successfully.', $theme_text_domain ),
'complete' => __( 'All plugins installed and activated successfully. %s', $theme_text_domain ), // %1$s = dashboard link
'nag_type' => 'updated' // Determines admin notice type - can only be 'updated' or 'error'
)
);
tgmpa( $plugins, $config );
}
/*===========================================
* Auto & Mobile Navigation
===========================================*/
function trestle_nav_modifications() {
// Add mobile nav button
add_action( 'genesis_after_header', 'trestle_add_mobile_nav', 0 );
// Auto-generate nav if Genesis theme setting is checked
if ( 1 == genesis_get_option( 'trestle_auto_nav' ) ) {
// Remove existing nav
remove_action( 'genesis_after_header', 'genesis_do_nav' );
// Replace existing nav with auto-generated nav
function trestle_auto_nav() {
$args = array(
'echo' => false,
'show_home' => genesis_get_option( 'trestle_include_home_link' ),
'menu_class' => 'auto-menu'
);
$ul_class = 'menu genesis-nav-menu menu-primary';
$menu_args = new stdClass();
$menu_args->theme_location = 'primary';
$nav_items = wp_page_menu( $args );
// Remove opening <div class="auto-nav"><ul>
$nav_items = preg_replace( '/<div\s*.*auto-menu[^>]*>\s*<ul>/', '', $nav_items );
// Remove closing </ul></div>
$nav_items = preg_replace( '/<\/ul>\s*<\/div>/', '', $nav_items );
// Add Genesis nav extras
$nav_items = genesis_nav_right( $nav_items, $menu_args );
$nav = '<ul class="' . $ul_class . '">' . $nav_items . '</ul>';
$nav_markup_open = genesis_markup( array(
'html5' => '<nav %s>',
'xhtml' => '<div id="nav">',
'context' => 'nav-primary',
'echo' => false,
) );
$nav_markup_open .= genesis_structural_wrap( 'menu-primary', 'open', 0 );
$nav_markup_close = genesis_structural_wrap( 'menu-primary', 'close', 0 );
$nav_markup_close .= genesis_html5() ? '</nav>' : '</div>';
// Args to pass to navigation right/extras function
$args = new stdClass();
$args->theme_location = 'primary';
echo apply_filters ( 'trestle_do_nav', $nav_markup_open . $nav . $nav_markup_close, $args );
}
add_action( 'genesis_after_header', 'trestle_auto_nav', 0 );
}
}
// Add mobile menu button
function trestle_add_mobile_nav() {
// Only add the button if there is a primary menu
if ( 1 == genesis_get_option( 'trestle_auto_nav' ) || has_nav_menu( 'primary' ) ) {
echo '<a id="menu-button" class="button" href="javascript: void(0)">' . do_shortcode( genesis_get_option('trestle_nav_button_text') ) . '</a>';
}
}
// Generate / remove Trestle Auto Nav placeholder menu as needed (necessary to enable Nav Extras)
function trestle_nav_placeholder() {
$trestle_nav_title = __( 'Trestle Auto Nav Placeholder', 'trestle' );
// Create placeholder menu for 'primary' spot if auto-nav is selected - this ensures that nav extras can be used even when no custom menu is formally set to primary
if ( 1 == genesis_get_option( 'trestle_auto_nav' ) && !wp_get_nav_menu_object( $trestle_nav_title ) && !has_nav_menu( 'primary' ) ) {
// Create placholder menu
wp_create_nav_menu( $trestle_nav_title );
// Assign placeholder menu to 'primary'
$menu_locations = get_theme_mod('nav_menu_locations');
$menu_locations['primary'] = wp_get_nav_menu_object( $trestle_nav_title )->term_id;
set_theme_mod( 'nav_menu_locations', $menu_locations );
}
// Remove placeholder menu if auto-nav is disabled
$menus = get_registered_nav_menus();
if ( 1 != genesis_get_option( 'trestle_auto_nav' ) && wp_get_nav_menu_object( $trestle_nav_title ) && $trestle_nav_title != $menus['primary'] )
wp_delete_nav_menu( $trestle_nav_title );
}
/*===========================================
* Actions & Filters
===========================================*/
// Add body classes
function trestle_body_classes( $classes ) {
// Add 'no-jquery' class to be removed by jQuery if enabled
$classes[] = 'no-jquery';
// Add 'bubble' class
if ( 'bubble' == genesis_get_option( 'trestle_layout' ) )
$classes[] = 'bubble';
// Add 'link-icons' class
if ( genesis_get_option('trestle_link_icons') )
$classes[] = 'link-icons';
return $classes;
}
/*===========================================
* Footer
===========================================*/
function trestle_custom_footer($output) {
return $output . '<p class="mm">[footer_childtheme_link before=""] by <a href="http://mightyminnow.com">MIGHTYminnow</a></p>';
}