2006-06-05 04:12:59 +02:00
< ? php
2007-12-24 08:01:47 +01:00
/**
* Link / Bookmark API
*
* @ package WordPress
* @ subpackage Bookmark
*/
/**
2022-06-24 00:57:12 +02:00
* Retrieves bookmark data .
2007-12-24 08:01:47 +01:00
*
2008-08-27 08:45:13 +02:00
* @ since 2.1 . 0
2014-10-31 18:56:22 +01:00
*
* @ global wpdb $wpdb WordPress database abstraction object .
2007-12-24 08:01:47 +01:00
*
2014-12-01 02:34:24 +01:00
* @ param int | stdClass $bookmark
2020-07-23 23:55:04 +02:00
* @ param string $output Optional . The required return type . One of OBJECT , ARRAY_A , or ARRAY_N , which
* correspond to an stdClass object , an associative array , or a numeric array ,
* respectively . Default OBJECT .
2020-07-23 22:01:04 +02:00
* @ param string $filter Optional . How to sanitize bookmark fields . Default 'raw' .
2015-05-21 22:13:25 +02:00
* @ return array | object | null Type returned depends on $output value .
2007-12-24 08:01:47 +01:00
*/
2017-12-01 00:11:00 +01:00
function get_bookmark ( $bookmark , $output = OBJECT , $filter = 'raw' ) {
2006-06-05 04:12:59 +02:00
global $wpdb ;
2017-12-01 00:11:00 +01:00
if ( empty ( $bookmark ) ) {
if ( isset ( $GLOBALS [ 'link' ] ) ) {
2008-08-28 00:04:12 +02:00
$_bookmark = & $GLOBALS [ 'link' ];
2017-12-01 00:11:00 +01:00
} else {
2008-08-28 00:04:12 +02:00
$_bookmark = null ;
2017-12-01 00:11:00 +01:00
}
} elseif ( is_object ( $bookmark ) ) {
wp_cache_add ( $bookmark -> link_id , $bookmark , 'bookmark' );
2008-08-28 00:04:12 +02:00
$_bookmark = $bookmark ;
} else {
2017-12-01 00:11:00 +01:00
if ( isset ( $GLOBALS [ 'link' ] ) && ( $GLOBALS [ 'link' ] -> link_id == $bookmark ) ) {
2008-08-28 00:04:12 +02:00
$_bookmark = & $GLOBALS [ 'link' ];
2019-07-03 01:42:58 +02:00
} else {
$_bookmark = wp_cache_get ( $bookmark , 'bookmark' );
if ( ! $_bookmark ) {
$_bookmark = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->links WHERE link_id = %d LIMIT 1 " , $bookmark ) );
if ( $_bookmark ) {
$_bookmark -> link_category = array_unique ( wp_get_object_terms ( $_bookmark -> link_id , 'link_category' , array ( 'fields' => 'ids' ) ) );
wp_cache_add ( $_bookmark -> link_id , $_bookmark , 'bookmark' );
}
2012-09-13 18:41:43 +02:00
}
2008-08-28 00:04:12 +02:00
}
}
2006-06-05 04:12:59 +02:00
2017-12-01 00:11:00 +01:00
if ( ! $_bookmark ) {
2012-09-13 18:41:43 +02:00
return $_bookmark ;
2017-12-01 00:11:00 +01:00
}
2012-09-13 18:41:43 +02:00
2017-12-01 00:11:00 +01:00
$_bookmark = sanitize_bookmark ( $_bookmark , $filter );
2007-09-04 01:19:20 +02:00
2021-03-21 13:41:04 +01:00
if ( OBJECT === $output ) {
2008-08-28 00:04:12 +02:00
return $_bookmark ;
2021-03-21 13:41:04 +01:00
} elseif ( ARRAY_A === $output ) {
2017-12-01 00:11:00 +01:00
return get_object_vars ( $_bookmark );
2021-03-21 13:41:04 +01:00
} elseif ( ARRAY_N === $output ) {
2017-12-01 00:11:00 +01:00
return array_values ( get_object_vars ( $_bookmark ) );
2006-06-05 04:12:59 +02:00
} else {
2008-08-28 00:04:12 +02:00
return $_bookmark ;
2006-06-05 04:12:59 +02:00
}
}
2007-12-24 08:01:47 +01:00
/**
2022-06-24 00:57:12 +02:00
* Retrieves single bookmark data item or field .
2007-12-24 08:01:47 +01:00
*
2008-08-27 08:45:13 +02:00
* @ since 2.3 . 0
2007-12-24 08:01:47 +01:00
*
2020-07-23 22:01:04 +02:00
* @ param string $field The name of the data field to return .
* @ param int $bookmark The bookmark ID to get field .
* @ param string $context Optional . The context of how the field will be used .
2015-05-21 22:13:25 +02:00
* @ return string | WP_Error
2007-12-24 08:01:47 +01:00
*/
2007-08-21 00:50:04 +02:00
function get_bookmark_field ( $field , $bookmark , $context = 'display' ) {
$bookmark = ( int ) $bookmark ;
$bookmark = get_bookmark ( $bookmark );
2017-12-01 00:11:00 +01:00
if ( is_wp_error ( $bookmark ) ) {
2007-08-21 00:50:04 +02:00
return $bookmark ;
2017-12-01 00:11:00 +01:00
}
2007-08-21 00:50:04 +02:00
2017-12-01 00:11:00 +01:00
if ( ! is_object ( $bookmark ) ) {
2007-08-21 00:50:04 +02:00
return '' ;
2017-12-01 00:11:00 +01:00
}
2007-08-21 00:50:04 +02:00
2017-12-01 00:11:00 +01:00
if ( ! isset ( $bookmark -> $field ) ) {
2007-08-21 00:50:04 +02:00
return '' ;
2017-12-01 00:11:00 +01:00
}
2007-08-21 00:50:04 +02:00
2017-12-01 00:11:00 +01:00
return sanitize_bookmark_field ( $field , $bookmark -> $field , $bookmark -> link_id , $context );
2007-08-21 00:50:04 +02:00
}
2007-12-24 08:01:47 +01:00
/**
2022-06-24 00:57:12 +02:00
* Retrieves the list of bookmarks .
2007-12-24 08:01:47 +01:00
*
* 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 .
*
2008-08-27 08:45:13 +02:00
* @ since 2.1 . 0
2007-12-24 08:01:47 +01:00
*
2014-10-31 18:56:22 +01:00
* @ global wpdb $wpdb WordPress database abstraction object .
2014-07-12 01:03:13 +02:00
*
* @ param string | array $args {
* Optional . String or array of arguments to retrieve bookmarks .
*
2019-09-16 21:55:56 +02:00
* @ type string $orderby 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' .
2014-07-12 01:03:13 +02:00
* @ type string $order Whether to order bookmarks in ascending or descending order .
* Accepts 'ASC' ( ascending ) or 'DESC' ( descending ) . Default 'ASC' .
2019-09-16 21:55:56 +02:00
* @ type int $limit Amount of bookmarks to display . Accepts any positive number or
* - 1 for all . Default - 1.
2020-06-20 14:02:12 +02:00
* @ type string $category Comma - separated list of category IDs to include links from .
2014-07-12 01:03:13 +02:00
* Default empty .
* @ type string $category_name Category to retrieve links for by name . Default empty .
* @ type int | bool $hide_invisible Whether to show or hide links marked as 'invisible' . Accepts
* 1 | true or 0 | false . Default 1 | true .
* @ type int | bool $show_updated Whether to display the time the bookmark was last updated .
* Accepts 1 | true or 0 | false . Default 0 | false .
* @ type string $include Comma - separated list of bookmark IDs to include . Default empty .
* @ type string $exclude Comma - separated list of bookmark IDs to exclude . Default empty .
2019-09-16 21:55:56 +02:00
* @ type string $search Search terms . Will be SQL - formatted with wildcards before and after
* and searched in 'link_url' , 'link_name' and 'link_description' .
* Default empty .
2014-07-12 01:03:13 +02:00
* }
2019-11-05 22:27:02 +01:00
* @ return object [] List of bookmark row objects .
2007-12-24 08:01:47 +01:00
*/
2014-05-15 03:58:15 +02:00
function get_bookmarks ( $args = '' ) {
2006-06-05 04:12:59 +02:00
global $wpdb ;
2007-06-14 04:25:30 +02:00
2007-05-11 05:10:05 +02:00
$defaults = array (
2017-12-01 00:11:00 +01:00
'orderby' => 'name' ,
'order' => 'ASC' ,
'limit' => - 1 ,
'category' => '' ,
'category_name' => '' ,
'hide_invisible' => 1 ,
'show_updated' => 0 ,
'include' => '' ,
'exclude' => '' ,
'search' => '' ,
2007-05-11 05:10:05 +02:00
);
2007-06-14 04:25:30 +02:00
2019-07-25 02:48:58 +02:00
$parsed_args = wp_parse_args ( $args , $defaults );
2006-06-05 04:12:59 +02:00
2019-07-25 02:48:58 +02:00
$key = md5 ( serialize ( $parsed_args ) );
2019-07-03 01:42:58 +02:00
$cache = wp_cache_get ( 'get_bookmarks' , 'bookmark' );
2019-07-25 02:48:58 +02:00
if ( 'rand' !== $parsed_args [ 'orderby' ] && $cache ) {
2014-05-15 03:58:15 +02:00
if ( is_array ( $cache ) && isset ( $cache [ $key ] ) ) {
2013-10-26 18:53:09 +02:00
$bookmarks = $cache [ $key ];
/**
2016-05-22 20:50:28 +02:00
* Filters the returned list of bookmarks .
2013-10-26 18:53:09 +02:00
*
* 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 ()
*
2020-01-21 16:41:04 +01:00
* @ param array $bookmarks List of the cached bookmarks .
* @ param array $parsed_args An array of bookmark query arguments .
2013-10-26 18:53:09 +02:00
*/
2019-07-25 02:48:58 +02:00
return apply_filters ( 'get_bookmarks' , $bookmarks , $parsed_args );
2013-11-08 03:20:10 +01:00
}
2008-12-19 08:05:51 +01:00
}
2014-05-15 03:58:15 +02:00
if ( ! is_array ( $cache ) ) {
2008-12-19 08:05:51 +01:00
$cache = array ();
2014-05-15 03:58:15 +02:00
}
2006-11-23 18:04:05 +01:00
2006-06-05 04:12:59 +02:00
$inclusions = '' ;
2019-07-25 02:48:58 +02:00
if ( ! empty ( $parsed_args [ 'include' ] ) ) {
2020-01-29 01:45:18 +01:00
$parsed_args [ 'exclude' ] = '' ; // Ignore exclude, category, and category_name params if using include.
2019-07-25 02:48:58 +02:00
$parsed_args [ 'category' ] = '' ;
$parsed_args [ 'category_name' ] = '' ;
$inclinks = wp_parse_id_list ( $parsed_args [ 'include' ] );
2014-05-15 03:58:15 +02:00
if ( count ( $inclinks ) ) {
2006-06-05 04:12:59 +02:00
foreach ( $inclinks as $inclink ) {
2014-05-15 03:58:15 +02:00
if ( empty ( $inclusions ) ) {
2019-01-10 22:06:49 +01:00
$inclusions = ' AND ( link_id = ' . $inclink . ' ' ;
2014-05-15 03:58:15 +02:00
} else {
2019-01-10 22:06:49 +01:00
$inclusions .= ' OR link_id = ' . $inclink . ' ' ;
2014-05-15 03:58:15 +02:00
}
2006-06-05 04:12:59 +02:00
}
}
}
2017-12-01 00:11:00 +01:00
if ( ! empty ( $inclusions ) ) {
2006-06-05 04:12:59 +02:00
$inclusions .= ')' ;
2014-05-15 03:58:15 +02:00
}
2006-06-05 04:12:59 +02:00
$exclusions = '' ;
2019-07-25 02:48:58 +02:00
if ( ! empty ( $parsed_args [ 'exclude' ] ) ) {
$exlinks = wp_parse_id_list ( $parsed_args [ 'exclude' ] );
2014-05-15 03:58:15 +02:00
if ( count ( $exlinks ) ) {
2006-06-05 04:12:59 +02:00
foreach ( $exlinks as $exlink ) {
2014-05-15 03:58:15 +02:00
if ( empty ( $exclusions ) ) {
2019-01-10 22:06:49 +01:00
$exclusions = ' AND ( link_id <> ' . $exlink . ' ' ;
2014-05-15 03:58:15 +02:00
} else {
2019-01-10 22:06:49 +01:00
$exclusions .= ' AND link_id <> ' . $exlink . ' ' ;
2014-05-15 03:58:15 +02:00
}
2006-06-05 04:12:59 +02:00
}
}
}
2014-05-15 03:58:15 +02:00
if ( ! empty ( $exclusions ) ) {
2006-06-05 04:12:59 +02:00
$exclusions .= ')' ;
2014-05-15 03:58:15 +02:00
}
2007-02-27 16:24:54 +01:00
2019-07-25 02:48:58 +02:00
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 ;
2009-04-23 07:39:33 +02:00
} else {
$cache [ $key ] = array ();
wp_cache_set ( 'get_bookmarks' , $cache , 'bookmark' );
2013-10-26 18:53:09 +02:00
/** This filter is documented in wp-includes/bookmark.php */
2019-07-25 02:48:58 +02:00
return apply_filters ( 'get_bookmarks' , array (), $parsed_args );
2009-04-23 07:39:33 +02:00
}
2006-06-05 04:12:59 +02:00
}
2014-05-15 03:58:15 +02:00
$search = '' ;
2019-07-25 02:48:58 +02:00
if ( ! empty ( $parsed_args [ 'search' ] ) ) {
$like = '%' . $wpdb -> esc_like ( $parsed_args [ 'search' ] ) . '%' ;
2017-12-01 00:11:00 +01:00
$search = $wpdb -> prepare ( ' AND ( (link_url LIKE %s) OR (link_name LIKE %s) OR (link_description LIKE %s) ) ' , $like , $like , $like );
2008-02-12 09:01:32 +01:00
}
2006-06-05 04:12:59 +02:00
$category_query = '' ;
2017-12-01 00:11:00 +01:00
$join = '' ;
2019-07-25 02:48:58 +02:00
if ( ! empty ( $parsed_args [ 'category' ] ) ) {
$incategories = wp_parse_id_list ( $parsed_args [ 'category' ] );
2017-12-01 00:11:00 +01:00
if ( count ( $incategories ) ) {
2006-06-05 04:12:59 +02:00
foreach ( $incategories as $incat ) {
2014-05-15 03:58:15 +02:00
if ( empty ( $category_query ) ) {
2019-01-10 22:06:49 +01:00
$category_query = ' AND ( tt.term_id = ' . $incat . ' ' ;
2014-05-15 03:58:15 +02:00
} else {
2019-01-10 22:06:49 +01:00
$category_query .= ' OR tt.term_id = ' . $incat . ' ' ;
2014-05-15 03:58:15 +02:00
}
2006-06-05 04:12:59 +02:00
}
}
}
2014-05-15 03:58:15 +02:00
if ( ! empty ( $category_query ) ) {
2007-05-27 19:21:04 +02:00
$category_query .= " ) AND taxonomy = 'link_category' " ;
2017-12-01 00:11:00 +01:00
$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 " ;
2006-06-05 04:12:59 +02:00
}
2019-07-25 02:48:58 +02:00
if ( $parsed_args [ 'show_updated' ] ) {
2017-12-01 00:11:00 +01:00
$recently_updated_test = ', IF (DATE_ADD(link_updated, INTERVAL 120 MINUTE) >= NOW(), 1,0) as recently_updated ' ;
2006-06-05 04:12:59 +02:00
} else {
$recently_updated_test = '' ;
}
2019-07-25 02:48:58 +02:00
$get_updated = ( $parsed_args [ 'show_updated' ] ) ? ', UNIX_TIMESTAMP(link_updated) AS link_updated_f ' : '' ;
2006-06-05 04:12:59 +02:00
2019-07-25 02:48:58 +02:00
$orderby = strtolower ( $parsed_args [ 'orderby' ] );
2017-12-01 00:11:00 +01:00
$length = '' ;
2011-06-27 17:46:11 +02:00
switch ( $orderby ) {
2006-06-05 04:12:59 +02:00
case 'length' :
2017-12-01 00:11:00 +01:00
$length = ', CHAR_LENGTH(link_name) AS length' ;
2006-06-05 04:12:59 +02:00
break ;
case 'rand' :
$orderby = 'rand()' ;
break ;
2011-06-27 17:46:11 +02:00
case 'link_id' :
$orderby = " $wpdb->links .link_id " ;
break ;
2006-06-05 04:12:59 +02:00
default :
2010-04-18 06:45:09 +02:00
$orderparams = array ();
2017-12-01 00:11:00 +01:00
$keys = array ( 'link_id' , 'link_name' , 'link_url' , 'link_visible' , 'link_rating' , 'link_owner' , 'link_updated' , 'link_notes' , 'link_description' );
2014-05-15 03:58:15 +02:00
foreach ( explode ( ',' , $orderby ) as $ordparam ) {
$ordparam = trim ( $ordparam );
2020-04-05 05:02:11 +02:00
if ( in_array ( 'link_' . $ordparam , $keys , true ) ) {
2011-06-27 17:46:11 +02:00
$orderparams [] = 'link_' . $ordparam ;
2020-04-05 05:02:11 +02:00
} elseif ( in_array ( $ordparam , $keys , true ) ) {
2011-09-30 19:03:46 +02:00
$orderparams [] = $ordparam ;
2014-05-15 03:58:15 +02:00
}
2011-06-27 17:46:11 +02:00
}
2014-05-15 03:58:15 +02:00
$orderby = implode ( ',' , $orderparams );
2006-06-05 04:12:59 +02:00
}
2014-05-15 03:58:15 +02:00
if ( empty ( $orderby ) ) {
2011-06-27 17:46:11 +02:00
$orderby = 'link_name' ;
2014-05-15 03:58:15 +02:00
}
2011-06-27 17:46:11 +02:00
2019-07-25 02:48:58 +02:00
$order = strtoupper ( $parsed_args [ 'order' ] );
2020-04-05 05:02:11 +02:00
if ( '' !== $order && ! in_array ( $order , array ( 'ASC' , 'DESC' ), true ) ) {
2011-06-27 17:46:11 +02:00
$order = 'ASC' ;
2014-05-15 03:58:15 +02:00
}
2006-06-05 04:12:59 +02:00
$visible = '' ;
2019-07-25 02:48:58 +02:00
if ( $parsed_args [ 'hide_invisible' ] ) {
2006-06-05 04:12:59 +02:00
$visible = " AND link_visible = 'Y' " ;
2014-05-15 03:58:15 +02:00
}
2006-06-05 04:12:59 +02:00
2017-12-01 00:11:00 +01:00
$query = " SELECT * $length $recently_updated_test $get_updated FROM $wpdb->links $join WHERE 1=1 $visible $category_query " ;
2008-02-12 09:01:32 +01:00
$query .= " $exclusions $inclusions $search " ;
2006-06-05 04:12:59 +02:00
$query .= " ORDER BY $orderby $order " ;
2020-02-09 17:55:09 +01:00
if ( - 1 != $parsed_args [ 'limit' ] ) {
2019-07-25 02:48:58 +02:00
$query .= ' LIMIT ' . $parsed_args [ 'limit' ];
2014-05-15 03:58:15 +02:00
}
2006-06-05 04:12:59 +02:00
2014-05-15 03:58:15 +02:00
$results = $wpdb -> get_results ( $query );
2006-11-23 18:04:05 +01:00
2016-05-25 20:29:28 +02:00
if ( 'rand()' !== $orderby ) {
$cache [ $key ] = $results ;
wp_cache_set ( 'get_bookmarks' , $cache , 'bookmark' );
}
2006-11-23 18:04:05 +01:00
2013-10-26 18:53:09 +02:00
/** This filter is documented in wp-includes/bookmark.php */
2019-07-25 02:48:58 +02:00
return apply_filters ( 'get_bookmarks' , $results , $parsed_args );
2006-06-05 04:12:59 +02:00
}
2007-12-24 08:01:47 +01:00
/**
2020-06-20 14:02:12 +02:00
* Sanitizes all bookmark fields .
2007-12-24 08:01:47 +01:00
*
2008-08-27 08:45:13 +02:00
* @ since 2.3 . 0
2007-12-24 08:01:47 +01:00
*
2020-06-20 14:02:12 +02:00
* @ param stdClass | array $bookmark Bookmark row .
* @ param string $context Optional . How to filter the fields . Default 'display' .
2016-11-10 00:00:32 +01:00
* @ return stdClass | array Same type as $bookmark but with fields sanitized .
2007-12-24 08:01:47 +01:00
*/
2017-12-01 00:11:00 +01:00
function sanitize_bookmark ( $bookmark , $context = 'display' ) {
$fields = array (
'link_id' ,
'link_url' ,
'link_name' ,
'link_image' ,
'link_target' ,
'link_category' ,
'link_description' ,
'link_visible' ,
'link_owner' ,
'link_rating' ,
'link_updated' ,
'link_rel' ,
'link_notes' ,
'link_rss' ,
);
2007-08-21 00:50:04 +02:00
2017-12-01 00:11:00 +01:00
if ( is_object ( $bookmark ) ) {
2007-08-21 00:50:04 +02:00
$do_object = true ;
2017-12-01 00:11:00 +01:00
$link_id = $bookmark -> link_id ;
2008-11-15 00:01:16 +01:00
} else {
$do_object = false ;
2017-12-01 00:11:00 +01:00
$link_id = $bookmark [ 'link_id' ];
2008-11-15 00:01:16 +01:00
}
2007-08-21 00:50:04 +02:00
foreach ( $fields as $field ) {
2008-11-15 00:01:16 +01:00
if ( $do_object ) {
2017-12-01 00:11:00 +01:00
if ( isset ( $bookmark -> $field ) ) {
$bookmark -> $field = sanitize_bookmark_field ( $field , $bookmark -> $field , $link_id , $context );
}
2008-11-15 00:01:16 +01:00
} else {
2017-12-01 00:11:00 +01:00
if ( isset ( $bookmark [ $field ] ) ) {
$bookmark [ $field ] = sanitize_bookmark_field ( $field , $bookmark [ $field ], $link_id , $context );
}
2008-11-15 00:01:16 +01:00
}
2007-08-21 00:50:04 +02:00
}
return $bookmark ;
}
2007-12-24 08:01:47 +01:00
/**
2016-05-23 20:59:27 +02:00
* Sanitizes a bookmark field .
2007-12-24 08:01:47 +01:00
*
2008-05-25 17:45:05 +02:00
* Sanitizes the bookmark fields based on what the field name is . If the field
* has a strict value set , then it will be tested for that , else a more generic
2016-05-27 19:16:27 +02:00
* filtering is applied . After the more strict filter is applied , if the `$context`
* is 'raw' then the value is immediately return .
2007-12-24 08:01:47 +01:00
*
2016-05-27 19:16:27 +02:00
* Hooks exist for the more generic cases . With the 'edit' context , the { @ see 'edit_$field' }
* filter will be called and passed the `$value` and `$bookmark_id` respectively .
*
* With the 'db' context , the { @ see 'pre_$field' } filter is called and passed the value .
* The 'display' context is the final context and has the `$field` has the filter name
* and is passed the `$value` , `$bookmark_id` , and `$context` , respectively .
2007-12-24 08:01:47 +01:00
*
2008-08-27 08:45:13 +02:00
* @ since 2.3 . 0
2007-12-24 08:01:47 +01:00
*
2016-05-27 19:16:27 +02:00
* @ param string $field The bookmark field .
* @ param mixed $value The bookmark field value .
* @ param int $bookmark_id Bookmark ID .
2021-05-20 02:04:56 +02:00
* @ param string $context How to filter the field value . Accepts 'raw' , 'edit' , 'db' ,
* 'display' , 'attribute' , or 'js' . Default 'display' .
2016-05-27 19:16:27 +02:00
* @ return mixed The filtered value .
2007-12-24 08:01:47 +01:00
*/
2016-05-27 19:16:27 +02:00
function sanitize_bookmark_field ( $field , $value , $bookmark_id , $context ) {
2021-05-20 02:04:56 +02:00
$int_fields = array ( 'link_id' , 'link_rating' );
if ( in_array ( $field , $int_fields , true ) ) {
$value = ( int ) $value ;
}
2010-04-26 16:10:12 +02:00
switch ( $field ) {
2017-12-01 00:11:00 +01:00
case 'link_category' : // array( ints )
$value = array_map ( 'absint' , ( array ) $value );
// We return here so that the categories aren't filtered.
2020-01-29 01:45:18 +01:00
// The 'link_category' filter is for the name of a link category, not an array of a link's link categories.
2017-12-01 00:11:00 +01:00
return $value ;
case 'link_visible' : // bool stored as Y|N
$value = preg_replace ( '/[^YNyn]/' , '' , $value );
break ;
case 'link_target' : // "enum"
$targets = array ( '_top' , '_blank' );
2020-04-05 05:02:11 +02:00
if ( ! in_array ( $value , $targets , true ) ) {
2017-12-01 00:11:00 +01:00
$value = '' ;
}
break ;
2007-08-21 00:50:04 +02:00
}
2020-05-16 20:42:12 +02:00
if ( 'raw' === $context ) {
2007-08-21 00:50:04 +02:00
return $value ;
2017-12-01 00:11:00 +01:00
}
2007-08-21 00:50:04 +02:00
2020-05-16 20:42:12 +02:00
if ( 'edit' === $context ) {
2015-11-22 04:51:28 +01:00
/** This filter is documented in wp-includes/post.php */
2016-12-14 05:18:42 +01:00
$value = apply_filters ( " edit_ { $field } " , $value , $bookmark_id );
2007-08-21 00:50:04 +02:00
2020-05-16 20:42:12 +02:00
if ( 'link_notes' === $field ) {
2010-12-25 23:45:09 +01:00
$value = esc_html ( $value ); // textarea_escaped
2007-08-21 00:50:04 +02:00
} else {
2017-12-01 00:11:00 +01:00
$value = esc_attr ( $value );
2007-08-21 00:50:04 +02:00
}
2020-05-16 20:42:12 +02:00
} elseif ( 'db' === $context ) {
2015-11-22 04:51:28 +01:00
/** This filter is documented in wp-includes/post.php */
2016-12-14 05:18:42 +01:00
$value = apply_filters ( " pre_ { $field } " , $value );
2007-08-21 00:50:04 +02:00
} else {
2015-11-22 04:51:28 +01:00
/** This filter is documented in wp-includes/post.php */
2016-12-14 05:18:42 +01:00
$value = apply_filters ( " { $field } " , $value , $bookmark_id , $context );
2007-08-21 00:50:04 +02:00
2020-05-16 20:42:12 +02:00
if ( 'attribute' === $context ) {
2015-01-08 08:05:25 +01:00
$value = esc_attr ( $value );
2020-05-16 20:42:12 +02:00
} elseif ( 'js' === $context ) {
2015-01-08 08:05:25 +01:00
$value = esc_js ( $value );
}
2010-04-26 16:10:12 +02:00
}
2007-08-21 00:50:04 +02:00
2021-05-20 02:04:56 +02:00
// Restore the type for integer fields after esc_attr().
if ( in_array ( $field , $int_fields , true ) ) {
$value = ( int ) $value ;
}
2007-08-21 00:50:04 +02:00
return $value ;
}
2007-12-24 08:01:47 +01:00
/**
2015-12-19 00:01:28 +01:00
* Deletes the bookmark cache .
2007-12-24 08:01:47 +01:00
*
2008-08-28 00:04:12 +02:00
* @ since 2.7 . 0
2015-12-19 00:01:28 +01:00
*
* @ param int $bookmark_id Bookmark ID .
2007-12-24 08:01:47 +01:00
*/
2012-01-11 22:26:18 +01:00
function clean_bookmark_cache ( $bookmark_id ) {
2008-08-28 00:04:12 +02:00
wp_cache_delete ( $bookmark_id , 'bookmark' );
2006-11-23 18:04:05 +01:00
wp_cache_delete ( 'get_bookmarks' , 'bookmark' );
2017-12-01 00:11:00 +01:00
clean_object_term_cache ( $bookmark_id , 'link' );
2006-11-23 18:04:05 +01:00
}