VOOZH about

URL: https://developer.wordpress.org/reference/functions/get_bookmarks/

⇱ get_bookmarks() – Function | Developer.WordPress.org


Skip to content

WordPress Developer Resources

get_bookmarks()

HomeReferenceFunctionsget_bookmarks()

get_bookmarks( string|array $args = '' ): object[]

Retrieves the list of bookmarks.

Description

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

$argsstring|arrayoptional
String or array of arguments to retrieve bookmarks.
  • orderby string
    How to order the links by. Accepts 'id', 'link_id', 'name', 'link_name', 'url', 'link_url', 'visible', 'link_visible', 'rating', 'link_rating', 'owner', 'link_owner', 'updated', 'link_updated', 'notes', 'link_notes', 'description', 'link_description', 'length' and 'rand'.
    When $orderby is 'length', orders by the character length of 'link_name'. Default 'name'.
  • order string
    Whether to order bookmarks in ascending or descending order.
    Accepts 'ASC' (ascending) or 'DESC' (descending). Default 'ASC'.
  • limit int
    Amount of bookmarks to display. Accepts any positive number or -1 for all. Default -1.
  • category string
    Comma-separated list of category IDs to include links from.
  • category_name string
    Category to retrieve links for by name.
  • hide_invisible int|bool
    Whether to show or hide links marked as 'invisible'. Accepts 1|true or 0|false. Default 1|true.
  • show_updated int|bool
    Whether to display the time the bookmark was last updated.
    Accepts 1|true or 0|false. Default 0|false.
  • include string
    Comma-separated list of bookmark IDs to include.
  • exclude string
    Comma-separated list of bookmark IDs to exclude.
  • search string
    Search terms. Will be SQL-formatted with wildcards before and after and searched in 'link_url', 'link_name' and 'link_description'.

Default:''

Return

object[] List of bookmark row objects.

Source

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' => '',
	);

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

	$key = md5( serialize( $parsed_args ) );
	$cache = wp_cache_get( 'get_bookmarks', 'bookmark' );

	if ( 'rand' !== $parsed_args['orderby'] && $cache ) {
		if ( is_array( $cache ) && isset( $cache[ $key ] ) ) {
			$bookmarks = $cache[ $key ];
			/**
			 * Filters the returned list of bookmarks.
			 *
			 * The first time the hook is evaluated in this file, it returns the cached
			 * bookmarks list. The second evaluation returns a cached bookmarks list if the
			 * link category is passed but does not exist. The third evaluation returns
			 * the full cached results.
			 *
			 * @since 2.1.0
			 *
			 * @see get_bookmarks()
			 *
			 * @param array $bookmarks List of the cached bookmarks.
			 * @param array $parsed_args An array of bookmark query arguments.
			 */
			return apply_filters( 'get_bookmarks', $bookmarks, $parsed_args );
		}
	}

	if ( ! is_array( $cache ) ) {
		$cache = array();
	}

	$inclusions = '';
	if ( ! empty( $parsed_args['include'] ) ) {
		$parsed_args['exclude'] = ''; // Ignore exclude, category, and category_name params if using include.
		$parsed_args['category'] = '';
		$parsed_args['category_name'] = '';

		$inclinks = wp_parse_id_list( $parsed_args['include'] );
		if ( count( $inclinks ) ) {
			foreach ( $inclinks as $inclink ) {
				if ( empty( $inclusions ) ) {
					$inclusions = ' AND ( link_id = ' . $inclink . ' ';
				} else {
					$inclusions .= ' OR link_id = ' . $inclink . ' ';
				}
			}
		}
	}
	if ( ! empty( $inclusions ) ) {
		$inclusions .= ')';
	}

	$exclusions = '';
	if ( ! empty( $parsed_args['exclude'] ) ) {
		$exlinks = wp_parse_id_list( $parsed_args['exclude'] );
		if ( count( $exlinks ) ) {
			foreach ( $exlinks as $exlink ) {
				if ( empty( $exclusions ) ) {
					$exclusions = ' AND ( link_id <> ' . $exlink . ' ';
				} else {
					$exclusions .= ' AND link_id <> ' . $exlink . ' ';
				}
			}
		}
	}
	if ( ! empty( $exclusions ) ) {
		$exclusions .= ')';
	}

	if ( ! empty( $parsed_args['category_name'] ) ) {
		$parsed_args['category'] = get_term_by( 'name', $parsed_args['category_name'], 'link_category' );
		if ( $parsed_args['category'] ) {
			$parsed_args['category'] = $parsed_args['category']->term_id;
		} else {
			$cache[ $key ] = array();
			wp_cache_set( 'get_bookmarks', $cache, 'bookmark' );
			/** This filter is documented in wp-includes/bookmark.php */
			return apply_filters( 'get_bookmarks', array(), $parsed_args );
		}
	}

	$search = '';
	if ( ! empty( $parsed_args['search'] ) ) {
		$like = '%' . $wpdb->esc_like( $parsed_args['search'] ) . '%';
		$search = $wpdb->prepare( ' AND ( (link_url LIKE %s) OR (link_name LIKE %s) OR (link_description LIKE %s) ) ', $like, $like, $like );
	}

	$category_query = '';
	$join = '';
	if ( ! empty( $parsed_args['category'] ) ) {
		$incategories = wp_parse_id_list( $parsed_args['category'] );
		if ( count( $incategories ) ) {
			foreach ( $incategories as $incat ) {
				if ( empty( $category_query ) ) {
					$category_query = ' AND ( tt.term_id = ' . $incat . ' ';
				} else {
					$category_query .= ' OR tt.term_id = ' . $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 ( $parsed_args['show_updated'] ) {
		$recently_updated_test = ', IF (DATE_ADD(link_updated, INTERVAL 120 MINUTE) >= NOW(), 1,0) as recently_updated ';
	} else {
		$recently_updated_test = '';
	}

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

	$orderby = strtolower( $parsed_args['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();
			$keys = array( 'link_id', 'link_name', 'link_url', 'link_visible', 'link_rating', 'link_owner', 'link_updated', 'link_notes', 'link_description' );
			foreach ( explode( ',', $orderby ) as $ordparam ) {
				$ordparam = trim( $ordparam );

				if ( in_array( 'link_' . $ordparam, $keys, true ) ) {
					$orderparams[] = 'link_' . $ordparam;
				} elseif ( in_array( $ordparam, $keys, true ) ) {
					$orderparams[] = $ordparam;
				}
			}
			$orderby = implode( ',', $orderparams );
	}

	if ( empty( $orderby ) ) {
		$orderby = 'link_name';
	}

	$order = strtoupper( $parsed_args['order'] );
	if ( '' !== $order && ! in_array( $order, array( 'ASC', 'DESC' ), true ) ) {
		$order = 'ASC';
	}

	$visible = '';
	if ( $parsed_args['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 ( -1 !== $parsed_args['limit'] ) {
		$query .= ' LIMIT ' . absint( $parsed_args['limit'] );
	}

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

	if ( 'rand()' !== $orderby ) {
		$cache[ $key ] = $results;
		wp_cache_set( 'get_bookmarks', $cache, 'bookmark' );
	}

	/** This filter is documented in wp-includes/bookmark.php */
	return apply_filters( 'get_bookmarks', $results, $parsed_args );
}

View all references View on Trac View on GitHub

Hooks

apply_filters( ‘get_bookmarks’, ,  )

Filters the returned list of bookmarks.

Related

UsesDescription
wpdb::esc_like()wp-includes/class-wpdb.php

First half of escaping for LIKE special characters % and _ before preparing for SQL.

wp_cache_set()wp-includes/cache.php

Saves the data to the cache.

wp_parse_id_list()wp-includes/functions.php

Cleans up an array, comma- or space-separated list of IDs.

get_term_by()wp-includes/taxonomy.php

Gets all term data from database by term field and data.

wp_cache_get()wp-includes/cache.php

Retrieves the cache contents from the cache by key and group.

wp_parse_args()wp-includes/functions.php

Merges user defined arguments into defaults array.

absint()wp-includes/load.php

Converts a value to non-negative integer.

apply_filters()wp-includes/plugin.php

Calls the callback functions that have been added to a filter hook.

wpdb::get_results()wp-includes/class-wpdb.php

Retrieves an entire SQL result set from the database (i.e., many rows).

wpdb::prepare()wp-includes/class-wpdb.php

Prepares a SQL query for safe execution.

Show 6 moreShow less
Used byDescription
WP_Links_List_Table::prepare_items()wp-admin/includes/class-wp-links-list-table.php
get_links()wp-includes/deprecated.php

Gets the links associated with category by ID.

get_linkobjects()wp-includes/deprecated.php

Gets an array of link objects associated with category n.

wp_list_bookmarks()wp-includes/bookmark-template.php

Retrieves or echoes all of the bookmarks.

Changelog

VersionDescription
2.1.0Introduced.

User Contributed Notes

  1. Skip to note 2 content

    Example

    – Create a link category named “Related Sites”
    – Create a few links, adding them to the “Related Sites” category

    You may use the following code in your templates to retrieve the links:

    $bookmarks = get_bookmarks( array(
    	'orderby' => 'name',
    	'order' => 'ASC',
    	'category_name' => 'Related Sites'
    ) );
    
    // Loop through each bookmark and print formatted output
    foreach ( $bookmarks as $bookmark ) { 
     printf( '<a class="relatedlink" href="%1$s">%2$s</a><br />', esc_attr( $bookmark->link_url ), $bookmark->link_name );
    }

You must log in before being able to contribute a note or feedback.