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-Adminsphp
if (!current_user_can('manage_options')) {
show_admin_bar(false);
}
- Remove WordPress Versionphp
remove_action('wp_head', 'wp_generator');
- Remove RSS Feed Linksphp
remove_action('wp_head', 'feed_links', 2);
- Disable XML-RPCphp
add_filter('xmlrpc_enabled', '__return_false');
- Disable Self Pingbacksphp
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 Revisionsphp
define('WP_POST_REVISIONS', 5);
- Remove Query Stringsphp
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 Supportphp
function theme_prefix_setup() {
add_theme_support('custom-logo');
}
add_action('after_setup_theme', 'theme_prefix_setup');
- Custom Excerpt Lengthphp
function custom_excerpt_length($length) {
return 20;
}
add_filter('excerpt_length', 'custom_excerpt_length', 999);
- Custom Excerpt Suffixphp
function custom_excerpt_more($more) {
return '...';
}
add_filter('excerpt_more', 'custom_excerpt_more');
- Register New Sidebarphp
function custom_sidebar() {
register_sidebar(array(
'name' => __('Custom Sidebar'),
'id' => 'custom-sidebar',
));
}
add_action('widgets_init', 'custom_sidebar');
- Custom Login Logophp
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 Metaphp
function insert_open_graph_in_head() {
// Your Open Graph Tags here
}
add_action('wp_head', 'insert_open_graph_in_head', 5);
- Add Canonical Tagsphp
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 Headphp
add_filter('wpseo_debug_markers', '__return_false');
- Add Twitter Cardsphp
function add_twitter_cards() {
// Your Twitter Card data here
}
add_action('wp_head', 'add_twitter_cards');
Security
- Disable File Editing from Dashboardphp
define('DISALLOW_FILE_EDIT', true);
- Remove Error Message on Login Pagephp
function no_wordpress_errors(){
return 'Something is wrong!';
}
add_filter('login_errors', 'no_wordpress_errors');
- Restrict Access to WP-Adminphp
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 Typephp
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 Widgetsphp
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 Taxonomyphp
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 Breadcrumbsphp
remove_action('woocommerce_before_main_content', 'woocommerce_breadcrumb', 20, 0);
- Change Add to Cart Text on WooCommerce Buttonphp
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 Itemsphp
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 Linkphp
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 Supportphp
add_theme_support('post-thumbnails');
- Remove Sticky Post Classphp
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 Logoutphp
function logout_redirect_home(){
wp_redirect( home_url() );
exit();
}
add_action('wp_logout','logout_redirect_home');
Miscellaneous
- Change Admin Footer Textphp
function custom_admin_footer_text () {
echo 'Your custom admin footer text';
}
add_filter('admin_footer_text', 'custom_admin_footer_text');
- Disable WP Emojisphp
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
- Enable SVG Uploadsphp
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 Pluginphp
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 URLphp
function custom_loginlogo_url($url) {
return get_bloginfo('url');
}
add_filter('login_headerurl', 'custom_loginlogo_url');
- Add Categories to Attachmentsphp
function add_categories_to_attachments() {
register_taxonomy_for_object_type( 'category', 'attachment' );
}
add_action( 'init' , 'add_categories_to_attachments' );
- Add Custom Rolephp
add_role('custom_role', 'Custom Role', array('read' => true));
- Automatically Set the Featured Imagephp
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 Sizesphp
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 Footerphp
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 Barphp
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 Widgetsphp
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 Confirmationphp
add_filter( 'admin_email_check_interval', '__return_false' );




