The WordPress functions.php
file is like a plugin for your WordPress theme, allowing you to add both simple and complex functionality to your site. Below are 42 extremely useful tricks that you can add to your WordPress functions.php
file.
Note: Always backup your website before editing the functions.php
file, and consider developing on a staging environment first.
- Hide Admin Bar for Non-Admins
php
if (!current_user_can('manage_options')) {
show_admin_bar(false);
}
- Remove WordPress Version
php
remove_action('wp_head', 'wp_generator');
- Remove RSS Feed Links
php
remove_action('wp_head', 'feed_links', 2);
- Disable XML-RPC
php
add_filter('xmlrpc_enabled', '__return_false');
- Disable Self Pingbacks
php
function disable_self_ping(&$links) {
foreach ($links as $l => $link)
if (0 === strpos($link, get_option('home')))
unset($links[$l]);
}
add_action('pre_ping', 'disable_self_ping');
Performance
- Limit Revisions
php
define('WP_POST_REVISIONS', 5);
- Remove Query Strings
php
function remove_query_strings() {
if (!is_admin()) {
add_filter('script_loader_src', 'remove_query_strings_split', 15);
add_filter('style_loader_src', 'remove_query_strings_split', 15);
}
}
function remove_query_strings_split($src){
$output = preg_split("/(&ver|\?ver)/", $src);
return $output[0];
}
add_action('init', 'remove_query_strings');
Customization
- Add Custom Logo Support
php
function theme_prefix_setup() {
add_theme_support('custom-logo');
}
add_action('after_setup_theme', 'theme_prefix_setup');
- Custom Excerpt Length
php
function custom_excerpt_length($length) {
return 20;
}
add_filter('excerpt_length', 'custom_excerpt_length', 999);
- Custom Excerpt Suffix
php
function custom_excerpt_more($more) {
return '...';
}
add_filter('excerpt_more', 'custom_excerpt_more');
- Register New Sidebar
php
function custom_sidebar() {
register_sidebar(array(
'name' => __('Custom Sidebar'),
'id' => 'custom-sidebar',
));
}
add_action('widgets_init', 'custom_sidebar');
- Custom Login Logo
php
function custom_login_logo() {
echo '<style type="text/css">h1 a { background-image: url('.get_bloginfo('template_directory').'/images/logo.png) !important; }</style>';
}
add_action('login_head', 'custom_login_logo');
SEO and Social
- Add Open Graph Meta
php
function insert_open_graph_in_head() {
// Your Open Graph Tags here
}
add_action('wp_head', 'insert_open_graph_in_head', 5);
- Add Canonical Tags
php
function rel_canonical() {
if (!is_singular()) return;
global $wp_the_query;
if ($id = $wp_the_query->get_queried_object_id()) {
$link = get_permalink($id);
echo "\n<link rel='canonical' href='$link' />\n";
}
}
add_action('wp_head', 'rel_canonical');
- Remove Yoast SEO Comment in Head
php
add_filter('wpseo_debug_markers', '__return_false');
- Add Twitter Cards
php
function add_twitter_cards() {
// Your Twitter Card data here
}
add_action('wp_head', 'add_twitter_cards');
Security
- Disable File Editing from Dashboard
php
define('DISALLOW_FILE_EDIT', true);
- Remove Error Message on Login Page
php
function no_wordpress_errors(){
return 'Something is wrong!';
}
add_filter('login_errors', 'no_wordpress_errors');
- Restrict Access to WP-Admin
php
function restrict_admin_access(){
if (!current_user_can('manage_options') && '/wp-admin/admin-ajax.php' != $_SERVER['PHP_SELF']) {
wp_redirect(home_url());
}
}
add_action('admin_init', 'restrict_admin_access', 1);
Advanced Features
- Add Custom Post Type
php
function create_post_type() {
register_post_type('my_custom_post',
array('labels' => array('name' => __('My Custom Post')),
'public' => true,
)
);
}
add_action('init', 'create_post_type');
- Custom Dashboard Widgets
php
function add_custom_dashboard_widgets() {
wp_add_dashboard_widget('custom_help_widget', 'Theme Support', 'custom_dashboard_help');
}
function custom_dashboard_help() {
echo '<p>Welcome to my custom dashboard widget.</p>';
}
add_action('wp_dashboard_setup', 'add_custom_dashboard_widgets');
- Register Custom Taxonomy
php
function create_custom_taxonomy() {
$labels = array(
'name' => _x('Taxonomies', 'taxonomy general name'),
// Other labels here
);
register_taxonomy('taxonomy', array('post'), array(
'label' => __('Custom Taxonomy'),
'labels' => $labels,
// Additional options here
));
}
add_action('init', 'create_custom_taxonomy', 0);
WooCommerce Customization
- Remove WooCommerce Breadcrumbs
php
remove_action('woocommerce_before_main_content', 'woocommerce_breadcrumb', 20, 0);
- Change Add to Cart Text on WooCommerce Button
php
add_filter('woocommerce_product_single_add_to_cart_text', 'woo_custom_cart_button_text');
function woo_custom_cart_button_text() {
return __('My Button Text', 'woocommerce');
}
- Hide Out of Stock Items
php
add_filter('woocommerce_product_query_meta_query', 'hide_out_of_stock_items');
function hide_out_of_stock_items($meta_query){
$meta_query[] = array(
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => '!='
);
return $meta_query;
}
Posts and Pages
- Change Read More Link
php
function modify_read_more_link() {
return '<a class="more-link" href="' . get_permalink() . '">Your Read More Link Text</a>';
}
add_filter('the_content_more_link', 'modify_read_more_link');
- Add Featured Image Support
php
add_theme_support('post-thumbnails');
- Remove Sticky Post Class
php
function remove_sticky_class($classes) {
if(in_array('sticky', $classes)) {
$classes = array_diff($classes, array('sticky'));
$classes[] = 'my-sticky';
}
return $classes;
}
add_filter('post_class','remove_sticky_class');
- Redirect To Home After Logout
php
function logout_redirect_home(){
wp_redirect( home_url() );
exit();
}
add_action('wp_logout','logout_redirect_home');
Miscellaneous
- Change Admin Footer Text
php
function custom_admin_footer_text () {
echo 'Your custom admin footer text';
}
add_filter('admin_footer_text', 'custom_admin_footer_text');
- Disable WP Emojis
php
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
- Enable SVG Uploads
php
function enable_svg_upload($mimes) {
$mimes['svg'] = 'image/svg+xml';
return $mimes;
}
add_filter('upload_mimes', 'enable_svg_upload');
- Disable WordPress Update Notifications for Specific Plugin
php
function disable_plugin_updates( $value ) {
if ( isset($value) && is_object($value) && isset($value->response['plugin-folder/plugin-file.php']) ) {
unset($value->response['plugin-folder/plugin-file.php']);
}
return $value;
}
add_filter('site_transient_update_plugins', 'disable_plugin_updates');
- Customize the Login Page URL
php
function custom_loginlogo_url($url) {
return get_bloginfo('url');
}
add_filter('login_headerurl', 'custom_loginlogo_url');
- Add Categories to Attachments
php
function add_categories_to_attachments() {
register_taxonomy_for_object_type( 'category', 'attachment' );
}
add_action( 'init' , 'add_categories_to_attachments' );
- Add Custom Role
php
add_role('custom_role', 'Custom Role', array('read' => true));
- Automatically Set the Featured Image
php
function autoset_featured_image() {
global $post;
if (!has_post_thumbnail($post->ID)) {
$attached_image = get_children("post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1");
if ($attached_image) {
foreach ($attached_image as $attachment_id => $attachment) {
set_post_thumbnail($post->ID, $attachment_id);
}
}
}
}
add_action('the_post', 'autoset_featured_image');
- Add Custom Image Sizes
php
function my_custom_sizes() {
add_image_size('my-custom-size', 400, 300, true);
}
add_action('after_setup_theme', 'my_custom_sizes');
- Move jQuery to the Footer
php
function move_jquery_to_footer() {
if (!is_admin()) {
wp_deregister_script('jquery');
wp_register_script('jquery', includes_url('/js/jquery/jquery.js'), false, null, true);
wp_enqueue_script('jquery');
}
}
add_action('wp_enqueue_scripts', 'move_jquery_to_footer');
- Change Howdy Text in Admin Bar
php
function replace_howdy($wp_admin_bar) {
$my_account=$wp_admin_bar->get_node('my-account');
$newtitle = str_replace('Howdy,', 'Welcome,', $my_account->title);
$wp_admin_bar->add_node(array(
'id' => 'my-account',
'title' => $newtitle,
));
}
add_filter('admin_bar_menu', 'replace_howdy',25);
- Remove Unused Dashboard Widgets
php
function remove_dashboard_widgets() {
global $wp_meta_boxes;
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);
}
add_action('wp_dashboard_setup', 'remove_dashboard_widgets' );
- Change Admin Email Without Confirmation
php
add_filter( 'admin_email_check_interval', '__return_false' );