WordPress Snippets
As a WordPress developer I have collected / created / curated many snippets that I’ve used in my projects. I hope you find them useful.
General HTML / WordPress tags
Get your template’s directory
<link href="<?php echo get_template_directory_uri(); ?>/style.css" rel="stylesheet" media="screen">
Check if this is the home page
<?php if (is_home()) { ... } ?>
Remove the wp_generator tag in the Head section of your HTML
I recommend you to add this line for security reasons.
remove_action('wp_head', 'wp_generator');
Enable post and comment RSS feed links to head
add_theme_support( 'automatic-feed-links' );
Contents and Excerpts
Set the default excerpt length (in number of words)
function my_excerpt_length($length) {
return 20; // number of words
}
add_filter( 'excerpt_length', 'my_excerpt_length', 100 );
Add a ShortCode that doesn’t require attributes
function get_my_shortcut() {
global $post;
return "This is My Shortcut"; // you can add extra HTML here
}
add_shortcode('my_shortcut', 'get_my_shortcut');
How to use it:
[my_shortcut]
Add a ShortCode that uses attributes
function get_my_shortcut($atts) {
global $post;
// get the attributes
extract(shortcode_atts(array(
'attribute1' => '1', // '1' is the default value for this attribute
'attribute2' => '2'), $atts));
return "Some values here: <strong>".$attribute1." and ".$attribute2."</strong>";
}
add_shortcode('my_shortcut', 'get_my_shortcut');
How to use it:
[my_shortcut attribute1="10" attribute2="20"]
Add a shortcut that has text
function quote($atts, $content = null) {
if (empty($content)) {
return "You are awesome!";
}
else return $content;
}
add_shortcode('quote', 'quote');
How to use it:
[quote]Have a great day![/quote]
Sidebars, Footers and more
Create a space for widgets (can be anywhere, i.e. a sidebar, the footer, etc.)
function my_widgets_init() {
register_sidebar( array(
'name' => 'Footer Sidebar 1',
'id' => 'footer-sidebar-1',
'description' => 'Appears in the left footer area',
'before_widget' => '<aside id="%1$s" class="widget %2$s">',
'after_widget' => '</aside>',
'before_title' => '<h3>',
'after_title' => '</h3>'
) );
}
add_action('widgets_init', 'my_widgets_init');
Somewhere in your HTML:
<div class="col-md-4">
<?php
if(is_active_sidebar('footer-sidebar-1')) {
dynamic_sidebar('footer-sidebar-1');
}
?>
</div>
Menus
Register a “Menu” for your theme.
You can place a menu anywhere in your HTML.
function register_my_main_menu() {
register_nav_menu('main-menu', __( 'Main Menu' ));
}
add_action('init', 'register_my_main_menu');
Somewhere in your HTML:
<div role="navigation">
<?php wp_nav_menu( array(
'theme_location' => 'main-menu',
'menu_class' => 'nav navbar-nav', // Use your own CSS classes
'container' => false ) ); ?> // Should it include an extra container?
</div>
Add a CSS class to the current item in a Navigation Menu
function my_active_menu_item($classes) {
if(in_array('current-menu-item', $classes)) {
$classes[] = 'active'; // Add your CSS class
}
return $classes;
}
add_filter('nav_menu_css_class', 'my_active_menu_item');
Images
Add Post Thumbnails support for a Theme
You have to add this line in order to enable the functions in this section.
add_theme_support( 'post-thumbnails' );
Register a new custom image size
WordPress will create a copy of the Featured Image with the specified dimensions when you upload a new image.
Important: this will not make it available in media menus, please check the following point.
add_image_size('homepage-blog-thumb', 400, 280, true);
Parameters are: image size name, width, height and ‘should crop?’. There are some predefined names you should not use. Check docs.
Make a custom sized image available for selection in media menus
Check previous points for this to work.
function my_image_sizes( $sizes ) {
return array_merge( $sizes, array(
'homepage-blog-thumb' => __('Home Page Blog Thumb'),
) );
}
add_filter( 'image_size_names_choose', 'my_image_sizes' );
How to limit WordPress gallery thumbnails in the loop
Sometimes you don’t want to show all the thumbnails in the loop. Maybe 2? Maybe 4? This snippet will help you.
From: http://www.webgurus.biz/how-to-limit-wordpress-gallery-thumbnails-in-the-loop/
function get_random_gallery_images() {
global $wpdb,$post;
$ids = "";
$counter = 0;
$number_of_posts = 4; // change this to limit the number of thumbnails
$args = array(
'post_type' => 'attachment',
'numberposts' => 4,
'post_status' => null,
'orderby' => 'rand',
'post_parent' => $post->ID
);
$attachments = get_posts($args);
if ($attachments) {
foreach ($attachments as $attachment) {
if ($counter != 0) {
$ids .= ','.$attachment->ID;
}
else {
$ids .= $attachment->ID;
}
$counter++;
}
}
return $ids;
}
$attachment_ids = get_random_gallery_images();
echo do_shortcode('[gallery columns="4" include="'.$attachment_ids.'"]');
Administration
Add a custom column to show a Custom Field in the admin Posts list screen
function my_column_header($defaults) {
$defaults['product_key'] = __('Code'); // the column name
return $defaults;
}
function my_column_contents($column_name, $post_id) {
if ($column_name == 'product_key') {
$product_key = get_post_meta($post_id, 'Code', true); // Read the custom 'Code' field
echo $product_key; // this line may include extra HTML
}
}
add_filter('manage_posts_columns', 'my_column_header');
add_action('manage_posts_custom_column', 'my_column_contents', 10, 2);
Add a custom column to show the post’s Featured Image in the admin Posts list screen
function my_column_header($defaults){
$defaults['the_post_thumbs'] = __('Thumbs'); // the column name
return $defaults;
}
function my_column_contents($column_name, $post_id){
if ($column_name === 'the_post_thumbs') {
echo the_post_thumbnail( array(64, 64) ); // select the image size
}
}
add_filter('manage_posts_columns', 'my_column_header');
add_action('manage_posts_custom_column', 'my_column_contents', 10, 2);
Plugins & Widgets
Basic plugin structure
<?php
/*
* Plugin Name: My Plugin's Name
* Description: My Plugin's Description
* author: Andres Jaimes Jaimes
* Author URI: https://andres.jaimes.net/
* Version: 1.0
* License: Choose a license.
*/
function my_plugin_contents($content) {
return $content . '<p>My Plugin's Content.</p>';
}
add_filter('the_content', 'my_plugin_contents');
Basic Widget Structure
<?php
/*
* Plugin Name: My Plugin's Name
* Description: My Plugin's Description.
* author: Andres Jaimes Jaimes
* Author URI: https://andres.jaimes.net/
* Version: 1.0
* License: Choose a license.
*/
class MyPlugin extends WP_Widget {
// constructor
function MyPlugin() {
parent::WP_Widget(false, $name = 'Plugin's Name',
array('description' => 'This is my wonderful plugin.'),
array('width' => '400px')
);
}
// widget form creation: what you see when you add a widget to a section in Appearance > Widgets
function form($instance) {
$defaults = array(
'title' => '',
'anumber' => 5,
'amessage' => ''
);
$values = wp_parse_args( $instance, $defaults ); ?>
<p>
<label for='<?php echo $this->get_field_id( 'title' ); ?>>
<?php _e( 'Title:', 'mytextdomain' ); ?>
<input class='widefat' id='<?php echo $this->get_field_id( 'title' ); ?>' name='<?php echo $this->get_field_name( 'title' ); ?>' type='text' value='<?php echo $values['title']; ?>' />
</label>
</p>
<p>
<label for='<?php echo $this->get_field_id( 'anumber' ); ?>'>
<?php _e( 'Type a Number:', 'mytextdomain' ); ?>
<input class='widefat' id='<?php echo $this->get_field_id( 'anumber' ); ?>' name='<?php echo $this->get_field_name( 'anumber' ); ?>' type='text' value='<?php echo $values['anumber']; ?>' />
</label>
</p>
<p>
<label for='<?php echo $this->get_field_id( 'amessage' ); ?>'>
<?php _e( 'Type a Message:', 'mytextdomain' ); ?>
<input class='widefat' id='<?php echo $this->get_field_id( 'amessage' ); ?>' name='<?php echo $this->get_field_name( 'amessage' ); ?>' type='text' value='<?php echo $values['amessage']; ?>' />
</label>
</p><?php
}
// widget update: a chance to perform validations after you click Save when in Appearance > Widgets
function update($new_instance, $old_instance) {
return $new_instance;
}
// widget display: the way a final user will see your widget in your running website
function widget($args, $instance) {
echo $args['before_widget'];
echo $args['before_title'] . $instance['title'] . $args['after_title'];
echo '<div>You typed a number: '.$instance['anumber'].'and a message: '.$instance['amessage'].'</div>';
echo $args['after_widget'];
}
} // End of class
// register widget
add_action('widgets_init',
create_function('', 'return register_widget("MyPlugin");'));
?>
I’ll keep adding snippets to this page.
Please share it if you find useful.