WordPress blogroll link order – Change widget behaviour

Print Friendly, PDF & Email

Another quickie here. Although people use various blogroll plugins, sometimes the standard widget has it’s place (some themes don’t allow custom code to be used in some areas of your blog, for example). The problem is that the standard widget only displays links in alphabetical order based on the link name. There are two ways you can correct this.

1.) Change the default behaviour of the script that produces the blogroll lists

No problem, just go along to /wp-includes/bookmark-template.php – and find the code around line 198

function wp_list_bookmarks($args = '') {
	$defaults = array(
		'orderby' => 'rating', 'order' => 'DESC',
		'limit' => -1, 'category' => '', 'exclude_category' => '',
		'category_name' => '', 'hide_invisible' => 1,
		'show_updated' => 0, 'echo' => 1,
		'categorize' => 1, 'title_li' => __('Bookmarks'),
		'title_before' => '<h2>', 'title_after' => '</h2>',
		'category_orderby' => 'name', 'category_order' => 'ASC',
		'class' => 'linkcat', 'category_before' => '<li id="%id" class="%class">',
		'category_after' => '</li>'
	);

You can see here, I have already changed the default behaviour to order the list by rating, in descending order. So, I then just applied a rating of 10 to link items I want at the top of my list, and 0 to the ones at the bottom! Simple.

Valid values for the orderby field are:

  • id
  • url
  • name
  • target
  • description
  • owner
  • rating
  • updated
  • rel
  • notes
  • rss
  • length
  • rand – Display bookmarks in random order.

The order field can be set to the following valid values : ASC (ascending), or DESC (descending)

2.) Change the standard widget code to submit extra parameters

Edit the file /wp-includes/default-widgets.php and go look for the Links Widget Class (line 90 for WP v2.9.2). Look a little further down and you will see the call to the function wp_list_bookmarks.

Here is the block of code involved, with a couple of extra array parameters amended to the end to control the sort criteria and ordering:

wp_list_bookmarks(apply_filters('widget_links_args', array(
			'title_before' => $before_title, 'title_after' => $after_title,
			'category_before' => $before_widget, 'category_after' => $after_widget,
			'show_images' => $show_images, 'show_description' => $show_description,
			'show_name' => $show_name, 'show_rating' => $show_rating,
			'category' => $category, 'class' => 'linkcat widget',
			'orderby' => 'rating', 'order' => 'DESC'
		)));

You can see where I have added the orderby and order array values. Be careful to include the comma at the end of the previous line otherwise you will get syntax errors.

Again, you can use all of the values for the orderby field that are shown above for method 1.

Enjoy!

Tags: ,

4 Responses to “WordPress blogroll link order – Change widget behaviour”

  1. StuartH March 21, 2012 at 3:56 pm #

    Very helpful – thanks!

  2. Endyst April 13, 2011 at 1:42 pm #

    Hi! Very helpful! Thanks for sharing…

  3. Roshan Ahmed June 9, 2010 at 3:22 pm #

    Hi Steve,
    It was a great tutorial. Anyway, I don’t use WordPress (website nor software). I use Blogger and we can add the ‘Blogroll’ widget with a click. Anyway, there are only two ways to sort the links ( alphabetically and most recently updated). There may be some techniques to add more options (like this one!)

    Cheers!!

  4. Andy Calloway June 9, 2010 at 11:02 am #

    w00T! I was losing you until you explained where you added the ‘orderby’ stuff, thanks for making it clear. Also, the fact I can use all the values for the field really helps.

    I love you.

Leave a Reply

Bot test * Time limit is exhausted. Please reload the CAPTCHA.