Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A compilation of function snippets for WordPress developers who create their own themes.

License

NotificationsYou must be signed in to change notification settings

taniarascia/wp-functions

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 

Repository files navigation

This is a list of useful WordPress functions that I often reference to enhance or clean up my sites. Please be careful and make backups.

Hide WordPress Update Nag to All But Admins

/** * Hide WordPress update nag to all but admins */functionhide_update_notice_to_all_but_admin() {if ( !current_user_can('update_core' ) ) {remove_action('admin_notices','update_nag',3 );    }}add_action('admin_head','hide_update_notice_to_all_but_admin',1 );

Utilize Proper WordPress Titles

Make sure to remove the<title> tag from your header.

/** * Utilize proper WordPress titles */add_theme_support('title-tag' );

Create Custom WordPress Dashboard Widget

/** * Create custom WordPress dashboard widget */functiondashboard_widget_function() {echo'        <h2>Custom Dashboard Widget</h2>        <p>Custom content here</p>';}functionadd_dashboard_widgets() {wp_add_dashboard_widget('custom_dashboard_widget','Custom Dashoard Widget','dashboard_widget_function' );}add_action('wp_dashboard_setup','add_dashboard_widgets' );

Remove All Dashboard Widgets

/** * Remove all dashboard widgets */functionremove_dashboard_widgets() {global$wp_meta_boxes;        unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press'] );    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links'] );    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now'] );    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins'] );    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_drafts'] );    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments'] );    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary'] );    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary'] );remove_meta_box('dashboard_activity','dashboard','normal' );}add_action('wp_dashboard_setup','remove_dashboard_widgets' );

Include Navigation Menus

/** * Include navigation menus */functionregister_my_menu() {register_nav_menu('nav-menu',__('Navigation Menu' ) );}add_action('init','register_my_menu' );

Insert this where you want it to appear, and save the menu inAppearance -> Menus.

wp_nav_menu(array('theme_location' =>'nav-menu' ) );

Here's the code for multiple menus:

functionregister_my_menus() {register_nav_menus(array('new-menu' =>__('New Menu' ),'another-menu' =>__('Another Menu' ),'an-extra-menu' =>__('An Extra Menu' ),        )    );}add_action('init','register_my_menus' );

Insert Custom Login Logo

/** * Insert custom login logo */functioncustom_login_logo() {echo'        <style>            .login h1 a {                background-image: url(image.jpg) !important;                background-size: 234px 67px;                width:234px;                height:67px;                display:block;            }        </style>';}add_action('login_head','custom_login_logo' );

Modify Admin Footer Text

/** * Modify admin footer text */functionmodify_footer() {echo'Created by <a href="mailto:you@example.com">you</a>.';}add_filter('admin_footer_text','modify_footer' );

Enqueue Styles and Scripts

/** * Enqueue styles and scripts */functioncustom_scripts() {wp_enqueue_style('bootstrap',get_template_directory_uri() .'/css/bootstrap.min.css',array(),'3.3.6' );wp_enqueue_style('style',get_template_directory_uri() .'/css/style.css' );wp_enqueue_script('bootstrap',get_template_directory_uri() .'/js/bootstrap.min.js',array('jquery'),'3.3.6',true );wp_enqueue_script('script',get_template_directory_uri() .'/js/script.js' );}add_action('wp_enqueue_scripts','custom_scripts' );

Enqueue Google Fonts

/** * Enqueue Google Fonts */functiongoogle_fonts() {wp_register_style('OpenSans','//fonts.googleapis.com/css?family=Open+Sans:400,600,700,800' );wp_enqueue_style('OpenSans' );}add_action('wp_print_styles','google_fonts' );

Modify Excerpt Length

/** * Modify excerpt length */functioncustom_excerpt_length($length ) {return25;}add_filter('excerpt_length','custom_excerpt_length',999 );

Change Read More Link

/** * Change Read More link */functioncustom_read_more_link() {return'<a href="' .get_permalink() .'">Read More</a>';}add_filter('the_content_more_link','custom_read_more_link' );

Change More Excerpt

/** * Change More excerpt */functioncustom_more_excerpt($more ) {return'...';}add_filter('excerpt_more','custom_more_excerpt' );

Disable Emoji Mess

/** * Disable Emoji mess */functiondisable_wp_emojicons() {remove_action('admin_print_styles','print_emoji_styles' );remove_action('wp_head','print_emoji_detection_script',7 );remove_action('admin_print_scripts','print_emoji_detection_script' );remove_action('wp_print_styles','print_emoji_styles' );remove_filter('wp_mail','wp_staticize_emoji_for_email' );remove_filter('the_content_feed','wp_staticize_emoji' );remove_filter('comment_text_rss','wp_staticize_emoji' );add_filter('tiny_mce_plugins','disable_emojicons_tinymce' );add_filter('emoji_svg_url','__return_false' );}add_action('init','disable_wp_emojicons' );functiondisable_emojicons_tinymce($plugins ) {returnis_array($plugins ) ?array_diff($plugins,array('wpemoji' ) ) :array();}

Remove Comments

/** * Remove comments */// Removes from admin menufunctionmy_remove_admin_menus() {remove_menu_page('edit-comments.php' );}add_action('admin_menu','my_remove_admin_menus' );// Removes from post and pagesfunctionremove_comment_support() {remove_post_type_support('post','comments' );remove_post_type_support('page','comments' );}add_action('init','remove_comment_support',100 );// Removes from admin barfunctionmytheme_admin_bar_render() {global$wp_admin_bar;$wp_admin_bar->remove_menu('comments' );}add_action('wp_before_admin_bar_render','mytheme_admin_bar_render' );

Change Media Gallery URL

/** * Change Media Gallery URL */if (empty(get_option('upload_url_path' ) ) ) {update_option('upload_url_path','http://assets.website.com/wp-content/uploads' );}

Also, you can filter the option value before it's retrieved from the database, which is slightly better:

/** * Change Media Gallery URL */add_filter('pre_option_upload_url_path',function() {return'http://assets.website.com/wp-content/uploads';});

Create Custom Thumbnail Size

/** * Create custom thumbnail size */add_image_size('custom-thumbnail',250,250,true );

Retrieve Thumbnail

$thumb =wp_get_attachment_image_src(get_post_thumbnail_id($post->ID),'custom-thumbnail' );echo$thumb[0];

Since WordPress 4.4.0, you can use:

the_post_thumbnail_url($size );

Add Categories for Attachments

/** * Add categories for attachments */functionadd_categories_for_attachments() {register_taxonomy_for_object_type('category','attachment' );}add_action('init' ,'add_categories_for_attachments' );

Add Tags for Attachments

/** * Add tags for attachments */functionadd_tags_for_attachments() {register_taxonomy_for_object_type('post_tag','attachment' );}add_action('init' ,'add_tags_for_attachments' );

Add Custom Excerpt to Pages

/** * Add custom excerpt to pages */functionadd_page_excerpt() {add_post_type_support('page',array('excerpt' ) );}add_action('init','add_page_excerpt' );

Create a Global String

/** * Create a global string */functionglobal_string() {return'String';}

Retrieve Field

echoglobal_string();

Support Featured Images

/** * Support featured images */add_theme_support('post-thumbnails' );

Support Search Form

/** * Support search form */add_theme_support('html5',array('search-form' ) );

Excluding Pages From Search

/** * Excluding pages from search */functionexclude_pages_from_search() {global$wp_post_types;$wp_post_types['page']->exclude_from_search =true;}add_action('init','exclude_pages_from_search' );

Disable xmlrpc.php

/** * Disable xmlrpc.php */add_filter('xmlrpc_enabled','__return_false' );remove_action('wp_head','rsd_link' );remove_action('wp_head','wlwmanifest_link' );

Escape HTML in Posts

/** * Escape HTML in <code> or <pre><code> tags. */functionescapeHTML($arr) {if (version_compare(PHP_VERSION,'5.2.3') >=0) {$output =htmlspecialchars($arr[2],ENT_NOQUOTES,get_bloginfo('charset'),false);    }else {$specialChars =array('&' =>'&amp;','<' =>'&lt;','>' =>'&gt;'        );// decode already converted data$data =htmlspecialchars_decode($arr[2] );// escape all data inside <pre>$output =strtr($data,$specialChars );    }if (!empty($output)) {return$arr[1] .$output .$arr[3];    }else     {return$arr[1] .$arr[2] .$arr[3];    }}functionfilterCode($data) {// Uncomment if you want to escape anything within a <pre> tag//$modifiedData = preg_replace_callback( '@(<pre.*>)(.*)(<\/pre>)@isU', 'escapeHTML', $data );$modifiedData =preg_replace_callback('@(<code.*>)(.*)(<\/code>)@isU','escapeHTML',$data );$modifiedData =preg_replace_callback('@(<tt.*>)(.*)(<\/tt>)@isU','escapeHTML',$modifiedData );return$modifiedData;}add_filter('content_save_pre','filterCode',9 );add_filter('excerpt_save_pre','filterCode',9 );

Modified fromEscape HTML.

Create Custom Global Settings

/** * Create custom global settings */functioncustom_settings_page() {?>    <div>    <h1>Custom Settings</h1>    <form method="post" action="options.php"><?phpsettings_fields('section' );do_settings_sections('theme-options' );submit_button();?>    </form>    </div><?php }functioncustom_settings_add_menu() {add_theme_page('Custom Settings','Custom Settings','manage_options','custom-settings','custom_settings_page',null,99 );}add_action('admin_menu','custom_settings_add_menu' );// Example settingfunctionsetting_twitter() {?>    <input type="text" name="twitter" value="<?phpechoget_option('twitter');?>" /><?php }functioncustom_settings_page_setup() {add_settings_section('section','All Settings',null,'theme-options' );add_settings_field('twitter','Twitter Username','setting_twitter','theme-options','section' );register_setting('section','twitter' );}add_action('admin_init','custom_settings_page_setup' );

Retrieve Field

echoget_option('twitter' );

Modified fromCreate a WordPress Theme Settings Page with the Settings API.

Remove WordPress Admin Bar

/** * Remove WordPress admin bar */functionremove_admin_bar() {remove_action('wp_head','_admin_bar_bump_cb' );}add_action('get_header','remove_admin_bar' );

Add Open Graph Meta Tags

/** * Add Open Graph Meta Tags */functionmeta_og() {global$post;if (is_single() ) {if(has_post_thumbnail($post->ID ) ) {$img_src =wp_get_attachment_image_src(get_post_thumbnail_id($post->ID ),'thumbnail' );        }$excerpt =strip_tags($post->post_content );$excerpt_more ='';if (strlen($excerpt ) >155) {$excerpt =substr($excerpt,0,155 );$excerpt_more =' ...';        }$excerpt =str_replace('"','',$excerpt );$excerpt =str_replace("'",'',$excerpt );$excerptwords =preg_split('/[\n\r\t ]+/',$excerpt, -1,PREG_SPLIT_NO_EMPTY );array_pop($excerptwords );$excerpt =implode('',$excerptwords ) .$excerpt_more;?><meta name="author" content="Your Name"><meta name="description" content="<?phpecho$excerpt;?>"><meta property="og:title" content="<?phpechothe_title();?>"><meta property="og:description" content="<?phpecho$excerpt;?>"><meta property="og:type" content="article"><meta property="og:url" content="<?phpechothe_permalink();?>"><meta property="og:site_name" content="Your Site Name"><meta property="og:image" content="<?phpecho$img_src[0];?>"><?php    }else {return;    }}add_action('wp_head','meta_og',5);

Add Custom Post Type

/** * Add custom post type */functioncreate_custom_post() {register_post_type('custom-post',// slug for custom post typearray('labels' =>array('name' =>__('Custom Post' ),        ),'public' =>true,'hierarchical' =>true,'has_archive' =>true,'supports' =>array('title','editor','excerpt','thumbnail'        ),'can_export' =>true,'taxonomies' =>array('post_tag','category'        )    ));}add_action('init','create_custom_post');

Implement Preconnect to Google Fonts in Themes

/** * Implement preconnect to Google Fonts in themes */functiontwentyfifteen_resource_hints($urls,$relation_type ) {// Checks whether the subject is carrying the source of fonts google and the `$relation_type` equals preconnect.// Replace `enqueue_font_id` the `ID` used in loading the source.if (wp_style_is('enqueue_font_id','queue' ) &&'preconnect' ===$relation_type ) {// Checks whether the version of WordPress is greater than or equal to 4.7// to ensure compatibility with older versions// because the 4.7 has become necessary to return an array instead of stringif (version_compare($GLOBALS['wp_version'],'4.7-alpha','>=' ) ) {// Array with url google fonts and crossorigin$urls[] =array('href' =>'https://fonts.gstatic.com','crossorigin',            );        }else {// String with url google fonts$urls[] ='https://fonts.gstatic.com';        }    }return$urls;}add_filter('wp_resource_hints','twentyfifteen_resource_hints',10,2 );

Add Thumbnail Column to Post Listing

/** * Add thumbnail column to post listing */add_image_size('admin-list-thumb',80,80,false );functionwpcs_add_thumbnail_columns($columns ) {if ( !is_array($columns ) )$columns =array();$new =array();foreach($columnsas$key =>$title ) {if ($key =='title' )// Put the Thumbnail column before the Title column$new['featured_thumb'] =__('Image');$new[$key] =$title;    }return$new;}functionwpcs_add_thumbnail_columns_data($column,$post_id ) {switch ($column ) {case'featured_thumb':echo'<a href="' .$post_id .'">';echothe_post_thumbnail('admin-list-thumb' );echo'</a>';break;    }}if (function_exists('add_theme_support' ) ) {add_filter('manage_posts_columns' ,'wpcs_add_thumbnail_columns' );add_action('manage_posts_custom_column' ,'wpcs_add_thumbnail_columns_data',10,2 );}

Add Lead Class to First Paragraph

/** * Add lead class to first paragraph */functionfirst_paragraph($content ) {returnpreg_replace('/<p([^>]+)?>/','<p$1>',$content,1 );}add_filter('the_content','first_paragraph' );

Adds alead class to the first paragraph inthe_content.

Exclude Custom Post Type from Search

/** * Exclude custom post type from search */functionexcludePages($query ) {if ($query->is_search ) {$query->set('post_type','post' );}return$query;}add_filter('pre_get_posts','excludePages' );

Remove Query String from Static Resources

/** * Remove query string from static resources */functionremove_cssjs_ver($src ) {if (strpos($src,'?ver=' ) )$src =remove_query_arg('ver',$src );return$src;}add_filter('style_loader_src','remove_cssjs_ver',10,2 );add_filter('script_loader_src','remove_cssjs_ver',10,2 );

Modify jQuery

/** * Modify jQuery */functionmodify_jquery() {wp_deregister_script('jquery' );wp_register_script('jquery','https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js',false,'3.2.1' );wp_enqueue_script('jquery' );}if (!is_admin())add_action('wp_enqueue_scripts','modify_jquery');

Disable Website Field From Comment Form

/** * Disable website field from comment form */functiondisable_website_field($field ) {if(isset($field['url']) ) {        unset($field['url'] );    }return$field;}add_filter('comment_form_default_fields','disable_website_field');

Disable JSON REST API

/** * Disable JSON REST API */add_filter('json_enabled','__return_false');add_filter('json_jsonp_enabled','__return_false');

Switch Post Type

/** * Switch post type */functionswitch_post_type ($old_post_type,$new_post_type ) {global$wpdb;// Run the update query$wpdb->update($wpdb->posts,// Setarray('post_type' =>$new_post_type),// Wherearray('post_type' =>$old_post_type )    );}

PHP Logger

/** * PHP Logger */functionphp_logger($data ) {$output =$data;if (is_array($output ) )$output =implode(',',$output );// print the result into the JavaScript consoleecho"<script>console.log( 'PHP LOG:" .$output ."' );</script>";}

Always Show Second Bar in TinyMCE

/** * Always show second bar in TinyMCE */functionshow_tinymce_toolbar($in ) {$in['wordpress_adv_hidden'] =false;return$in;}add_filter('tiny_mce_before_init','show_tinymce_toolbar' );

Remove Admin Menu Items Depending on User Role

/** * Clone the administrator user role */functionclone_admin_role() {global$wp_roles;if ( !isset($wp_roles ) )$wp_roles =newWP_Roles();$adm =$wp_roles->get_role('administrator' );// Add new "Client" role with all admin capabilities$wp_roles->add_role('client','Client',$adm->capabilities );}add_action('init','clone_admin_role' );/** * Specify which admin menu items are visible for users with role "Client" */functionremove_dashboard_menus() {if (current_user_can('client' ) ) {// Hide Updates under Dashboard menuremove_submenu_page('index.php','update-core.php' );// Hide Commentsremove_menu_page('edit-comments.php' );// Hide Pluginsremove_menu_page('plugins.php' );// Hide Themes, Customizer and Widgets under Appearance menuremove_submenu_page('themes.php','themes.php' );remove_submenu_page('themes.php','customize.php?return=' .urlencode($_SERVER['REQUEST_URI'] ) );remove_submenu_page('themes.php','widgets.php' );// Hide Toolsremove_menu_page('tools.php' );// Hide General Settingsremove_menu_page('options-general.php' );    }}add_action('admin_menu','remove_dashboard_menus' );

Remove Admin Menu Items Depending on Email Address (domain)

/** * Specify which users can see admin menu items based on their email address */functionremove_dashboard_menus() {$user_data =get_userdata(get_current_user_id() );$user_email =isset($user_data->user_email ) ?$user_data->user_email :'';if ( !strpos($user_email,'@yourcompany.com' ) ) {// Hide Updates under Dashboard menuremove_submenu_page('index.php','update-core.php' );// Hide Commentsremove_menu_page('edit-comments.php' );// Hide Pluginsremove_menu_page('plugins.php' );// Hide Themes, Customizer and Widgets under Appearance menuremove_submenu_page('themes.php','themes.php' );remove_submenu_page('themes.php','customize.php?return=' .urlencode($_SERVER['REQUEST_URI'] ) );remove_submenu_page('themes.php','widgets.php' );// Hide Toolsremove_menu_page('tools.php' );// Hide General Settingsremove_menu_page('options-general.php' );    }}add_action('admin_menu','remove_dashboard_menus' );

Reorder Admin Menu Items

/** * Reorder admin menu */functioncustom_menu_order($menu_ord ) {if ( !$menu_ord ) {returntrue; }returnarray('index.php','separator1','edit.php?post_type=page','edit.php','edit.php?post_type=[your_post_type_slug]','upload.php','edit-comments.php','separator2','themes.php','plugins.php','users.php','tools.php','options-general.php'        );    }}add_filter('custom_menu_order','custom_menu_order' );add_filter('menu_order','custom_menu_order' );

Exclude a Category From WordPress Loops

/** * Exclude a category from all WordPress loops */add_action('pre_get_posts',function($query ) {// anonymous callbackglobal$wp_query;// Hard coded category ID, but can be dynamic: esc_attr(get_option('your-cat-id'));$excluded_cat_id =25;// add category ID to existing, avoid overwriting it$cat[] =$query->get('cat' );$cat[] ="-" .$excluded_cat_id;$query->set('cat',$cat );    }});

Disable the message - JQMIGRATE: Migrate is installed, version 1.4.1

add_action('wp_default_scripts',function ($scripts) {if (!empty($scripts->registered['jquery'])) {$scripts->registered['jquery']->deps =array_diff($scripts->registered['jquery']->deps, ['jquery-migrate']);    }});

Load heavy 3rd-party scripts later for better performance

Lighthouse and similar performance analysis tools always complain about render-blocking scripts (and styles),short cache TTL etc. Most of these scripts and styles come from 3rd-party sources which we can't control –Google's own Tag Manager and Analytics, Facebook Pixel, other trackers and chat scripts etc. However, wecan load them only when a real user interacts with a page, significantly reducing the Time To Interactivemetric and scoring much higher performance results.

Depending on where you like these 3rd-party scripts to be, you can either usewp_footer action to print thecode in footer, or put it in your mainapp.js script which, in turn, is enqueued onwp_enqueue_scripts action.

<script>var fired = false;window.addEventListener('scroll', () =>{if(fired===false){fired=true;setTimeout(()=>{// Marketing scripts go here.},1000)// 1000ms or 1s works fine, but you can adjust this timeout.}});</script>

About

A compilation of function snippets for WordPress developers who create their own themes.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors16


[8]ページ先頭

©2009-2025 Movatter.jp