delarge
2/23/2015 - 2:01 PM

Useful functions for Wordpress

Useful functions for Wordpress

<?php

//require( get_template_directory() . '/_/inc/_custom-post-types.php' );

	// Load jQuery
	if ( !function_exists( 'core_mods' ) ) {
		function core_mods() {
			if ( !is_admin() ) {
				wp_deregister_script( 'jquery' );
				wp_register_script( 'jquery', ( "//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" ), false);
				wp_enqueue_script( 'jquery' );
			}
		}
		add_action( 'wp_enqueue_scripts', 'core_mods' );
	}



// Clean up the <head>, if you so desire.
		function removeHeadLinks() {
	   	remove_action('wp_head', 'rsd_link');
	    	remove_action('wp_head', 'wlwmanifest_link');
	    }
	    add_action('init', 'removeHeadLinks');


	// Navigation - update coming from twentythirteen
	function post_navigation() {
		echo '<div class="navigation">';
		echo '	<div class="next-posts">'.get_next_posts_link('&laquo; Older Entries').'</div>';
		echo '	<div class="prev-posts">'.get_previous_posts_link('Newer Entries &raquo;').'</div>';
		echo '</div>';
	}

	// Posted On
	/*
function posted_on() {
		printf( __( '<span class="sep">Posted </span><a href="%1$s" title="%2$s" rel="bookmark"><time class="entry-date" datetime="%3$s" pubdate>%4$s</time></a> by <span class="byline author vcard">%5$s</span>', '' ),
			esc_url( get_permalink() ),
			esc_attr( get_the_time() ),
			esc_attr( get_the_date( 'c' ) ),
			esc_html( get_the_date() ),
			esc_attr( get_the_author() )
		);
	}
*/

function posted_on(){
		?>

		<?php the_time('jS F, Y'); ?>

		<?php
	}

// Custom excerpt length + format
function new_excerpt_more( $more ) {
	return '&hellip;';
/*
	if(is_front_page()){
	return '&nbsp;<span class="genericon genericon-next"></span>';
	} else {
	return '&hellip;';
	}
*/
}

add_filter('excerpt_more', 'new_excerpt_more');


function custom_excerpt_length( $length ) {
	return 25; // words
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );




// easy get slug in the loop - or just use $post->post_name
// http://www.tcbarrett.com/2011/09/wordpress-the_slug-get-post-slug-function/
function the_slug($echo=true){
  $slug = basename(get_permalink());
  do_action('before_slug', $slug);
  $slug = apply_filters('slug_filter', $slug);
  if( $echo ) echo $slug;
  do_action('after_slug', $slug);
  return $slug;
}

// disable single post views on certain CPT - useful if using CPTs to build a single page
// http://wordpress.stackexchange.com/questions/128636/how-to-disable-the-single-view-for-a-custom-post-type

/*
add_action( 'template_redirect', 'wpse_128636_redirect_post' );

function wpse_128636_redirect_post() {
  $queried_post_type = get_query_var('post_type');
  if ( is_single() && 'sample_post_type' ==  $queried_post_type ) {
    wp_redirect( home_url(), 301 );
    exit;
  }
}
*/

// Using Metronet reorder plugin? Specify posy types to use it on here:

add_filter('metronet_reorder_post_types', 'set_reorder');
function set_reorder($post_types){
	$post_types = array('product');
	return $post_types;
}


// Automatically link Twitter names in content
function content_twitter_mention($content) {
	return preg_replace('/([^a-zA-Z0-9-_&])@([0-9a-zA-Z_]+)/', "$1<a href=\"http://twitter.com/$2\" target=\"_blank\" rel=\"nofollow\">@$2</a>", $content);
}

add_filter('the_content', 'content_twitter_mention');
add_filter('comment_text', 'content_twitter_mention');



// =================================================================
// ====== Custom admin + menus
// =================================================================


/* Theme support for menus */
add_theme_support( 'menus' );

// Remove width and height attributes from images via WYSIWYG/admin
add_filter( 'post_thumbnail_html', 'remove_width_attribute', 10 );
add_filter( 'image_send_to_editor', 'remove_width_attribute', 10 );

function remove_width_attribute( $html ) {
   $html = preg_replace( '/(width|height)="\d*"\s/', "", $html );
   return $html;
}


// Image link default = none
update_option('image_default_link_type','none');


// logo link
function wpc_url_login(){
     return "/";
}
add_filter('login_headerurl', 'wpc_url_login');


// logo
// add own css file
function login_css() {
     wp_enqueue_style( 'login_css', get_template_directory_uri() . '/_/css/login.css' );
}
add_action('login_head', 'login_css');


//change the menu items label Posts to News
function change_post_menu_label() {
    global $menu;
    global $submenu;
    $menu[5][0] = 'News';
    $submenu['edit.php'][5][0] = 'News';
    $submenu['edit.php'][10][0] = 'Add News Item';
    $submenu['edit.php'][15][0] = 'News Category'; // Change name for categories
    //$submenu['edit.php'][16][0] = 'Labels'; // Change name for tags
    echo '';
}

// ================================================

// function change_post_object_label() {
//         global $wp_post_types;
//         $labels = &$wp_post_types['post']->labels;
//         $labels->name = 'News';
//         $labels->singular_name = 'News';
//         $labels->add_new = 'Add News Item';
//         $labels->add_new_item = 'Add News Item';
//         $labels->edit_item = 'Edit News Item';
//         $labels->new_item = 'News Item';
//         $labels->view_item = 'View News Item';
//         $labels->search_items = 'Search News';
//         $labels->not_found = 'Nothing found';
//         $labels->not_found_in_trash = 'Nothing found in Trash';
//     }
//     add_action( 'init', 'change_post_object_label' );
    add_action( 'admin_menu', 'change_post_menu_label' );


// ================================================



// ================================================

function remove_footer_admin () {
echo '<p>EMMA GREENHILL</p>';
}
add_filter('admin_footer_text', 'remove_footer_admin');


// ================================================

function annointed_admin_bar_remove() {
        global $wp_admin_bar;
        $wp_admin_bar->remove_menu('wp-logo');
}

add_action('wp_before_admin_bar_render', 'annointed_admin_bar_remove', 0);

// ================================================


// Remove all those widgets
add_action('wp_dashboard_setup', 'wpc_dashboard_widgets');
function wpc_dashboard_widgets() {
     global $wp_meta_boxes;
     // Today widget
     unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);
     // Last comments
     unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments']);
     // Incoming links
     unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);
     // Plugins
     unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);
     unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_quick_press']);
     unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
     unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);
}


// Add a widget in WordPress Dashboard
function add_dashboard_widget_function() {
	// Entering the text between the quotes
	echo "<p>Custom footer text</p>";
}



function wpc_add_dashboard_widgets() {
	wp_add_dashboard_widget('wp_dashboard_widget', 'Admin', 'add_dashboard_widget_function');
}
add_action('wp_dashboard_setup', 'wpc_add_dashboard_widgets' );

// ================================================


// CHANGE EDITOR PERMISSIONS
// Get the the role object
$role = get_role( 'editor' );
// allow menus
$role->add_cap( 'edit_theme_options' );
// allow Gravity Forms
$role->add_cap( 'gravityforms_edit_forms' );
$role->add_cap( 'gravityforms_delete_forms' );
$role->add_cap( 'gravityforms_create_form' );
$role->add_cap( 'gravityforms_view_entries' );
$role->add_cap( 'gravityforms_edit_entries' );
$role->add_cap( 'gravityforms_delete_entries' );
$role->add_cap( 'gravityforms_view_settings' );
$role->add_cap( 'gravityforms_edit_settings' );
$role->add_cap( 'gravityforms_export_entries' );
$role->add_cap( 'gravityforms_view_entry_notes' );
$role->add_cap( 'gravityforms_edit_entry_notes' );




// ================================================
// Move / remove / add admin menu items
// ================================================
/**
* Hide ACF menu item from the admin menu
*/

function remove_acf_menu()
{

		// provide a list of usernames who can edit custom field definitions here
		$admins = array(
				'admin',
				'username-here'
		);

		// get the current user
		$current_user = wp_get_current_user();

		// match and remove if needed
		if( !in_array( $current_user->user_login, $admins ) )
		{
				remove_menu_page('edit.php?post_type=acf');
		}

}

add_action( 'admin_menu', 'remove_acf_menu' );


// ================================================

function remove_menus () {

// leave the itmes in that you want removed

global $menu;
	$restricted = array( __('Appearance'),__('Links'), __('News'), __('Comments'));
	end ($menu);
	while (prev($menu)){
		$value = explode(' ',$menu[key($menu)][0]);
		if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);}
	}
}

add_action('admin_menu', 'remove_menus');






function new_nav_menu () {
		global $menu;
		$menu[99] = array('', 'read', 'separator', '', 'menu-top menu-nav');
		add_menu_page(__('Navigation', 'nav-menus'), __('Navigation', 'nav-menus'), 'edit_themes', 'nav-menus.php', '', 'dashicons-menu', 20);
}
add_action('admin_menu', 'new_nav_menu');

/* Menu positions */
/*
5 - below Posts
10 - below Posts
15 - below Links
20 - below Pages
25 - below Comments
60 - below first separator
65 - below Plugins
70 - below Users
75 - below Tools
80 - below Settings
100 - below second separator
*/


// function custom_menu_order($menu_ord) {
// if (!$menu_ord) return true;
//
// return array(
// 		'index.php', // Dashboard
// 		'edit.php?post_type=product', // Posts
// 		'edit.php?post_type=stockist', // Posts
// 		'edit.php?post_type=press', // Posts
// 		'edit.php', // Posts
// 		'upload.php', // Media
// 		'edit.php?post_type=page', // Pages
// 		'edit-comments.php', // Comments
// 		'link-manager.php', // Links
// 		'separator1', // First separator
// 		'nav-menus.php', // Navigation
// 		'separator2', // Second separator
// 		'themes.php', // Appearance
// 		'plugins.php', // Plugins
// 		'users.php', // Users
// 		'tools.php', // Tools
// 		'options-general.php', // Settings
// 		'separator-last', // Last separator
// );
// }
// add_filter('custom_menu_order', 'custom_menu_order'); // Activate custom_menu_order
// add_filter('menu_order', 'custom_menu_order');



// Set default admin colour
/*
add_filter( 'get_user_option_admin_color', function( $color_scheme ) {

	global $_wp_admin_css_colors;

	if ( 'classic' == $color_scheme || 'fresh' == $color_scheme ) {
		$color_scheme = 'midnight';
	}

	return $color_scheme;

}, 5 );
*/

// Force colour schem for all
/*
add_filter('get_user_option_admin_color', 'change_admin_color');
function change_admin_color($result) {
    return 'ectoplasm';
}
*/
// ================================================

// remove Wdigets menu in admin
// http://codex.wordpress.org/Function_Reference/remove_submenu_page#Examples
add_action( 'admin_menu', 'adjust_the_wp_menu', 999 );
function adjust_the_wp_menu() {
  $page = remove_submenu_page( 'themes.php', 'widgets.php' );
  // $page[0] is the menu title
  // $page[1] is the minimum level or capability required
  // $page[2] is the URL to the item's file
}

// Tidy up admin bar
function remove_admin_bar_links() {
		global $wp_admin_bar;
		$wp_admin_bar->remove_menu('wp-logo');          // Remove the WordPress logo
		$wp_admin_bar->remove_menu('about');            // Remove the about WordPress link
		$wp_admin_bar->remove_menu('wporg');            // Remove the WordPress.org link
		$wp_admin_bar->remove_menu('documentation');    // Remove the WordPress documentation link
		$wp_admin_bar->remove_menu('support-forums');   // Remove the support forums link
		$wp_admin_bar->remove_menu('feedback');         // Remove the feedback link
		//$wp_admin_bar->remove_menu('site-name');        // Remove the site name menu
		$wp_admin_bar->remove_menu('themes');
		$wp_admin_bar->remove_menu('dashboard');
		$wp_admin_bar->remove_menu('menus');
		$wp_admin_bar->remove_menu('customize');
		$wp_admin_bar->remove_menu('view-site');        // Remove the view site link
		$wp_admin_bar->remove_menu('updates');          // Remove the updates link
		$wp_admin_bar->remove_menu('comments');         // Remove the comments link
		//$wp_admin_bar->remove_menu('new-content');      // Remove the content link
		//$wp_admin_bar->remove_menu('w3tc');             // If you use w3 total cache remove the performance link
		$wp_admin_bar->remove_menu('my-account');       // Remove the user details tab
}
add_action( 'wp_before_admin_bar_render', 'remove_admin_bar_links' );



// =================================================================
// ====== DEVICE DETECTION
// =================================================================


// Device functions
require_once '_/inc/Mobile_Detect.php';
$detect = new Mobile_Detect();
$GLOBALS['device'] = ($detect->isMobile() ? ($detect->isTablet() ? 'desktop' : 'mobile') : 'desktop');
$GLOBALS['device'] = ($detect->isMobile() ? ($detect->isTablet() ? 'tablet' : 'mobile') : 'desktop');

//$GLOBALS['device'] = 'mobile';

if (isset($_GET['fdev'])) $GLOBALS['device'] = $_GET['fdev'];

function get_device() { return $GLOBALS['device'];  }
function the_device() { echo get_device(); }
function is_mobile() { return $GLOBALS['device']=='mobile';}
function is_tablet() { return $GLOBALS['device']=='tablet';}


//
function get_device_image($url_or_id,$device_sizes,$class="") {
    if (is_string($device_sizes)) $device_sizes = deserialize_device_sizes($device_sizes);
    $device = get_device();
    if (!isset($device_sizes[$device])) return;
    return get_image($url_or_id,$device_sizes[$device][0],$device_sizes[$device][1],$device_sizes[$device][2],$class);
}


/**
 * the_device_image($id,array('desktop'=>array(120,130,1),'mobile'=>array(120,130,1),'mobile'=>array(120,130,1)))
 * the_device_image($id,'desktop:120x130c,mobile:120x130c,tablet:120x130')
 */
function the_device_image($url_or_id,$device_sizes,$class="") {
    if (is_string($device_sizes)) $device_sizes = deserialize_device_sizes($device_sizes);
    $device = get_device();
    if (!isset($device_sizes[$device])) return;
    the_image($url_or_id,$device_sizes[$device][0],$device_sizes[$device][1],$device_sizes[$device][2],$class);
}

function deserialize_device_sizes($serialized_sizes) {
    $serialized_sizes = explode(',',$serialized_sizes);
    $device_sizes = array();
    foreach ($serialized_sizes as $size_string) {
        preg_match('/(\w+):(\d+)x(\d+)(c)?/i', $size_string,$matches);
        $name = $matches[1];
        $crop = isset($matches[4]);
        $device_sizes[$name] = array($matches[2],$matches[3],$crop);
    }
    return $device_sizes;
}


// Now add the_device(); to the html class to return desktop | tablet | mobile
// <html class="desktop">

/* =============================================
=============================================
============================================= */

// =================================================================
// ====== Gravity Forms
// =================================================================

/* Custom Gravity forms spinner */

add_filter( 'gform_ajax_spinner_url', 'cwwp_custom_gforms_spinner' );
function cwwp_custom_gforms_spinner( $src ) {
    return 'http://cdnjs.cloudflare.com/ajax/libs/select2/3.2/spinner.gif';

}

/* Remove main/large validation message at top of form */

add_filter("gform_validation_message", "change_message", 10, 2);
function change_message($message, $form){
  return ""; // <-- add message here
}

/* Stop page/anchor jump on submission */
add_filter("gform_confirmation_anchor", create_function("","return false;"));




// =================================================================
// ====== Yoast SEO
// =================================================================

// remove comment
function remove_yoast(){
  global $wpseo_front;
  remove_action( 'wpseo_head', array($wpseo_front, 'debug_marker') , 2 );
}

add_action('wp_enqueue_scripts','remove_yoast');






// =================================================================
// ====== Custom image sizes
// =================================================================

// Add new image sizes
function custom_image_sizes( $image_sizes ) {
  // get the custom image sizes
  global $_wp_additional_image_sizes;
  // if there are none, just return the built-in sizes
  if ( empty( $_wp_additional_image_sizes ) )
    return $image_sizes;

  // add all the custom sizes to the built-in sizes
  foreach ( $_wp_additional_image_sizes as $id => $data ) {
    // take the size ID (e.g., 'my-name'), replace hyphens with spaces,
    // and capitalise the first letter of each word
    if ( !isset($image_sizes[$id]) )
      $image_sizes[$id] = ucfirst( str_replace( '-', ' ', $id ) );
    }

  return $image_sizes;
}

function custom_image_setup () {
add_theme_support( 'post-thumbnails' );
//add_image_size('Mini Square - 70x70', 70, 70, TRUE);
add_image_size('Square - 300x300', 300, 300, TRUE);
add_image_size('Square - 175x175', 175, 175, TRUE);
add_image_size('Icon - 46x46', 46, 46, TRUE);
//add_image_size('Featured', 640, 220, TRUE);

// To hide these sizes from the admin area, comment out line below
add_filter( 'image_size_names_choose', 'custom_image_sizes' );
}
add_action( 'after_setup_theme', 'custom_image_setup' );




// Alternative to YOAST
// http://digwp.com/2013/08/basic-wp-seo/

/* Basic WP SEO
	Usage:
		1. add this code to functions.php
		2. replace the $default_keywords with your own
		3. add <?php echo basic_wp_seo(); ?> to header.php
		4. test well and fine tune as needed

	Optional: add custom description, keywords, and/or title
	to any post or page using these custom field keys:

		mm_seo_desc
		mm_seo_keywords
		mm_seo_title

	To migrate from any SEO plugin, replace its custom field
	keys with those listed above. More information:

		@ http://digwp.com/2013/08/basic-wp-seo/
*/
function basic_wp_seo() {
	global $page, $paged, $post;
	$default_keywords = 'some, words, here'; // customize
	$output = '';

	// description
	$seo_desc = get_post_meta($post->ID, 'mm_seo_desc', true);
	$description = get_bloginfo('description', 'display');
	$pagedata = get_post($post->ID);
	if (is_singular()) {
		if (!empty($seo_desc)) {
			$content = $seo_desc;
		} else if (!empty($pagedata)) {
			$content = apply_filters('the_excerpt_rss', $pagedata->post_content);
			$content = substr(trim(strip_tags($content)), 0, 155);
			$content = preg_replace('#\n#', ' ', $content);
			$content = preg_replace('#\s{2,}#', ' ', $content);
			$content = trim($content);
		}
	} else {
		$content = $description;
	}
	$output .= '<meta name="description" content="' . esc_attr($content) . '">' . "\n";

	// keywords
	$keys = get_post_meta($post->ID, 'mm_seo_keywords', true);
	$cats = get_the_category();
	$tags = get_the_tags();
	if (empty($keys)) {
		if (!empty($cats)) foreach($cats as $cat) $keys .= $cat->name . ', ';
		if (!empty($tags)) foreach($tags as $tag) $keys .= $tag->name . ', ';
		$keys .= $default_keywords;
	}
	$output .= "\t\t" . '<meta name="keywords" content="' . esc_attr($keys) . '">' . "\n";

	// robots
	if (is_category() || is_tag()) {
		$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
		if ($paged > 1) {
			$output .=  "\t\t" . '<meta name="robots" content="noindex,follow">' . "\n";
		} else {
			$output .=  "\t\t" . '<meta name="robots" content="index,follow">' . "\n";
		}
	} else if (is_home() || is_singular()) {
		$output .=  "\t\t" . '<meta name="robots" content="index,follow">' . "\n";
	} else {
		$output .= "\t\t" . '<meta name="robots" content="noindex,follow">' . "\n";
	}

	// title
	$title_custom = get_post_meta($post->ID, 'mm_seo_title', true);
	$url = ltrim(esc_url($_SERVER['REQUEST_URI']), '/');
	$name = get_bloginfo('name', 'display');
	$title = trim(wp_title('', false));
	$cat = single_cat_title('', false);
	$tag = single_tag_title('', false);
	$search = get_search_query();

	if (!empty($title_custom)) $title = $title_custom;
	if ($paged >= 2 || $page >= 2) $page_number = ' | ' . sprintf('Page %s', max($paged, $page));
	else $page_number = '';

	if (is_home() || is_front_page()) $seo_title = $name . ' | ' . $description;
	elseif (is_singular())            $seo_title = $title . ' | ' . $name;
	elseif (is_tag())                 $seo_title = 'Tag Archive: ' . $tag . ' | ' . $name;
	elseif (is_category())            $seo_title = 'Category Archive: ' . $cat . ' | ' . $name;
	//elseif (is_archive())             $seo_title = 'Archive: ' . $title . ' | ' . $name;
	elseif (is_archive())             $seo_title = '' . $title . ' | ' . $name;
	elseif (is_search())              $seo_title = 'Search: ' . $search . ' | ' . $name;
	elseif (is_404())                 $seo_title = '404 - Not Found: ' . $url . ' | ' . $name;
	else                              $seo_title = $name . ' | ' . $description;

	$output .= "\t\t" . '<title>' . esc_attr($seo_title . $page_number) . '</title>' . "\n";

	return $output;
}



// ACF Options
// if( function_exists('acf_add_options_page') ) {
//
// 	acf_add_options_page(array(
// 		'page_title' 	=> 'Site Settings',
// 		'menu_title'	=> 'Site Settings',
// 		'menu_slug' 	=> 'site-settings',
// 		'capability'	=> 'edit_posts',
// 		'redirect'		=> false
// 	));
// }


?>