Quick tip #2: Replace missing images using jQuery

Posted: by Steffen Jørgensen

Assuming you already use jQuery on your site, here is a little trick to replace missing images with a “fallback image”.

    $(this).attr('src', '/path/to/fallback-image.jpg);

What this script does is, if a image fails to load and throws an error (caught by .error();) we simply replaces the original src-attr with a new image.

CSS humor

Posted: by Steffen Jørgensen

Nerdhumor ahead!

If you don’t know CSS, this is most likely not very funny.

#titanic{ /* ID, as there can be only one Titanic */
    float: none;
    vertical-align: bottom;
#einstein{ /* ID, as there can be only one Einstein */
    position: relative;
#prince{ /* ID, as there can be only one Prince */
    color: purple;
    height: .75em;
    voice-pitch: x-high;
.ninja{ /* Class, as there is usually more than one ninja */
    color: black;
    visibility: hidden;
    vertical-align: top;
    visibility: hidden;
    cursor: crosshair;
    background: darkgray;
    border: 3in solid steel;
    display: block;
    margin: 120in;
    position: absolute;
    font-family: 'Comic Sans MS';
    font-family: 'Helvetica';

A collection of useful WordPress functions

Posted: by Steffen Jørgensen

The functions.php file in every WordPress theme can contain many useful functions — everything from adding post thumbnail support to custom posttypes and your own taxonomies.

In this post I have collected a lot of functions that can help you customize your WordPress installation. Some are very useful, others are just nice workarounds of common challenges — some you might not want to use.

Remember — I’m not saying you should use ALL of the functions, or just copy/paste the whole code to your functions.php file. Only use the snippets you need as some of the code can do really bad things, depending on your setup.

Originally I came across a post over at digwp.com. They had 2 articles dedicated to functions.php, and I desided to work from there; customize to fit my needs and adding a few of my own functions.

Download the full file here.

// Post thumbnails support

// Menu support

// Post editor styling

// Post formats support
add_theme_support( 'post-formats', array( 'aside', 'gallery','link','image','quote','status','video','audio','chat' ) );

// Clean up header elements
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'feed_links', 2);
remove_action('wp_head', 'index_rel_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'feed_links_extra', 3);
remove_action('wp_head', 'start_post_rel_link', 10, 0);
remove_action('wp_head', 'parent_post_rel_link', 10, 0);
remove_action('wp_head', 'adjacent_posts_rel_link', 10, 0);
// remove adminbar
remove_action( 'init', 'wp_admin_bar_init' );
add_action( 'show_admin_bar', '__return_false' );
// Permalinks with ÆØÅæøå (and other special characters)
if ( !function_exists('sanitize_title_dk') )
	$translate_language = 'da';
	$translate_system = array();
	function sanitize_title_dk($title)
		global $translate_language, $translate_system;
		if (!mb_check_encoding($title, 'ASCII'))
		//$title = utf8_decode($title);
		$translate_system[] = array ( "æ" => "ae", "ø" => "oe", "å" => "aa", "Æ" => "ae", "Ø" => "oe", "Å" => "aa"  );
		foreach ($translate_system as $system)
		$title = strtr($title, $system);
	return $title;
add_filter('sanitize_title', 'sanitize_title_dk', 0);
// add feed links to header
if (function_exists('automatic_feed_links')) {
} else {
// smart jquery inclusion
if (!is_admin()) {
	wp_register_script('jquery', ("http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"), false, '1.7.1');
// enable threaded comments
function enable_threaded_comments(){
	if (!is_admin()) {
		if (is_singular() AND comments_open() AND (get_option('thread_comments') == 1))
add_action('get_header', 'enable_threaded_comments');
// add google analytics to footer
function add_google_analytics() {
	echo '<script src="http://www.google-analytics.com/ga.js" type="text/javascript"></script>';
	echo '<script type="text/javascript">';
	echo 'var pageTracker = _gat._getTracker("UA-XXXXX-X");';
	echo 'pageTracker._trackPageview();';
	echo '</script>';
add_action('wp_footer', 'add_google_analytics');
// custom excerpt length
function custom_excerpt_length($length) {
	return 20;
add_filter('excerpt_length', 'custom_excerpt_length');
// no more jumping for read more link
function no_more_jumping($post) {
	return '<a href="'.get_permalink($post->ID).'" class="read-more">'.'Continue Reading'.'</a>';
add_filter('excerpt_more', 'no_more_jumping');
// add a favicon to your
function blog_favicon() {
	echo '<link rel="Shortcut Icon" type="image/x-icon" href="'.get_bloginfo('wpurl').'/favicon.ico" />';
add_action('wp_head', 'blog_favicon');

// add a favicon for your admin
function admin_favicon() {
	echo '<link rel="Shortcut Icon" type="image/x-icon" href="'.get_bloginfo('stylesheet_directory').'/images/favicon.png" />';
add_action('admin_head', 'admin_favicon');
// custom admin login logo
function custom_login_logo() {
	echo '<style type="text/css">
	h1 a { background-image: url('.get_bloginfo('template_directory').'/images/custom-login-logo.png) !important; }
add_action('login_head', 'custom_login_logo');
// disable all widget areas
function disable_all_widgets($sidebars_widgets) {
	//if (is_home())
		$sidebars_widgets = array(false);
	return $sidebars_widgets;
add_filter('sidebars_widgets', 'disable_all_widgets');
// kill the admin nag
if (!current_user_can('edit_users')) {
	add_action('init', create_function('$a', "remove_action('init', 'wp_version_check');"), 2);
	add_filter('pre_option_update_core', create_function('$a', "return null;"));
// category id in body and post class
function category_id_class($classes) {
	global $post;
	foreach((get_the_category($post-<ID)) as $category)
		$classes [] = 'cat-' . $category-<cat_ID . '-id';
		return $classes;
add_filter('post_class', 'category_id_class');
add_filter('body_class', 'category_id_class');

// get the first category id
function get_first_category_ID() {
	$category = get_the_category();
	return $category[0]-<cat_ID;
// Custom user profile fields
function my_custom_userfields( $contactmethods ) {

	// Add contact custom fields
	$contactmethods['contact_phone_office']     = 'Office Phone';
	$contactmethods['contact_phone_mobile']     = 'Mobile Phone';
	$contactmethods['contact_office_fax']       = 'Office Fax';

	// Add address custom fields
	$contactmethods['address_line_1']       = 'Address Line 1';
	$contactmethods['address_line_2']       = 'Address Line 2 (optional)';
	$contactmethods['address_city']         = 'City';
	$contactmethods['address_state']        = 'State';
	$contactmethods['address_zipcode']      = 'Zipcode';
	return $contactmethods;
// Enable gzip
if(extension_loaded("zlib") && (ini_get("output_handler") != "ob_gzhandler"))
	add_action('wp', create_function('', '@ob_end_clean();@ini_set("zlib.output_compression", 1);'));

Hello world!

Posted: by Steffen Jørgensen

Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!

I choose to keep it…