Advertisements

get_bookmarks

Definition:
function get_bookmarks($args = '') {}

Retrieves the list of bookmarks
Attempts to retrieve from the cache first based on MD5 hash of arguments. If that fails, then the query will be built from the arguments and executed. The results will be stored to the cache.

Parameters

  • string|array $args: List of arguments to overwrite the defaults

Return values

returns:List of bookmark row objects

Defined filters

  • get_bookmarks
    apply_filters('get_bookmarks', $cache[ $key ], $r )
  • get_bookmarks
    apply_filters( 'get_bookmarks', array()
  • get_bookmarks
    apply_filters('get_bookmarks', $results, $r)

Source code

function get_bookmarks($args = '') {

	global $wpdb;



	$defaults = array(

		'orderby' => 'name', 'order' => 'ASC',

		'limit' => -1, 'category' => '',

		'category_name' => '', 'hide_invisible' => 1,

		'show_updated' => 0, 'include' => '',

		'exclude' => '', 'search' => ''

	);



	$r = wp_parse_args( $args, $defaults );

	extract( $r, EXTR_SKIP );



	$cache = array();

	$key = md5( serialize( $r ) );

	if ( $cache = wp_cache_get( 'get_bookmarks', 'bookmark' ) ) {

		if ( is_array($cache) && isset( $cache[ $key ] ) )

			return apply_filters('get_bookmarks', $cache[ $key ], $r );

	}



	if ( !is_array($cache) )

		$cache = array();



	$inclusions = '';

	if ( !empty($include) ) {

		$exclude = '';  //ignore exclude, category, and category_name params if using include

		$category = '';

		$category_name = '';

		$inclinks = preg_split('/[\s,]+/',$include);

		if ( count($inclinks) ) {

			foreach ( $inclinks as $inclink ) {

				if (empty($inclusions))

					$inclusions = ' AND ( link_id = ' . intval($inclink) . ' ';

				else

					$inclusions .= ' OR link_id = ' . intval($inclink) . ' ';

			}

		}

	}

	if (!empty($inclusions))

		$inclusions .= ')';



	$exclusions = '';

	if ( !empty($exclude) ) {

		$exlinks = preg_split('/[\s,]+/',$exclude);

		if ( count($exlinks) ) {

			foreach ( $exlinks as $exlink ) {

				if (empty($exclusions))

					$exclusions = ' AND ( link_id <> ' . intval($exlink) . ' ';

				else

					$exclusions .= ' AND link_id <> ' . intval($exlink) . ' ';

			}

		}

	}

	if (!empty($exclusions))

		$exclusions .= ')';



	if ( !empty($category_name) ) {

		if ( $category = get_term_by('name', $category_name, 'link_category') ) {

			$category = $category->term_id;

		} else {

			$cache[ $key ] = array();

			wp_cache_set( 'get_bookmarks', $cache, 'bookmark' );

			return apply_filters( 'get_bookmarks', array(), $r );

		}

	}



	if ( ! empty($search) ) {

		$search = like_escape($search);

		$search = " AND ( (link_url LIKE '%$search%') OR (link_name LIKE '%$search%') OR (link_description LIKE '%$search%') ) ";

	}



	$category_query = '';

	$join = '';

	if ( !empty($category) ) {

		$incategories = preg_split('/[\s,]+/',$category);

		if ( count($incategories) ) {

			foreach ( $incategories as $incat ) {

				if (empty($category_query))

					$category_query = ' AND ( tt.term_id = ' . intval($incat) . ' ';

				else

					$category_query .= ' OR tt.term_id = ' . intval($incat) . ' ';

			}

		}

	}

	if (!empty($category_query)) {

		$category_query .= ") AND taxonomy = 'link_category'";

		$join = " INNER JOIN $wpdb->term_relationships AS tr ON ($wpdb->links.link_id = tr.object_id) INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_taxonomy_id = tr.term_taxonomy_id";

	}



	if ( $show_updated && get_option('links_recently_updated_time') ) {

		$recently_updated_test = ", IF (DATE_ADD(link_updated, INTERVAL " . get_option('links_recently_updated_time') . " MINUTE) >= NOW(), 1,0) as recently_updated ";

	} else {

		$recently_updated_test = '';

	}



	$get_updated = ( $show_updated ) ? ', UNIX_TIMESTAMP(link_updated) AS link_updated_f ' : '';



	$orderby = strtolower($orderby);

	$length = '';

	switch ( $orderby ) {

		case 'length':

			$length = ", CHAR_LENGTH(link_name) AS length";

			break;

		case 'rand':

			$orderby = 'rand()';

			break;

		case 'link_id':

			$orderby = "$wpdb->links.link_id";

			break;

		default:

			$orderparams = array();

			foreach ( explode(',', $orderby) as $ordparam ) {

				$ordparam = trim($ordparam);

				$keys = array( 'link_id', 'link_name', 'link_url', 'link_visible', 'link_rating', 'link_owner', 'link_updated', 'link_notes' );

				if ( in_array( 'link_' . $ordparam, $keys ) )

					$orderparams[] = 'link_' . $ordparam;

				elseif ( in_array( $ordparam, $keys ) )

					$orderparams[] = $ordparam;

			}

			$orderby = implode(',', $orderparams);

	}



	if ( empty( $orderby ) )

		$orderby = 'link_name';



	$order = strtoupper( $order );

	if ( '' !== $order && !in_array( $order, array( 'ASC', 'DESC' ) ) )

		$order = 'ASC';



	$visible = '';

	if ( $hide_invisible )

		$visible = "AND link_visible = 'Y'";



	$query = "SELECT * $length $recently_updated_test $get_updated FROM $wpdb->links $join WHERE 1=1 $visible $category_query";

	$query .= " $exclusions $inclusions $search";

	$query .= " ORDER BY $orderby $order";

	if ($limit != -1)

		$query .= " LIMIT $limit";



	$results = $wpdb->get_results($query);



	$cache[ $key ] = $results;

	wp_cache_set( 'get_bookmarks', $cache, 'bookmark' );



	return apply_filters('get_bookmarks', $results, $r);

}

1226

Advertisements

No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: