2014-02-26 18:12:14 +01:00
< ? php
2008-10-14 00:00:07 +02:00
/**
* WordPress Link Template Functions
*
* @ package WordPress
* @ subpackage Template
*/
2004-01-27 10:58:01 +01:00
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Display the permalink for the current post .
2008-10-14 00:00:07 +02:00
*
* @ since 1.2 . 0
*/
2004-04-21 06:12:55 +02:00
function the_permalink () {
2014-04-14 04:13:16 +02:00
/**
* Filter the display of the permalink for the current post .
*
* @ since 1.5 . 0
*
* @ param string $permalink The permalink for the current post .
*/
2013-02-28 19:56:39 +01:00
echo esc_url ( apply_filters ( 'the_permalink' , get_permalink () ) );
2004-05-18 10:36:53 +02:00
}
2007-02-15 08:07:12 +01:00
/**
2008-10-22 05:08:33 +02:00
* Retrieve trailing slash string , if blog set for adding trailing slashes .
2008-10-14 00:00:07 +02:00
*
2008-10-22 05:08:33 +02:00
* Conditionally adds a trailing slash if the permalink structure has a trailing
* slash , strips the trailing slash if not . The string is passed through the
* 'user_trailingslashit' filter . Will remove trailing slash from string , if
* blog is not set to have them .
2008-10-14 00:00:07 +02:00
*
* @ since 2.2 . 0
2015-05-26 20:44:25 +02:00
* @ global WP_Rewrite $wp_rewrite
2008-10-14 00:00:07 +02:00
*
2010-09-07 13:21:11 +02:00
* @ param string $string URL with or without a trailing slash .
* @ param string $type_of_url The type of URL being considered ( e . g . single , category , etc ) for use in the filter .
2014-11-30 05:44:23 +01:00
* @ return string The URL with the trailing slash appended or stripped .
2007-02-15 08:07:12 +01:00
*/
2007-03-10 07:18:43 +01:00
function user_trailingslashit ( $string , $type_of_url = '' ) {
2007-02-15 08:07:12 +01:00
global $wp_rewrite ;
if ( $wp_rewrite -> use_trailing_slashes )
$string = trailingslashit ( $string );
else
2007-03-10 07:25:33 +01:00
$string = untrailingslashit ( $string );
2007-03-10 07:18:43 +01:00
2014-04-14 04:13:16 +02:00
/**
* Filter the trailing slashed string , depending on whether the site is set
* to use training slashes .
*
* @ since 2.2 . 0
*
* @ param string $string URL with or without a trailing slash .
* @ param string $type_of_url The type of URL being considered . Accepts 'single' , 'single_trackback' ,
* 'single_feed' , 'single_paged' , 'feed' , 'category' , 'page' , 'year' ,
* 'month' , 'day' , 'paged' , 'post_type_archive' .
*/
2015-05-26 20:44:25 +02:00
return apply_filters ( 'user_trailingslashit' , $string , $type_of_url );
2007-02-15 08:07:12 +01:00
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Display permalink anchor for current post .
2008-10-14 00:00:07 +02:00
*
2008-10-22 05:08:33 +02:00
* The permalink mode title will use the post title for the 'a' element 'id'
* attribute . The id mode uses 'post-' with the post ID for the 'id' attribute .
2008-10-14 00:00:07 +02:00
*
* @ since 0.71
*
2008-10-22 05:08:33 +02:00
* @ param string $mode Permalink mode can be either 'title' , 'id' , or default , which is 'id' .
2008-10-14 00:00:07 +02:00
*/
2012-09-04 18:29:28 +02:00
function permalink_anchor ( $mode = 'id' ) {
$post = get_post ();
switch ( strtolower ( $mode ) ) {
2005-10-18 01:41:28 +02:00
case 'title' :
2012-09-04 18:29:28 +02:00
$title = sanitize_title ( $post -> post_title ) . '-' . $post -> ID ;
2005-10-18 01:41:28 +02:00
echo '<a id="' . $title . '"></a>' ;
break ;
case 'id' :
default :
echo '<a id="post-' . $post -> ID . '"></a>' ;
break ;
}
2004-01-27 10:58:01 +01:00
}
2014-03-05 08:24:14 +01:00
/**
2014-04-07 22:22:15 +02:00
* Retrieve full permalink for current post or post ID .
*
* This function is an alias for get_permalink () .
2014-03-05 08:24:14 +01:00
*
* @ since 3.9 . 0
2014-04-07 22:22:15 +02:00
*
2014-03-05 08:24:14 +01:00
* @ see get_permalink ()
*
2014-04-07 22:22:15 +02:00
* @ param int | WP_Post $id Optional . Post ID or post object . Default is the current post .
2014-03-05 08:24:14 +01:00
* @ param bool $leavename Optional . Whether to keep post name or page name . Default false .
2015-05-26 20:44:25 +02:00
* @ return string | false The permalink URL or false if post does not exist .
2014-03-05 08:24:14 +01:00
*/
function get_the_permalink ( $id = 0 , $leavename = false ) {
return get_permalink ( $id , $leavename );
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Retrieve full permalink for current post or post ID .
2008-10-14 00:00:07 +02:00
*
* @ since 1.0 . 0
*
2014-03-05 08:24:14 +01:00
* @ param int | WP_Post $id Optional . Post ID or post object . Default current post .
* @ param bool $leavename Optional . Whether to keep post name or page name . Default false .
2015-05-26 20:44:25 +02:00
* @ return string | false The permalink URL or false if post does not exist .
2008-10-14 00:00:07 +02:00
*/
2012-09-04 18:29:28 +02:00
function get_permalink ( $id = 0 , $leavename = false ) {
2004-09-05 04:41:01 +02:00
$rewritecode = array (
'%year%' ,
'%monthnum%' ,
'%day%' ,
'%hour%' ,
'%minute%' ,
'%second%' ,
2008-01-17 17:51:32 +01:00
$leavename ? '' : '%postname%' ,
2004-09-05 04:41:01 +02:00
'%post_id%' ,
'%category%' ,
'%author%' ,
2008-01-17 17:51:32 +01:00
$leavename ? '' : '%pagename%' ,
2004-09-05 04:41:01 +02:00
);
2004-08-10 07:35:59 +02:00
2009-02-08 14:38:02 +01:00
if ( is_object ( $id ) && isset ( $id -> filter ) && 'sample' == $id -> filter ) {
2008-12-17 00:50:39 +01:00
$post = $id ;
2009-02-08 14:38:02 +01:00
$sample = true ;
} else {
2012-08-23 22:01:10 +02:00
$post = get_post ( $id );
2009-02-08 14:38:02 +01:00
$sample = false ;
}
2007-08-28 20:58:54 +02:00
2010-03-02 12:57:32 +01:00
if ( empty ( $post -> ID ) )
return false ;
2007-08-28 20:58:54 +02:00
2006-02-09 11:03:48 +01:00
if ( $post -> post_type == 'page' )
2014-07-08 17:48:17 +02:00
return get_page_link ( $post , $leavename , $sample );
2010-02-02 00:12:26 +01:00
elseif ( $post -> post_type == 'attachment' )
2014-07-08 17:48:17 +02:00
return get_attachment_link ( $post , $leavename );
2010-02-02 00:12:26 +01:00
elseif ( in_array ( $post -> post_type , get_post_types ( array ( '_builtin' => false ) ) ) )
2014-07-08 17:48:17 +02:00
return get_post_permalink ( $post , $leavename , $sample );
2004-11-13 00:08:51 +01:00
2006-08-30 23:46:31 +02:00
$permalink = get_option ( 'permalink_structure' );
2004-08-10 07:35:59 +02:00
2014-04-14 04:13:16 +02:00
/**
* Filter the permalink structure for a post before token replacement occurs .
*
* Only applies to posts with post_type of 'post' .
*
* @ since 3.0 . 0
*
* @ param string $permalink The site ' s permalink structure .
* @ param WP_Post $post The post in question .
* @ param bool $leavename Whether to keep the post name .
*/
$permalink = apply_filters ( 'pre_post_link' , $permalink , $post , $leavename );
2010-03-02 12:57:32 +01:00
2015-01-09 17:40:22 +01:00
if ( '' != $permalink && ! in_array ( $post -> post_status , array ( 'draft' , 'pending' , 'auto-draft' , 'future' ) ) ) {
2005-03-27 22:45:01 +02:00
$unixtime = strtotime ( $post -> post_date );
2004-06-04 04:36:46 +02:00
2005-02-16 16:49:02 +01:00
$category = '' ;
2007-12-04 01:40:00 +01:00
if ( strpos ( $permalink , '%category%' ) !== false ) {
2010-11-12 22:53:15 +01:00
$cats = get_the_category ( $post -> ID );
2008-11-30 20:29:46 +01:00
if ( $cats ) {
2007-05-29 06:54:45 +02:00
usort ( $cats , '_usort_terms_by_ID' ); // order by ID
2014-04-14 04:13:16 +02:00
/**
* Filter the category that gets used in the % category % permalink token .
*
* @ since 3.5 . 0
*
* @ param stdClass $cat The category to use in the permalink .
* @ param array $cats Array of all categories associated with the post .
* @ param WP_Post $post The post in question .
*/
2012-06-28 22:28:57 +02:00
$category_object = apply_filters ( 'post_link_category' , $cats [ 0 ], $cats , $post );
2014-04-14 04:13:16 +02:00
2012-06-28 22:28:57 +02:00
$category_object = get_term ( $category_object , 'category' );
$category = $category_object -> slug ;
if ( $parent = $category_object -> parent )
2008-11-30 20:29:46 +01:00
$category = get_category_parents ( $parent , false , '/' , true ) . $category ;
}
2008-04-08 03:55:04 +02:00
// show default category in permalinks, without
// having to assign it explicitly
if ( empty ( $category ) ) {
2013-10-02 21:59:10 +02:00
$default_category = get_term ( get_option ( 'default_category' ), 'category' );
2008-08-09 07:36:14 +02:00
$category = is_wp_error ( $default_category ) ? '' : $default_category -> slug ;
2008-04-08 03:55:04 +02:00
}
2008-03-10 08:15:01 +01:00
}
2007-12-04 01:40:00 +01:00
$author = '' ;
if ( strpos ( $permalink , '%author%' ) !== false ) {
$authordata = get_userdata ( $post -> post_author );
$author = $authordata -> user_nicename ;
}
2006-02-17 02:04:20 +01:00
$date = explode ( " " , date ( 'Y m d H i s' , $unixtime ));
2006-11-19 08:56:05 +01:00
$rewritereplace =
2004-09-05 04:41:01 +02:00
array (
2006-02-17 02:04:20 +01:00
$date [ 0 ],
$date [ 1 ],
$date [ 2 ],
$date [ 3 ],
$date [ 4 ],
$date [ 5 ],
2005-03-27 22:45:01 +02:00
$post -> post_name ,
$post -> ID ,
2004-09-05 04:41:01 +02:00
$category ,
$author ,
2005-03-27 22:45:01 +02:00
$post -> post_name ,
2004-09-05 04:41:01 +02:00
);
2010-01-04 18:23:29 +01:00
$permalink = home_url ( str_replace ( $rewritecode , $rewritereplace , $permalink ) );
2007-03-10 07:18:43 +01:00
$permalink = user_trailingslashit ( $permalink , 'single' );
2004-09-05 04:41:01 +02:00
} else { // if they're not using the fancy permalink option
2010-01-04 18:23:29 +01:00
$permalink = home_url ( '?p=' . $post -> ID );
2004-09-05 04:41:01 +02:00
}
2014-04-14 04:13:16 +02:00
/**
* Filter the permalink for a post .
*
* Only applies to posts with post_type of 'post' .
*
* @ since 1.5 . 0
*
* @ param string $permalink The post ' s permalink .
* @ param WP_Post $post The post in question .
* @ param bool $leavename Whether to keep the post name .
*/
return apply_filters ( 'post_link' , $permalink , $post , $leavename );
2004-01-27 10:58:01 +01:00
}
2010-02-02 00:12:26 +01:00
/**
* Retrieve the permalink for a post with a custom post type .
*
* @ since 3.0 . 0
*
2015-05-26 20:44:25 +02:00
* @ global WP_Rewrite $wp_rewrite
*
* @ param int $id Optional . Post ID .
2010-02-02 00:12:26 +01:00
* @ param bool $leavename Optional , defaults to false . Whether to keep post name .
2015-05-26 20:44:25 +02:00
* @ param bool $sample Optional , defaults to false . Is it a sample permalink .
* @ return string | WP_Error The post permalink .
2010-02-02 00:12:26 +01:00
*/
2010-02-08 17:23:32 +01:00
function get_post_permalink ( $id = 0 , $leavename = false , $sample = false ) {
2010-02-02 00:12:26 +01:00
global $wp_rewrite ;
2012-08-23 22:01:10 +02:00
$post = get_post ( $id );
2010-02-02 00:12:26 +01:00
if ( is_wp_error ( $post ) )
return $post ;
$post_link = $wp_rewrite -> get_extra_permastruct ( $post -> post_type );
$slug = $post -> post_name ;
2015-01-09 17:40:22 +01:00
$draft_or_pending = isset ( $post -> post_status ) && in_array ( $post -> post_status , array ( 'draft' , 'pending' , 'auto-draft' , 'future' ) );
2010-02-08 17:23:32 +01:00
2010-03-20 03:23:52 +01:00
$post_type = get_post_type_object ( $post -> post_type );
2014-09-24 23:30:19 +02:00
if ( $post_type -> hierarchical ) {
$slug = get_page_uri ( $id );
}
2010-12-20 12:41:08 +01:00
if ( ! empty ( $post_link ) && ( ! $draft_or_pending || $sample ) ) {
2010-03-20 03:23:52 +01:00
if ( ! $leavename ) {
$post_link = str_replace ( " % $post->post_type % " , $slug , $post_link );
}
2010-02-02 00:12:26 +01:00
$post_link = home_url ( user_trailingslashit ( $post_link ) );
} else {
2010-02-08 17:23:32 +01:00
if ( $post_type -> query_var && ( isset ( $post -> post_status ) && ! $draft_or_pending ) )
$post_link = add_query_arg ( $post_type -> query_var , $slug , '' );
2010-02-02 00:12:26 +01:00
else
2010-02-08 17:23:32 +01:00
$post_link = add_query_arg ( array ( 'post_type' => $post -> post_type , 'p' => $post -> ID ), '' );
2010-02-02 00:12:26 +01:00
$post_link = home_url ( $post_link );
}
2014-04-14 04:13:16 +02:00
/**
* Filter the permalink for a post with a custom post type .
*
* @ since 3.0 . 0
*
* @ param string $post_link The post ' s permalink .
* @ param WP_Post $post The post in question .
* @ param bool $leavename Whether to keep the post name .
* @ param bool $sample Is it a sample permalink .
*/
return apply_filters ( 'post_type_link' , $post_link , $post , $leavename , $sample );
2010-02-02 00:12:26 +01:00
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Retrieve the permalink for current page or page ID .
2008-10-14 00:00:07 +02:00
*
2008-10-22 05:08:33 +02:00
* Respects page_on_front . Use this one .
2008-10-14 00:00:07 +02:00
*
* @ since 1.5 . 0
*
2015-05-26 20:44:25 +02:00
* @ param int | object $post Optional . Post ID or object .
* @ param bool $leavename Optional , defaults to false . Whether to keep page name .
* @ param bool $sample Optional , defaults to false . Is it a sample permalink .
2014-11-30 05:44:23 +01:00
* @ return string The page permalink .
2008-10-14 00:00:07 +02:00
*/
2012-09-04 18:29:28 +02:00
function get_page_link ( $post = false , $leavename = false , $sample = false ) {
$post = get_post ( $post );
2006-11-17 21:00:11 +01:00
2012-09-04 18:29:28 +02:00
if ( 'page' == get_option ( 'show_on_front' ) && $post -> ID == get_option ( 'page_on_front' ) )
2010-02-06 04:40:24 +01:00
$link = home_url ( '/' );
2006-11-17 21:00:11 +01:00
else
2012-09-04 18:29:28 +02:00
$link = _get_page_link ( $post , $leavename , $sample );
2006-11-17 21:00:11 +01:00
2014-04-14 04:13:16 +02:00
/**
* Filter the permalink for a page .
*
* @ since 1.5 . 0
*
* @ param string $link The page ' s permalink .
* @ param int $post_id The ID of the page .
* @ param bool $sample Is it a sample permalink .
*/
2012-09-04 18:29:28 +02:00
return apply_filters ( 'page_link' , $link , $post -> ID , $sample );
2006-11-17 21:00:11 +01:00
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Retrieve the page permalink .
2008-10-14 00:00:07 +02:00
*
* Ignores page_on_front . Internal use only .
*
* @ since 2.1 . 0
* @ access private
*
2015-05-26 20:44:25 +02:00
* @ global WP_Rewrite $wp_rewrite
*
* @ param int | object $post Optional . Post ID or object .
* @ param bool $leavename Optional . Leave name .
* @ param bool $sample Optional . Sample permalink .
2014-11-30 05:44:23 +01:00
* @ return string The page permalink .
2008-10-14 00:00:07 +02:00
*/
2012-09-04 18:29:28 +02:00
function _get_page_link ( $post = false , $leavename = false , $sample = false ) {
2012-08-23 21:28:58 +02:00
global $wp_rewrite ;
2004-10-06 04:18:37 +02:00
2012-09-04 18:29:28 +02:00
$post = get_post ( $post );
2004-10-06 04:18:37 +02:00
2010-12-19 15:42:17 +01:00
$draft_or_pending = in_array ( $post -> post_status , array ( 'draft' , 'pending' , 'auto-draft' ) );
2004-10-06 04:18:37 +02:00
2010-12-19 15:42:17 +01:00
$link = $wp_rewrite -> get_page_permastruct ();
2011-01-06 05:11:14 +01:00
if ( ! empty ( $link ) && ( ( isset ( $post -> post_status ) && ! $draft_or_pending ) || $sample ) ) {
2010-12-19 15:42:17 +01:00
if ( ! $leavename ) {
2012-09-04 18:29:28 +02:00
$link = str_replace ( '%pagename%' , get_page_uri ( $post ), $link );
2010-12-19 15:42:17 +01:00
}
2010-01-04 18:23:29 +01:00
$link = home_url ( $link );
2007-03-10 07:18:43 +01:00
$link = user_trailingslashit ( $link , 'page' );
2004-10-06 04:18:37 +02:00
} else {
2012-09-04 18:29:28 +02:00
$link = home_url ( '?page_id=' . $post -> ID );
2004-10-06 04:18:37 +02:00
}
2014-04-14 04:13:16 +02:00
/**
* Filter the permalink for a non - page_on_front page .
*
* @ since 2.1 . 0
*
* @ param string $link The page ' s permalink .
* @ param int $post_id The ID of the page .
*/
2012-09-04 18:29:28 +02:00
return apply_filters ( '_get_page_link' , $link , $post -> ID );
2004-10-06 04:18:37 +02:00
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Retrieve permalink for attachment .
2008-10-14 00:00:07 +02:00
*
2008-10-22 05:08:33 +02:00
* This can be used in the WordPress Loop or outside of it .
2008-10-14 00:00:07 +02:00
*
* @ since 2.0 . 0
*
2015-05-26 20:44:25 +02:00
* @ global WP_Rewrite $wp_rewrite
*
* @ param int | object $post Optional . Post ID or object .
* @ param bool $leavename Optional . Leave name .
2014-11-30 05:44:23 +01:00
* @ return string The attachment permalink .
2008-10-14 00:00:07 +02:00
*/
2012-09-22 00:52:54 +02:00
function get_attachment_link ( $post = null , $leavename = false ) {
2012-09-04 18:29:28 +02:00
global $wp_rewrite ;
2005-10-20 22:48:32 +02:00
$link = false ;
2012-09-04 18:29:28 +02:00
$post = get_post ( $post );
2013-05-07 13:46:35 +02:00
$parent = ( $post -> post_parent > 0 && $post -> post_parent != $post -> ID ) ? get_post ( $post -> post_parent ) : false ;
2005-10-20 22:48:32 +02:00
2013-05-07 13:46:35 +02:00
if ( $wp_rewrite -> using_permalinks () && $parent ) {
2006-11-17 21:00:11 +01:00
if ( 'page' == $parent -> post_type )
2012-09-04 18:29:28 +02:00
$parentlink = _get_page_link ( $post -> post_parent ); // Ignores page_on_front
2006-11-17 21:00:11 +01:00
else
2012-09-04 18:29:28 +02:00
$parentlink = get_permalink ( $post -> post_parent );
2010-03-20 03:23:52 +01:00
2012-09-04 18:29:28 +02:00
if ( is_numeric ( $post -> post_name ) || false !== strpos ( get_option ( 'permalink_structure' ), '%category%' ) )
$name = 'attachment/' . $post -> post_name ; // <permalink>/<int>/ is paged so we use the explicit attachment marker
2008-03-21 04:08:22 +01:00
else
2012-09-04 18:29:28 +02:00
$name = $post -> post_name ;
2010-03-20 03:23:52 +01:00
if ( strpos ( $parentlink , '?' ) === false )
2012-09-22 00:52:54 +02:00
$link = user_trailingslashit ( trailingslashit ( $parentlink ) . '%postname%' );
if ( ! $leavename )
$link = str_replace ( '%postname%' , $name , $link );
2005-10-20 22:48:32 +02:00
}
2010-03-20 03:23:52 +01:00
if ( ! $link )
2012-09-04 18:29:28 +02:00
$link = home_url ( '/?attachment_id=' . $post -> ID );
2005-10-20 22:48:32 +02:00
2014-04-14 04:13:16 +02:00
/**
* Filter the permalink for an attachment .
*
* @ since 2.0 . 0
*
* @ param string $link The attachment ' s permalink .
* @ param int $post_id Attachment ID .
*/
2012-09-04 18:29:28 +02:00
return apply_filters ( 'attachment_link' , $link , $post -> ID );
2005-10-20 22:48:32 +02:00
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Retrieve the permalink for the year archives .
2008-10-14 00:00:07 +02:00
*
* @ since 1.5 . 0
*
2015-05-26 20:44:25 +02:00
* @ global WP_Rewrite $wp_rewrite
*
2008-10-22 05:08:33 +02:00
* @ param int | bool $year False for current year or year for permalink .
2014-11-30 05:44:23 +01:00
* @ return string The permalink for the specified year archive .
2008-10-14 00:00:07 +02:00
*/
2004-11-19 21:54:16 +01:00
function get_year_link ( $year ) {
2005-02-07 08:37:53 +01:00
global $wp_rewrite ;
2005-10-18 01:41:28 +02:00
if ( ! $year )
2009-12-30 18:56:09 +01:00
$year = gmdate ( 'Y' , current_time ( 'timestamp' ));
2005-10-18 01:41:28 +02:00
$yearlink = $wp_rewrite -> get_year_permastruct ();
if ( ! empty ( $yearlink ) ) {
$yearlink = str_replace ( '%year%' , $year , $yearlink );
2014-04-14 04:13:16 +02:00
$yearlink = home_url ( user_trailingslashit ( $yearlink , 'year' ) );
2005-10-18 01:41:28 +02:00
} else {
2014-04-14 04:13:16 +02:00
$yearlink = home_url ( '?m=' . $year );
2005-10-18 01:41:28 +02:00
}
2014-04-14 04:13:16 +02:00
/**
* Filter the year archive permalink .
*
* @ since 1.5 . 0
*
* @ param string $yearlink Permalink for the year archive .
* @ param int $year Year for the archive .
*/
return apply_filters ( 'year_link' , $yearlink , $year );
2004-11-19 21:54:16 +01:00
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Retrieve the permalink for the month archives with year .
2008-10-14 00:00:07 +02:00
*
* @ since 1.0 . 0
*
2015-05-26 20:44:25 +02:00
* @ global WP_Rewrite $wp_rewrite
*
* @ param bool | int $year False for current year . Integer of year .
2008-10-22 05:08:33 +02:00
* @ param bool | int $month False for current month . Integer of month .
2014-11-30 05:44:23 +01:00
* @ return string The permalink for the specified month and year archive .
2008-10-14 00:00:07 +02:00
*/
2004-01-27 10:58:01 +01:00
function get_month_link ( $year , $month ) {
2005-10-18 01:41:28 +02:00
global $wp_rewrite ;
if ( ! $year )
2009-12-30 18:56:09 +01:00
$year = gmdate ( 'Y' , current_time ( 'timestamp' ));
2005-10-18 01:41:28 +02:00
if ( ! $month )
2009-12-30 18:56:09 +01:00
$month = gmdate ( 'm' , current_time ( 'timestamp' ));
2005-10-18 01:41:28 +02:00
$monthlink = $wp_rewrite -> get_month_permastruct ();
if ( ! empty ( $monthlink ) ) {
$monthlink = str_replace ( '%year%' , $year , $monthlink );
$monthlink = str_replace ( '%monthnum%' , zeroise ( intval ( $month ), 2 ), $monthlink );
2014-04-14 04:13:16 +02:00
$monthlink = home_url ( user_trailingslashit ( $monthlink , 'month' ) );
2005-10-18 01:41:28 +02:00
} else {
2014-04-14 04:13:16 +02:00
$monthlink = home_url ( '?m=' . $year . zeroise ( $month , 2 ) );
2005-10-18 01:41:28 +02:00
}
2014-04-14 04:13:16 +02:00
/**
* Filter the month archive permalink .
*
* @ since 1.5 . 0
*
* @ param string $monthlink Permalink for the month archive .
* @ param int $year Year for the archive .
* @ param int $month The month for the archive .
*/
return apply_filters ( 'month_link' , $monthlink , $year , $month );
2004-01-27 10:58:01 +01:00
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Retrieve the permalink for the day archives with year and month .
2008-10-14 00:00:07 +02:00
*
* @ since 1.0 . 0
*
2015-05-26 20:44:25 +02:00
* @ global WP_Rewrite $wp_rewrite
*
* @ param bool | int $year False for current year . Integer of year .
2008-10-22 05:08:33 +02:00
* @ param bool | int $month False for current month . Integer of month .
2015-05-26 20:44:25 +02:00
* @ param bool | int $day False for current day . Integer of day .
2014-11-30 05:44:23 +01:00
* @ return string The permalink for the specified day , month , and year archive .
2008-10-14 00:00:07 +02:00
*/
2004-01-27 10:58:01 +01:00
function get_day_link ( $year , $month , $day ) {
2005-10-18 01:41:28 +02:00
global $wp_rewrite ;
if ( ! $year )
2009-12-30 18:56:09 +01:00
$year = gmdate ( 'Y' , current_time ( 'timestamp' ));
2005-10-18 01:41:28 +02:00
if ( ! $month )
2009-12-30 18:56:09 +01:00
$month = gmdate ( 'm' , current_time ( 'timestamp' ));
2005-10-18 01:41:28 +02:00
if ( ! $day )
2009-12-30 18:56:09 +01:00
$day = gmdate ( 'j' , current_time ( 'timestamp' ));
2005-10-18 01:41:28 +02:00
$daylink = $wp_rewrite -> get_day_permastruct ();
if ( ! empty ( $daylink ) ) {
$daylink = str_replace ( '%year%' , $year , $daylink );
$daylink = str_replace ( '%monthnum%' , zeroise ( intval ( $month ), 2 ), $daylink );
$daylink = str_replace ( '%day%' , zeroise ( intval ( $day ), 2 ), $daylink );
2014-04-14 04:13:16 +02:00
$daylink = home_url ( user_trailingslashit ( $daylink , 'day' ) );
2005-10-18 01:41:28 +02:00
} else {
2014-04-14 04:13:16 +02:00
$daylink = home_url ( '?m=' . $year . zeroise ( $month , 2 ) . zeroise ( $day , 2 ) );
2005-10-18 01:41:28 +02:00
}
2014-04-14 04:13:16 +02:00
/**
* Filter the day archive permalink .
*
* @ since 1.5 . 0
*
* @ param string $daylink Permalink for the day archive .
* @ param int $year Year for the archive .
* @ param int $month Month for the archive .
* @ param int $day The day for the archive .
*/
return apply_filters ( 'day_link' , $daylink , $year , $month , $day );
2004-06-02 09:14:03 +02:00
}
2010-03-02 20:00:21 +01:00
/**
* Display the permalink for the feed type .
*
* @ since 3.0 . 0
*
* @ param string $anchor The link ' s anchor text .
2015-05-26 20:44:25 +02:00
* @ param string $feed Optional , defaults to default feed . Feed type .
2010-03-02 20:00:21 +01:00
*/
function the_feed_link ( $anchor , $feed = '' ) {
$link = '<a href="' . esc_url ( get_feed_link ( $feed ) ) . '">' . $anchor . '</a>' ;
2014-04-14 04:13:16 +02:00
/**
* Filter the feed link anchor tag .
*
* @ since 3.0 . 0
*
* @ param string $link The complete anchor tag for a feed link .
* @ param string $feed The feed type , or an empty string for the
* default feed type .
*/
2010-03-02 20:00:21 +01:00
echo apply_filters ( 'the_feed_link' , $link , $feed );
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Retrieve the permalink for the feed type .
2008-10-14 00:00:07 +02:00
*
* @ since 1.5 . 0
*
2015-05-26 20:44:25 +02:00
* @ global WP_Rewrite $wp_rewrite
*
2008-10-22 05:08:33 +02:00
* @ param string $feed Optional , defaults to default feed . Feed type .
2014-11-30 05:44:23 +01:00
* @ return string The feed permalink .
2008-10-14 00:00:07 +02:00
*/
2007-12-06 20:58:15 +01:00
function get_feed_link ( $feed = '' ) {
2004-12-03 03:38:11 +01:00
global $wp_rewrite ;
2004-06-02 09:14:03 +02:00
2005-01-26 23:46:40 +01:00
$permalink = $wp_rewrite -> get_feed_permastruct ();
2005-10-18 01:41:28 +02:00
if ( '' != $permalink ) {
2005-01-26 23:46:40 +01:00
if ( false !== strpos ( $feed , 'comments_' ) ) {
$feed = str_replace ( 'comments_' , '' , $feed );
$permalink = $wp_rewrite -> get_comment_feed_permastruct ();
}
2007-12-06 20:58:15 +01:00
if ( get_default_feed () == $feed )
2005-01-26 23:46:40 +01:00
$feed = '' ;
$permalink = str_replace ( '%feed%' , $feed , $permalink );
2007-02-15 08:07:12 +01:00
$permalink = preg_replace ( '#/+#' , '/' , " / $permalink " );
2010-01-04 18:23:29 +01:00
$output = home_url ( user_trailingslashit ( $permalink , 'feed' ) );
2005-01-26 23:46:40 +01:00
} else {
2007-12-06 20:58:15 +01:00
if ( empty ( $feed ) )
$feed = get_default_feed ();
2005-01-26 23:46:40 +01:00
if ( false !== strpos ( $feed , 'comments_' ) )
2005-02-26 07:12:16 +01:00
$feed = str_replace ( 'comments_' , 'comments-' , $feed );
2005-01-26 23:46:40 +01:00
2010-01-04 18:23:29 +01:00
$output = home_url ( " ?feed= { $feed } " );
2005-01-26 23:46:40 +01:00
}
2004-06-02 09:14:03 +02:00
2014-04-14 04:13:16 +02:00
/**
* Filter the feed type permalink .
*
* @ since 1.5 . 0
*
* @ param string $output The feed permalink .
* @ param string $feed Feed type .
*/
return apply_filters ( 'feed_link' , $output , $feed );
2004-01-27 10:58:01 +01:00
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Retrieve the permalink for the post comments feed .
2008-10-14 00:00:07 +02:00
*
* @ since 2.2 . 0
*
2015-05-26 20:44:25 +02:00
* @ param int $post_id Optional . Post ID .
* @ param string $feed Optional . Feed type .
2014-11-30 05:44:23 +01:00
* @ return string The permalink for the comments feed for the given post .
2008-10-14 00:00:07 +02:00
*/
2010-09-04 17:51:04 +02:00
function get_post_comments_feed_link ( $post_id = 0 , $feed = '' ) {
$post_id = absint ( $post_id );
2007-02-23 09:31:07 +01:00
2010-09-04 17:51:04 +02:00
if ( ! $post_id )
$post_id = get_the_ID ();
2007-02-23 09:31:07 +01:00
2010-09-04 17:51:04 +02:00
if ( empty ( $feed ) )
2007-12-06 20:58:15 +01:00
$feed = get_default_feed ();
2007-02-23 09:31:07 +01:00
if ( '' != get_option ( 'permalink_structure' ) ) {
2010-04-18 08:51:16 +02:00
if ( 'page' == get_option ( 'show_on_front' ) && $post_id == get_option ( 'page_on_front' ) )
$url = _get_page_link ( $post_id );
else
$url = get_permalink ( $post_id );
$url = trailingslashit ( $url ) . 'feed' ;
2007-12-06 20:58:15 +01:00
if ( $feed != get_default_feed () )
2007-02-23 09:31:07 +01:00
$url .= " / $feed " ;
2007-03-10 07:18:43 +01:00
$url = user_trailingslashit ( $url , 'single_feed' );
2007-02-23 09:31:07 +01:00
} else {
2007-08-23 00:42:57 +02:00
$type = get_post_field ( 'post_type' , $post_id );
if ( 'page' == $type )
2012-11-07 20:56:10 +01:00
$url = add_query_arg ( array ( 'feed' => $feed , 'page_id' => $post_id ), home_url ( '/' ) );
2007-08-23 00:42:57 +02:00
else
2012-11-07 20:56:10 +01:00
$url = add_query_arg ( array ( 'feed' => $feed , 'p' => $post_id ), home_url ( '/' ) );
2007-02-23 09:31:07 +01:00
}
2014-04-14 04:13:16 +02:00
/**
* Filter the post comments feed permalink .
*
* @ since 1.5 . 1
*
* @ param string $url Post comments feed permalink .
*/
return apply_filters ( 'post_comments_feed_link' , $url );
2007-02-23 09:31:07 +01:00
}
2008-10-14 00:00:07 +02:00
/**
* Display the comment feed link for a post .
2007-12-06 20:58:15 +01:00
*
2008-10-14 00:00:07 +02:00
* Prints out the comment feed link for a post . Link text is placed in the
* anchor . If no link text is specified , default text is used . If no post ID is
* specified , the current post is used .
2007-12-06 20:58:15 +01:00
*
2008-10-14 00:00:07 +02:00
* @ since 2.5 . 0
2007-12-06 20:58:15 +01:00
*
2008-10-18 22:46:30 +02:00
* @ param string $link_text Descriptive text .
2015-05-26 20:44:25 +02:00
* @ param int $post_id Optional post ID . Default to current post .
* @ param string $feed Optional . Feed format .
2007-12-06 20:58:15 +01:00
*/
function post_comments_feed_link ( $link_text = '' , $post_id = '' , $feed = '' ) {
2012-11-07 20:56:10 +01:00
$url = esc_url ( get_post_comments_feed_link ( $post_id , $feed ) );
2007-12-06 20:58:15 +01:00
if ( empty ( $link_text ) )
$link_text = __ ( 'Comments Feed' );
2014-04-14 04:13:16 +02:00
/**
* Filter the post comment feed link anchor tag .
*
* @ since 2.8 . 0
*
* @ param string $link The complete anchor tag for the comment feed link .
* @ param int $post_id Post ID .
* @ param string $feed The feed type , or an empty string for the default feed type .
*/
2009-05-12 08:19:36 +02:00
echo apply_filters ( 'post_comments_feed_link_html' , " <a href=' $url '> $link_text </a> " , $post_id , $feed );
2007-12-06 20:58:15 +01:00
}
2008-10-14 00:00:07 +02:00
/**
* Retrieve the feed link for a given author .
2008-08-22 04:21:37 +02:00
*
2008-10-14 00:00:07 +02:00
* Returns a link to the feed for all posts by a given author . A specific feed
* can be requested or left blank to get the default feed .
2008-08-22 04:21:37 +02:00
*
2008-10-14 00:00:07 +02:00
* @ since 2.5 . 0
2008-08-22 04:21:37 +02:00
*
2015-05-26 20:44:25 +02:00
* @ param int $author_id ID of an author .
* @ param string $feed Optional . Feed type .
2008-10-14 00:00:07 +02:00
* @ return string Link to the feed for the author specified by $author_id .
2008-08-22 04:21:37 +02:00
*/
2007-12-06 20:58:15 +01:00
function get_author_feed_link ( $author_id , $feed = '' ) {
$author_id = ( int ) $author_id ;
$permalink_structure = get_option ( 'permalink_structure' );
if ( empty ( $feed ) )
$feed = get_default_feed ();
if ( '' == $permalink_structure ) {
2010-01-04 18:23:29 +01:00
$link = home_url ( " ?feed= $feed &author= " . $author_id );
2007-12-06 20:58:15 +01:00
} else {
2008-01-04 20:36:34 +01:00
$link = get_author_posts_url ( $author_id );
2008-08-22 04:21:37 +02:00
if ( $feed == get_default_feed () )
$feed_link = 'feed' ;
else
$feed_link = " feed/ $feed " ;
$link = trailingslashit ( $link ) . user_trailingslashit ( $feed_link , 'feed' );
2007-12-06 20:58:15 +01:00
}
2014-04-14 04:13:16 +02:00
/**
* Filter the feed link for a given author .
*
* @ since 1.5 . 1
*
* @ param string $link The author feed link .
* @ param string $feed Feed type .
*/
$link = apply_filters ( 'author_feed_link' , $link , $feed );
2007-12-06 20:58:15 +01:00
return $link ;
}
2008-10-14 00:00:07 +02:00
/**
* Retrieve the feed link for a category .
2007-12-06 20:58:15 +01:00
*
2011-09-30 00:57:43 +02:00
* Returns a link to the feed for all posts in a given category . A specific feed
2008-10-14 00:00:07 +02:00
* can be requested or left blank to get the default feed .
2007-12-06 20:58:15 +01:00
*
2008-10-14 00:00:07 +02:00
* @ since 2.5 . 0
2007-12-06 20:58:15 +01:00
*
2015-05-26 20:44:25 +02:00
* @ param int $cat_id ID of a category .
* @ param string $feed Optional . Feed type .
2008-10-14 00:00:07 +02:00
* @ return string Link to the feed for the category specified by $cat_id .
2007-12-06 20:58:15 +01:00
*/
2015-05-26 20:44:25 +02:00
function get_category_feed_link ( $cat_id , $feed = '' ) {
return get_term_feed_link ( $cat_id , 'category' , $feed );
2010-05-17 18:21:12 +02:00
}
2008-02-05 07:47:27 +01:00
2010-05-17 18:21:12 +02:00
/**
2011-09-30 00:57:43 +02:00
* Retrieve the feed link for a term .
2010-05-17 18:21:12 +02:00
*
2011-09-30 00:57:43 +02:00
* Returns a link to the feed for all posts in a given term . A specific feed
2010-05-17 18:21:12 +02:00
* can be requested or left blank to get the default feed .
*
2013-12-24 19:57:12 +01:00
* @ since 3.0 . 0
2010-05-17 18:21:12 +02:00
*
2015-05-26 20:44:25 +02:00
* @ param int $term_id ID of a category .
2010-05-17 18:21:12 +02:00
* @ param string $taxonomy Optional . Taxonomy of $term_id
2015-05-26 20:44:25 +02:00
* @ param string $feed Optional . Feed type .
* @ return string | false Link to the feed for the term specified by $term_id and $taxonomy .
2010-05-17 18:21:12 +02:00
*/
function get_term_feed_link ( $term_id , $taxonomy = 'category' , $feed = '' ) {
$term_id = ( int ) $term_id ;
2008-02-05 07:47:27 +01:00
2010-05-17 18:21:12 +02:00
$term = get_term ( $term_id , $taxonomy );
2010-05-26 04:42:15 +02:00
2010-05-17 18:21:12 +02:00
if ( empty ( $term ) || is_wp_error ( $term ) )
2007-12-06 20:58:15 +01:00
return false ;
2010-05-17 18:21:12 +02:00
if ( empty ( $feed ) )
2007-12-06 20:58:15 +01:00
$feed = get_default_feed ();
2010-05-17 18:21:12 +02:00
$permalink_structure = get_option ( 'permalink_structure' );
2007-12-06 20:58:15 +01:00
if ( '' == $permalink_structure ) {
2010-05-17 18:21:12 +02:00
if ( 'category' == $taxonomy ) {
2010-05-26 04:42:15 +02:00
$link = home_url ( " ?feed= $feed &cat= $term_id " );
2010-05-17 18:21:12 +02:00
}
elseif ( 'post_tag' == $taxonomy ) {
2010-05-26 04:42:15 +02:00
$link = home_url ( " ?feed= $feed &tag= $term->slug " );
2010-05-17 18:21:12 +02:00
} else {
$t = get_taxonomy ( $taxonomy );
$link = home_url ( " ?feed= $feed & $t->query_var = $term->slug " );
}
2007-12-06 20:58:15 +01:00
} else {
2010-05-17 18:21:12 +02:00
$link = get_term_link ( $term_id , $term -> taxonomy );
if ( $feed == get_default_feed () )
2007-12-06 20:58:15 +01:00
$feed_link = 'feed' ;
else
$feed_link = " feed/ $feed " ;
2008-02-05 07:47:27 +01:00
2010-05-17 18:21:12 +02:00
$link = trailingslashit ( $link ) . user_trailingslashit ( $feed_link , 'feed' );
2007-12-06 20:58:15 +01:00
}
2014-04-14 04:13:16 +02:00
if ( 'category' == $taxonomy ) {
/**
* Filter the category feed link .
*
* @ since 1.5 . 1
*
* @ param string $link The category feed link .
* @ param string $feed Feed type .
*/
2010-05-17 18:21:12 +02:00
$link = apply_filters ( 'category_feed_link' , $link , $feed );
2014-04-14 04:13:16 +02:00
} elseif ( 'post_tag' == $taxonomy ) {
/**
* Filter the post tag feed link .
*
* @ since 2.3 . 0
*
* @ param string $link The tag feed link .
* @ param string $feed Feed type .
*/
2012-08-30 05:49:44 +02:00
$link = apply_filters ( 'tag_feed_link' , $link , $feed );
2014-04-14 04:13:16 +02:00
} else {
/**
* Filter the feed link for a taxonomy other than 'category' or 'post_tag' .
*
* @ since 3.0 . 0
*
* @ param string $link The taxonomy feed link .
* @ param string $feed Feed type .
* @ param string $feed The taxonomy name .
*/
2010-05-17 18:21:12 +02:00
$link = apply_filters ( 'taxonomy_feed_link' , $link , $feed , $taxonomy );
2014-04-14 04:13:16 +02:00
}
2010-05-26 04:42:15 +02:00
2007-12-06 20:58:15 +01:00
return $link ;
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Retrieve permalink for feed of tag .
2008-10-14 00:00:07 +02:00
*
* @ since 2.3 . 0
*
2015-05-26 20:44:25 +02:00
* @ param int $tag_id Tag ID .
* @ param string $feed Optional . Feed type .
2014-11-30 05:44:23 +01:00
* @ return string The feed permalink for the given tag .
2008-10-14 00:00:07 +02:00
*/
2015-05-26 20:44:25 +02:00
function get_tag_feed_link ( $tag_id , $feed = '' ) {
return get_term_feed_link ( $tag_id , 'post_tag' , $feed );
2007-12-06 20:58:15 +01:00
}
2008-10-25 20:19:42 +02:00
/**
* Retrieve edit tag link .
*
* @ since 2.7 . 0
*
2015-05-26 20:44:25 +02:00
* @ param int $tag_id Tag ID
2010-10-14 09:35:13 +02:00
* @ param string $taxonomy Taxonomy
2014-11-30 05:44:23 +01:00
* @ return string The edit tag link URL for the given tag .
2008-10-25 20:19:42 +02:00
*/
2010-10-14 09:35:13 +02:00
function get_edit_tag_link ( $tag_id , $taxonomy = 'post_tag' ) {
2014-04-14 04:13:16 +02:00
/**
* Filter the edit link for a tag ( or term in another taxonomy ) .
*
* @ since 2.7 . 0
*
* @ param string $link The term edit link .
*/
2010-10-14 10:47:41 +02:00
return apply_filters ( 'get_edit_tag_link' , get_edit_term_link ( $tag_id , $taxonomy ) );
2008-10-25 20:19:42 +02:00
}
/**
* Display or retrieve edit tag link with formatting .
*
* @ since 2.7 . 0
*
2015-05-26 20:44:25 +02:00
* @ param string $link Optional . Anchor text .
2008-10-25 20:19:42 +02:00
* @ param string $before Optional . Display before edit link .
2015-05-26 20:44:25 +02:00
* @ param string $after Optional . Display after edit link .
* @ param object $tag Tag object .
2008-10-25 20:19:42 +02:00
*/
function edit_tag_link ( $link = '' , $before = '' , $after = '' , $tag = null ) {
2013-08-22 02:49:09 +02:00
$link = edit_term_link ( $link , '' , '' , $tag , false );
2014-04-14 04:13:16 +02:00
/**
* Filter the anchor tag for the edit link for a tag ( or term in another taxonomy ) .
*
* @ since 2.7 . 0
*
* @ param string $link The anchor tag for the edit link .
*/
2010-10-13 16:54:21 +02:00
echo $before . apply_filters ( 'edit_tag_link' , $link ) . $after ;
}
/**
* Retrieve edit term url .
*
2010-10-19 09:38:42 +02:00
* @ since 3.1 . 0
2010-10-13 16:54:21 +02:00
*
2015-01-16 22:37:23 +01:00
* @ param int $term_id Term ID .
* @ param string $taxonomy Taxonomy .
* @ param string $object_type The object type . Used to highlight the proper post type menu on the linked page .
* Defaults to the first object_type associated with the taxonomy .
2015-06-26 16:13:24 +02:00
* @ return string | null The edit term link URL for the given term , or null on failure .
2010-10-13 16:54:21 +02:00
*/
2010-10-14 10:47:41 +02:00
function get_edit_term_link ( $term_id , $taxonomy , $object_type = '' ) {
2010-10-14 09:35:13 +02:00
$tax = get_taxonomy ( $taxonomy );
2015-06-26 16:13:24 +02:00
if ( ! $tax || ! current_user_can ( $tax -> cap -> edit_terms ) ) {
2008-10-25 20:19:42 +02:00
return ;
2015-06-26 16:13:24 +02:00
}
2008-10-25 20:19:42 +02:00
2010-10-14 09:35:13 +02:00
$term = get_term ( $term_id , $taxonomy );
2015-06-26 16:13:24 +02:00
if ( ! $term || is_wp_error ( $term ) ) {
return ;
}
2010-10-14 09:35:13 +02:00
$args = array (
'action' => 'edit' ,
'taxonomy' => $taxonomy ,
'tag_ID' => $term -> term_id ,
);
2015-01-16 22:37:23 +01:00
if ( $object_type ) {
2010-10-14 09:35:13 +02:00
$args [ 'post_type' ] = $object_type ;
2015-06-20 00:01:25 +02:00
} elseif ( ! empty ( $tax -> object_type ) ) {
2015-01-16 22:37:23 +01:00
$args [ 'post_type' ] = reset ( $tax -> object_type );
}
2010-10-13 16:54:21 +02:00
2010-10-14 09:35:13 +02:00
$location = add_query_arg ( $args , admin_url ( 'edit-tags.php' ) );
2010-10-13 16:54:21 +02:00
2014-04-14 04:13:16 +02:00
/**
* Filter the edit link for a term .
*
* @ since 3.1 . 0
*
* @ param string $location The edit link .
* @ param int $term_id Term ID .
* @ param string $taxonomy Taxonomy name .
* @ param string $object_type The object type ( eg . the post type ) .
*/
2010-10-14 10:47:41 +02:00
return apply_filters ( 'get_edit_term_link' , $location , $term_id , $taxonomy , $object_type );
2010-10-13 16:54:21 +02:00
}
/**
* Display or retrieve edit term link with formatting .
*
2010-10-19 09:38:42 +02:00
* @ since 3.1 . 0
2010-10-13 16:54:21 +02:00
*
2015-06-24 12:56:27 +02:00
* @ param string $link Optional . Anchor text . Default empty .
* @ param string $before Optional . Display before edit link . Default empty .
* @ param string $after Optional . Display after edit link . Default empty .
* @ param object $term Optional . Term object . If null , the queried object will be inspected . Default null .
2015-06-24 12:53:28 +02:00
* @ param bool $echo Optional . Whether or not to echo the return . Default true .
2015-05-26 20:44:25 +02:00
* @ return string | void HTML content .
2010-10-13 16:54:21 +02:00
*/
function edit_term_link ( $link = '' , $before = '' , $after = '' , $term = null , $echo = true ) {
2013-09-10 04:28:11 +02:00
if ( is_null ( $term ) )
2010-10-31 12:02:17 +01:00
$term = get_queried_object ();
2013-09-10 04:28:11 +02:00
if ( ! $term )
return ;
2010-10-14 09:35:13 +02:00
2010-10-13 16:54:21 +02:00
$tax = get_taxonomy ( $term -> taxonomy );
2013-09-10 04:28:11 +02:00
if ( ! current_user_can ( $tax -> cap -> edit_terms ) )
2010-10-13 16:54:21 +02:00
return ;
2010-02-19 10:33:50 +01:00
2010-10-14 09:35:13 +02:00
if ( empty ( $link ) )
2008-10-25 20:19:42 +02:00
$link = __ ( 'Edit This' );
2013-09-23 16:51:10 +02:00
$link = '<a href="' . get_edit_term_link ( $term -> term_id , $term -> taxonomy ) . '">' . $link . '</a>' ;
2014-04-14 04:13:16 +02:00
/**
* Filter the anchor tag for the edit link of a term .
*
* @ since 3.1 . 0
*
* @ param string $link The anchor tag for the edit link .
* @ param int $term_id Term ID .
*/
2010-10-13 16:54:21 +02:00
$link = $before . apply_filters ( 'edit_term_link' , $link , $term -> term_id ) . $after ;
2010-10-14 09:35:13 +02:00
2010-10-13 16:54:21 +02:00
if ( $echo )
echo $link ;
else
return $link ;
2008-10-25 20:19:42 +02:00
}
2010-02-28 05:15:02 +01:00
/**
2013-11-11 14:32:10 +01:00
* Retrieve permalink for search .
*
* @ since 3.0 . 0
*
2015-05-26 20:44:25 +02:00
* @ global WP_Rewrite $wp_rewrite
*
2013-11-11 14:32:10 +01:00
* @ param string $query Optional . The query string to use . If empty the current query is used .
2014-11-30 05:44:23 +01:00
* @ return string The search permalink .
2013-11-11 14:32:10 +01:00
*/
2010-02-28 05:15:02 +01:00
function get_search_link ( $query = '' ) {
global $wp_rewrite ;
if ( empty ( $query ) )
2010-04-04 01:38:38 +02:00
$search = get_search_query ( false );
2010-02-28 05:15:02 +01:00
else
2013-03-01 17:28:40 +01:00
$search = stripslashes ( $query );
2010-02-28 05:15:02 +01:00
$permastruct = $wp_rewrite -> get_search_permastruct ();
if ( empty ( $permastruct ) ) {
$link = home_url ( '?s=' . urlencode ( $search ) );
} else {
$search = urlencode ( $search );
$search = str_replace ( '%2F' , '/' , $search ); // %2F(/) is not valid within a URL, send it unencoded.
$link = str_replace ( '%search%' , $search , $permastruct );
$link = home_url ( user_trailingslashit ( $link , 'search' ) );
}
2014-04-14 04:13:16 +02:00
/**
* Filter the search permalink .
*
* @ since 3.0 . 0
*
* @ param string $link Search permalink .
* @ param string $search The URL - encoded search term .
*/
2010-02-28 05:15:02 +01:00
return apply_filters ( 'search_link' , $link , $search );
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Retrieve the permalink for the feed of the search results .
2008-10-14 00:00:07 +02:00
*
* @ since 2.5 . 0
*
2015-05-26 20:44:25 +02:00
* @ global WP_Rewrite $wp_rewrite
*
2008-10-22 05:08:33 +02:00
* @ param string $search_query Optional . Search query .
2015-05-26 20:44:25 +02:00
* @ param string $feed Optional . Feed type .
2014-11-30 05:44:23 +01:00
* @ return string The search results feed permalink .
2008-10-14 00:00:07 +02:00
*/
2007-12-19 19:05:21 +01:00
function get_search_feed_link ( $search_query = '' , $feed = '' ) {
2010-02-28 05:15:02 +01:00
global $wp_rewrite ;
$link = get_search_link ( $search_query );
2008-02-05 07:47:27 +01:00
2007-12-19 19:05:21 +01:00
if ( empty ( $feed ) )
$feed = get_default_feed ();
2008-02-05 07:47:27 +01:00
2010-02-28 05:15:02 +01:00
$permastruct = $wp_rewrite -> get_search_permastruct ();
if ( empty ( $permastruct ) ) {
$link = add_query_arg ( 'feed' , $feed , $link );
} else {
$link = trailingslashit ( $link );
$link .= " feed/ $feed / " ;
}
2008-02-05 07:47:27 +01:00
2014-04-14 04:13:16 +02:00
/**
* Filter the search feed link .
*
* @ since 2.5 . 0
*
* @ param string $link Search feed link .
* @ param string $feed Feed type .
* @ param string $type The search type . One of 'posts' or 'comments' .
*/
2015-05-26 20:44:25 +02:00
return apply_filters ( 'search_feed_link' , $link , $feed , 'posts' );
2007-12-19 19:05:21 +01:00
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Retrieve the permalink for the comments feed of the search results .
2008-10-14 00:00:07 +02:00
*
* @ since 2.5 . 0
*
2015-05-26 20:44:25 +02:00
* @ global WP_Rewrite $wp_rewrite
*
2008-10-22 05:08:33 +02:00
* @ param string $search_query Optional . Search query .
2015-05-26 20:44:25 +02:00
* @ param string $feed Optional . Feed type .
2014-11-30 05:44:23 +01:00
* @ return string The comments feed search results permalink .
2008-10-14 00:00:07 +02:00
*/
2007-12-19 19:05:21 +01:00
function get_search_comments_feed_link ( $search_query = '' , $feed = '' ) {
2010-02-28 05:15:02 +01:00
global $wp_rewrite ;
2008-02-05 07:47:27 +01:00
2007-12-19 19:05:21 +01:00
if ( empty ( $feed ) )
$feed = get_default_feed ();
2008-02-05 07:47:27 +01:00
2010-02-28 05:15:02 +01:00
$link = get_search_feed_link ( $search_query , $feed );
$permastruct = $wp_rewrite -> get_search_permastruct ();
if ( empty ( $permastruct ) )
$link = add_query_arg ( 'feed' , 'comments-' . $feed , $link );
else
$link = add_query_arg ( 'withcomments' , 1 , $link );
2008-02-05 07:47:27 +01:00
2014-04-14 04:13:16 +02:00
/** This filter is documented in wp-includes/link-template.php */
2015-05-26 20:44:25 +02:00
return apply_filters ( 'search_feed_link' , $link , $feed , 'comments' );
2007-12-19 19:05:21 +01:00
}
2010-10-15 21:44:57 +02:00
/**
* Retrieve the permalink for a post type archive .
*
* @ since 3.1 . 0
*
2015-05-26 20:44:25 +02:00
* @ global WP_Rewrite $wp_rewrite
*
2010-10-15 21:44:57 +02:00
* @ param string $post_type Post type
2015-05-26 20:44:25 +02:00
* @ return string | false The post type archive permalink .
2010-10-15 21:44:57 +02:00
*/
function get_post_type_archive_link ( $post_type ) {
global $wp_rewrite ;
if ( ! $post_type_obj = get_post_type_object ( $post_type ) )
return false ;
2010-12-08 08:51:40 +01:00
if ( ! $post_type_obj -> has_archive )
2010-10-15 21:44:57 +02:00
return false ;
2010-12-08 08:51:40 +01:00
if ( get_option ( 'permalink_structure' ) && is_array ( $post_type_obj -> rewrite ) ) {
2010-12-08 10:15:09 +01:00
$struct = ( true === $post_type_obj -> has_archive ) ? $post_type_obj -> rewrite [ 'slug' ] : $post_type_obj -> has_archive ;
2010-10-15 21:44:57 +02:00
if ( $post_type_obj -> rewrite [ 'with_front' ] )
$struct = $wp_rewrite -> front . $struct ;
2011-03-10 05:24:48 +01:00
else
$struct = $wp_rewrite -> root . $struct ;
2010-10-15 21:44:57 +02:00
$link = home_url ( user_trailingslashit ( $struct , 'post_type_archive' ) );
} else {
$link = home_url ( '?post_type=' . $post_type );
}
2014-04-14 04:13:16 +02:00
/**
* Filter the post type archive permalink .
*
* @ since 3.1 . 0
*
* @ param string $link The post type archive permalink .
* @ param string $post_type Post type name .
*/
2010-10-15 21:44:57 +02:00
return apply_filters ( 'post_type_archive_link' , $link , $post_type );
}
/**
* Retrieve the permalink for a post type archive feed .
*
* @ since 3.1 . 0
*
* @ param string $post_type Post type
2015-05-26 20:44:25 +02:00
* @ param string $feed Optional . Feed type
* @ return string | false The post type feed permalink .
2010-10-19 09:48:22 +02:00
*/
2010-10-15 21:44:57 +02:00
function get_post_type_archive_feed_link ( $post_type , $feed = '' ) {
$default_feed = get_default_feed ();
if ( empty ( $feed ) )
$feed = $default_feed ;
if ( ! $link = get_post_type_archive_link ( $post_type ) )
return false ;
2013-03-12 02:50:46 +01:00
2010-10-15 21:44:57 +02:00
$post_type_obj = get_post_type_object ( $post_type );
2013-03-12 02:50:46 +01:00
if ( get_option ( 'permalink_structure' ) && is_array ( $post_type_obj -> rewrite ) && $post_type_obj -> rewrite [ 'feeds' ] ) {
$link = trailingslashit ( $link );
2010-10-15 21:44:57 +02:00
$link .= 'feed/' ;
if ( $feed != $default_feed )
$link .= " $feed / " ;
} else {
$link = add_query_arg ( 'feed' , $feed , $link );
}
2014-04-14 04:13:16 +02:00
/**
* Filter the post type archive feed link .
*
* @ since 3.1 . 0
*
* @ param string $link The post type archive feed link .
* @ param string $feed Feed type .
*/
2010-10-15 21:44:57 +02:00
return apply_filters ( 'post_type_archive_feed_link' , $link , $feed );
}
2015-09-15 06:15:25 +02:00
/**
2015-09-15 10:25:25 +02:00
* Retrieve URL used for the post preview .
2015-09-15 06:15:25 +02:00
*
2015-09-15 10:25:25 +02:00
* Get the preview post URL . Allows additional query args to be appended .
2015-09-15 06:15:25 +02:00
*
* @ since 4.4 . 0
*
2015-09-15 10:25:25 +02:00
* @ param int | WP_Post $post Optional . Post ID or `WP_Post` object . Defaults to global post .
* @ param array $query_args Optional . Array of additional query args to be appended to the link .
* @ param string $preview_link Optional . Base preview link to be used if it should differ from the post permalink .
* @ return string URL used for the post preview .
2015-09-15 06:15:25 +02:00
*/
function get_preview_post_link ( $post = null , $query_args = array (), $preview_link = '' ) {
$post = get_post ( $post );
if ( ! $post ) {
return ;
}
$post_type_object = get_post_type_object ( $post -> post_type );
if ( is_post_type_viewable ( $post_type_object ) ) {
if ( ! $preview_link ) {
$preview_link = get_permalink ( $post );
}
2015-09-15 10:16:24 +02:00
$query_args [ 'preview' ] = 'true' ;
2015-09-15 06:15:25 +02:00
$preview_link = add_query_arg ( $query_args , $preview_link );
}
/**
2015-09-15 10:25:25 +02:00
* Filter the URL used for a post preview .
2015-09-15 06:15:25 +02:00
*
* @ since 2.0 . 5
* @ since 4.4 . 0 $post parameter was added .
*
2015-09-15 10:25:25 +02:00
* @ param string $preview_link URL used for the post preview .
2015-09-15 06:15:25 +02:00
* @ param WP_Post $post Post object .
*/
return apply_filters ( 'preview_post_link' , $preview_link , $post );
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Retrieve edit posts link for post .
2008-10-14 00:00:07 +02:00
*
2008-10-22 05:08:33 +02:00
* Can be used within the WordPress loop or outside of it . Can be used with
* pages , posts , attachments , and revisions .
2008-10-14 00:00:07 +02:00
*
* @ since 2.3 . 0
*
2015-05-26 20:44:25 +02:00
* @ param int $id Optional . Post ID .
2011-09-30 00:57:43 +02:00
* @ param string $context Optional , defaults to display . How to write the '&' , defaults to '&' .
2015-05-26 20:44:25 +02:00
* @ return string | void The edit post link for the given post .
2008-10-14 00:00:07 +02:00
*/
2008-04-19 01:38:21 +02:00
function get_edit_post_link ( $id = 0 , $context = 'display' ) {
2012-09-04 18:29:28 +02:00
if ( ! $post = get_post ( $id ) )
2008-03-12 06:50:07 +01:00
return ;
2007-06-14 04:25:30 +02:00
2013-07-12 00:56:48 +02:00
if ( 'revision' === $post -> post_type )
$action = '' ;
elseif ( 'display' == $context )
2010-05-03 20:16:22 +02:00
$action = '&action=edit' ;
else
$action = '&action=edit' ;
2010-01-15 23:11:12 +01:00
$post_type_object = get_post_type_object ( $post -> post_type );
2010-01-04 17:58:43 +01:00
if ( ! $post_type_object )
return ;
2013-07-08 22:05:42 +02:00
if ( ! current_user_can ( 'edit_post' , $post -> ID ) )
2010-01-04 17:58:43 +01:00
return ;
2015-09-15 12:27:29 +02:00
if ( ! in_array ( $post -> post_type , get_post_types ( array ( 'show_ui' => true ) ) ) ) {
return ;
}
2014-04-14 04:13:16 +02:00
/**
* Filter the post edit link .
*
* @ since 2.3 . 0
*
* @ param string $link The edit link .
* @ param int $post_id Post ID .
* @ param string $context The link context . If set to 'display' then ampersands
* are encoded .
*/
return apply_filters ( 'get_edit_post_link' , admin_url ( sprintf ( $post_type_object -> _edit_link . $action , $post -> ID ) ), $post -> ID , $context );
2004-01-27 10:58:01 +01:00
}
2008-10-14 00:00:07 +02:00
/**
2009-05-21 20:43:04 +02:00
* Display edit post link for post .
2008-10-14 00:00:07 +02:00
*
* @ since 1.0 . 0
2015-09-14 14:20:26 +02:00
* @ since 4.4 . 0 The `$class` argument was added .
2008-10-14 00:00:07 +02:00
*
2015-05-26 20:44:25 +02:00
* @ param string $text Optional . Anchor text .
2008-10-22 05:08:33 +02:00
* @ param string $before Optional . Display before edit link .
2015-05-26 20:44:25 +02:00
* @ param string $after Optional . Display after edit link .
* @ param int $id Optional . Post ID .
2015-09-14 01:34:24 +02:00
* @ param string $class Optional . Add custom class to link .
2008-10-14 00:00:07 +02:00
*/
2015-09-14 01:34:24 +02:00
function edit_post_link ( $text = null , $before = '' , $after = '' , $id = 0 , $class = 'post-edit-link' ) {
2014-05-27 15:43:14 +02:00
if ( ! $post = get_post ( $id ) ) {
2009-05-21 20:43:04 +02:00
return ;
2014-05-27 15:43:14 +02:00
}
2007-04-27 05:51:36 +02:00
2014-05-27 15:43:14 +02:00
if ( ! $url = get_edit_post_link ( $post -> ID ) ) {
2009-05-21 20:55:00 +02:00
return ;
2014-05-27 15:43:14 +02:00
}
2007-04-27 05:51:36 +02:00
2014-05-27 15:43:14 +02:00
if ( null === $text ) {
$text = __ ( 'Edit This' );
}
2009-10-01 19:41:09 +02:00
2015-09-14 15:01:25 +02:00
$link = '<a class="' . esc_attr ( $class ) . '" href="' . $url . '">' . $text . '</a>' ;
2014-04-14 04:13:16 +02:00
/**
* Filter the post edit link anchor tag .
*
* @ since 2.3 . 0
*
* @ param string $link Anchor tag for the edit link .
* @ param int $post_id Post ID .
2014-05-27 15:43:14 +02:00
* @ param string $text Anchor text .
2014-04-14 04:13:16 +02:00
*/
2014-05-27 15:43:14 +02:00
echo $before . apply_filters ( 'edit_post_link' , $link , $post -> ID , $text ) . $after ;
2007-04-25 01:21:56 +02:00
}
2007-04-18 01:00:35 +02:00
2009-09-21 23:33:00 +02:00
/**
* Retrieve delete posts link for post .
*
2010-04-16 04:29:10 +02:00
* Can be used within the WordPress loop or outside of it , with any post type .
2009-09-21 23:33:00 +02:00
*
* @ since 2.9 . 0
*
2015-05-26 20:44:25 +02:00
* @ param int $id Optional . Post ID .
* @ param string $deprecated Not used .
* @ param bool $force_delete Whether to bypass trash and force deletion . Default is false .
* @ return string | void The delete post link URL for the given post .
2009-09-21 23:33:00 +02:00
*/
2010-04-16 04:29:10 +02:00
function get_delete_post_link ( $id = 0 , $deprecated = '' , $force_delete = false ) {
if ( ! empty ( $deprecated ) )
2010-12-15 12:27:38 +01:00
_deprecated_argument ( __FUNCTION__ , '3.0' );
2010-04-16 04:29:10 +02:00
2012-08-23 22:01:10 +02:00
if ( ! $post = get_post ( $id ) )
2009-09-21 23:33:00 +02:00
return ;
2010-01-21 07:53:33 +01:00
$post_type_object = get_post_type_object ( $post -> post_type );
if ( ! $post_type_object )
return ;
2013-07-08 22:05:42 +02:00
if ( ! current_user_can ( 'delete_post' , $post -> ID ) )
2010-01-21 07:53:33 +01:00
return ;
2009-09-21 23:33:00 +02:00
2010-04-16 04:29:10 +02:00
$action = ( $force_delete || ! EMPTY_TRASH_DAYS ) ? 'delete' : 'trash' ;
$delete_link = add_query_arg ( 'action' , $action , admin_url ( sprintf ( $post_type_object -> _edit_link , $post -> ID ) ) );
2014-04-14 04:13:16 +02:00
/**
* Filter the post delete link .
*
* @ since 2.9 . 0
*
* @ param string $link The delete link .
* @ param int $post_id Post ID .
* @ param bool $force_delete Whether to bypass the trash and force deletion . Default false .
*/
2012-08-14 20:39:15 +02:00
return apply_filters ( 'get_delete_post_link' , wp_nonce_url ( $delete_link , " $action -post_ { $post -> ID } " ), $post -> ID , $force_delete );
2009-09-21 23:33:00 +02:00
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Retrieve edit comment link .
2008-10-14 00:00:07 +02:00
*
* @ since 2.3 . 0
*
2015-09-11 08:21:25 +02:00
* @ param int | WP_Comment $comment_id Optional . Comment ID or WP_Comment object .
2015-05-26 20:44:25 +02:00
* @ return string | void The edit comment link URL for the given comment .
2008-10-14 00:00:07 +02:00
*/
2007-04-25 01:21:56 +02:00
function get_edit_comment_link ( $comment_id = 0 ) {
2012-10-04 20:21:47 +02:00
$comment = get_comment ( $comment_id );
2007-06-14 04:25:30 +02:00
2010-09-08 01:35:28 +02:00
if ( ! current_user_can ( 'edit_comment' , $comment -> comment_ID ) )
return ;
2007-04-28 18:45:47 +02:00
2008-07-20 06:46:59 +02:00
$location = admin_url ( 'comment.php?action=editcomment&c=' ) . $comment -> comment_ID ;
2014-04-14 04:13:16 +02:00
/**
* Filter the comment edit link .
*
* @ since 2.3 . 0
*
* @ param string $location The edit link .
*/
2007-04-25 01:21:56 +02:00
return apply_filters ( 'get_edit_comment_link' , $location );
}
2004-01-27 10:58:01 +01:00
2008-10-14 00:00:07 +02:00
/**
2014-01-24 08:17:36 +01:00
* Display edit comment link with formatting .
2008-10-14 00:00:07 +02:00
*
* @ since 1.0 . 0
*
2015-05-26 20:44:25 +02:00
* @ param string $text Optional . Anchor text .
2008-10-22 05:08:33 +02:00
* @ param string $before Optional . Display before edit link .
2015-05-26 20:44:25 +02:00
* @ param string $after Optional . Display after edit link .
2008-10-14 00:00:07 +02:00
*/
2014-05-27 15:43:14 +02:00
function edit_comment_link ( $text = null , $before = '' , $after = '' ) {
2015-09-09 04:51:24 +02:00
$comment = get_comment ();
2007-04-27 05:51:36 +02:00
2014-05-27 15:43:14 +02:00
if ( ! current_user_can ( 'edit_comment' , $comment -> comment_ID ) ) {
2010-09-08 01:35:28 +02:00
return ;
2014-05-27 15:43:14 +02:00
}
2007-04-27 05:51:36 +02:00
2014-05-27 15:43:14 +02:00
if ( null === $text ) {
$text = __ ( 'Edit This' );
}
2009-10-01 19:41:09 +02:00
2015-09-11 08:21:25 +02:00
$link = '<a class="comment-edit-link" href="' . get_edit_comment_link ( $comment ) . '">' . $text . '</a>' ;
2014-04-14 04:13:16 +02:00
/**
* Filter the comment edit link anchor tag .
*
* @ since 2.3 . 0
*
* @ param string $link Anchor tag for the edit link .
* @ param int $comment_id Comment ID .
2014-05-27 15:43:14 +02:00
* @ param string $text Anchor text .
2014-04-14 04:13:16 +02:00
*/
2014-05-27 15:43:14 +02:00
echo $before . apply_filters ( 'edit_comment_link' , $link , $comment -> comment_ID , $text ) . $after ;
2004-01-27 10:58:01 +01:00
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Display edit bookmark ( literally a URL external to blog ) link .
2008-10-14 00:00:07 +02:00
*
2008-10-22 05:08:33 +02:00
* @ since 2.7 . 0
2008-10-14 00:00:07 +02:00
*
2015-01-16 23:44:25 +01:00
* @ param int | stdClass $link Optional . Bookmark ID .
2015-05-26 20:44:25 +02:00
* @ return string | void The edit bookmark link URL .
2008-10-14 00:00:07 +02:00
*/
2008-08-28 00:04:12 +02:00
function get_edit_bookmark_link ( $link = 0 ) {
2008-11-17 19:21:20 +01:00
$link = get_bookmark ( $link );
2008-08-28 00:04:12 +02:00
if ( ! current_user_can ( 'manage_links' ) )
return ;
$location = admin_url ( 'link.php?action=edit&link_id=' ) . $link -> link_id ;
2014-04-14 04:13:16 +02:00
/**
* Filter the bookmark ( link ) edit link .
*
* @ since 2.7 . 0
*
* @ param string $location The edit link .
* @ param int $link_id Bookmark ID .
*/
2008-08-28 00:04:12 +02:00
return apply_filters ( 'get_edit_bookmark_link' , $location , $link -> link_id );
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Display edit bookmark ( literally a URL external to blog ) link anchor content .
2008-10-14 00:00:07 +02:00
*
2008-10-22 05:08:33 +02:00
* @ since 2.7 . 0
2008-10-14 00:00:07 +02:00
*
2015-05-26 20:44:25 +02:00
* @ param string $link Optional . Anchor text .
* @ param string $before Optional . Display before edit link .
* @ param string $after Optional . Display after edit link .
* @ param int $bookmark Optional . Bookmark ID .
2008-10-14 00:00:07 +02:00
*/
2008-08-28 00:04:12 +02:00
function edit_bookmark_link ( $link = '' , $before = '' , $after = '' , $bookmark = null ) {
$bookmark = get_bookmark ( $bookmark );
if ( ! current_user_can ( 'manage_links' ) )
return ;
if ( empty ( $link ) )
$link = __ ( 'Edit This' );
2013-09-23 16:51:10 +02:00
$link = '<a href="' . get_edit_bookmark_link ( $bookmark ) . '">' . $link . '</a>' ;
2014-04-14 04:13:16 +02:00
/**
* Filter the bookmark edit link anchor tag .
*
* @ since 2.7 . 0
*
* @ param string $link Anchor tag for the edit link .
* @ param int $link_id Bookmark ID .
*/
2008-08-28 00:04:12 +02:00
echo $before . apply_filters ( 'edit_bookmark_link' , $link , $bookmark -> link_id ) . $after ;
}
2012-07-30 20:30:03 +02:00
/**
* Retrieve edit user link
*
* @ since 3.5 . 0
*
* @ param int $user_id Optional . User ID . Defaults to the current user .
* @ return string URL to edit user page or empty string .
*/
function get_edit_user_link ( $user_id = null ) {
if ( ! $user_id )
$user_id = get_current_user_id ();
if ( empty ( $user_id ) || ! current_user_can ( 'edit_user' , $user_id ) )
return '' ;
2012-08-03 03:06:05 +02:00
$user = get_userdata ( $user_id );
2012-07-30 20:30:03 +02:00
2012-08-03 03:06:05 +02:00
if ( ! $user )
2012-07-30 20:30:03 +02:00
return '' ;
if ( get_current_user_id () == $user -> ID )
$link = get_edit_profile_url ( $user -> ID );
else
$link = add_query_arg ( 'user_id' , $user -> ID , self_admin_url ( 'user-edit.php' ) );
2014-04-14 04:13:16 +02:00
/**
* Filter the user edit link .
*
* @ since 3.5 . 0
*
* @ param string $link The edit link .
* @ param int $user_id User ID .
*/
2012-07-30 20:30:03 +02:00
return apply_filters ( 'get_edit_user_link' , $link , $user -> ID );
}
2004-06-02 09:44:43 +02:00
// Navigation links
2008-10-14 00:00:07 +02:00
/**
2010-12-15 17:45:14 +01:00
* Retrieve previous post that is adjacent to current post .
2008-10-14 00:00:07 +02:00
*
* @ since 1.5 . 0
*
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
* @ param bool $in_same_term Optional . Whether post should be in a same taxonomy term .
* @ param array | string $excluded_terms Optional . Array or comma - separated list of excluded term IDs .
* @ param string $taxonomy Optional . Taxonomy , if $in_same_term is true . Default 'category' .
2015-05-26 20:44:25 +02:00
* @ return null | string | WP_Post Post object if successful . Null if global $post is not set . Empty string if no corresponding post exists .
2008-10-14 00:00:07 +02:00
*/
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
function get_previous_post ( $in_same_term = false , $excluded_terms = '' , $taxonomy = 'category' ) {
return get_adjacent_post ( $in_same_term , $excluded_terms , true , $taxonomy );
2004-08-24 03:35:57 +02:00
}
2008-10-14 00:00:07 +02:00
/**
2010-12-15 17:45:14 +01:00
* Retrieve next post that is adjacent to current post .
2008-10-14 00:00:07 +02:00
*
* @ since 1.5 . 0
*
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
* @ param bool $in_same_term Optional . Whether post should be in a same taxonomy term .
* @ param array | string $excluded_terms Optional . Array or comma - separated list of excluded term IDs .
* @ param string $taxonomy Optional . Taxonomy , if $in_same_term is true . Default 'category' .
2015-05-26 20:44:25 +02:00
* @ return null | string | WP_Post Post object if successful . Null if global $post is not set . Empty string if no corresponding post exists .
2008-10-14 00:00:07 +02:00
*/
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
function get_next_post ( $in_same_term = false , $excluded_terms = '' , $taxonomy = 'category' ) {
return get_adjacent_post ( $in_same_term , $excluded_terms , false , $taxonomy );
2007-12-05 10:25:45 +01:00
}
2008-10-14 00:00:07 +02:00
/**
2010-12-15 17:45:14 +01:00
* Retrieve adjacent post .
2008-10-14 00:00:07 +02:00
*
2010-12-15 17:45:14 +01:00
* Can either be next or previous post .
2008-10-14 00:00:07 +02:00
*
* @ since 2.5 . 0
*
2015-05-26 20:44:25 +02:00
* @ global wpdb $wpdb
*
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
* @ param bool $in_same_term Optional . Whether post should be in a same taxonomy term .
* @ param array | string $excluded_terms Optional . Array or comma - separated list of excluded term IDs .
* @ param bool $previous Optional . Whether to retrieve previous post .
* @ param string $taxonomy Optional . Taxonomy , if $in_same_term is true . Default 'category' .
2015-05-26 20:44:25 +02:00
* @ return null | string | WP_Post Post object if successful . Null if global $post is not set . Empty string if no corresponding post exists .
2008-10-14 00:00:07 +02:00
*/
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
function get_adjacent_post ( $in_same_term = false , $excluded_terms = '' , $previous = true , $taxonomy = 'category' ) {
Revert the conversion of adjacent post queries to WP_Query. Explanation on the ticket.
Reverts [27285], [27286], [27287], [27288], [27291], [27292], [27293], [27296], [27633], [27634], [27635], and [27692].
see #26937.
Built from https://develop.svn.wordpress.org/trunk@27836
git-svn-id: http://core.svn.wordpress.org/trunk@27670 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-29 07:03:15 +01:00
global $wpdb ;
2014-02-26 18:10:13 +01:00
Revert the conversion of adjacent post queries to WP_Query. Explanation on the ticket.
Reverts [27285], [27286], [27287], [27288], [27291], [27292], [27293], [27296], [27633], [27634], [27635], and [27692].
see #26937.
Built from https://develop.svn.wordpress.org/trunk@27836
git-svn-id: http://core.svn.wordpress.org/trunk@27670 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-29 07:03:15 +01:00
if ( ( ! $post = get_post () ) || ! taxonomy_exists ( $taxonomy ) )
return null ;
2004-08-24 03:35:57 +02:00
Revert the conversion of adjacent post queries to WP_Query. Explanation on the ticket.
Reverts [27285], [27286], [27287], [27288], [27291], [27292], [27293], [27296], [27633], [27634], [27635], and [27692].
see #26937.
Built from https://develop.svn.wordpress.org/trunk@27836
git-svn-id: http://core.svn.wordpress.org/trunk@27670 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-29 07:03:15 +01:00
$current_post_date = $post -> post_date ;
2014-02-26 18:10:13 +01:00
Revert the conversion of adjacent post queries to WP_Query. Explanation on the ticket.
Reverts [27285], [27286], [27287], [27288], [27291], [27292], [27293], [27296], [27633], [27634], [27635], and [27692].
see #26937.
Built from https://develop.svn.wordpress.org/trunk@27836
git-svn-id: http://core.svn.wordpress.org/trunk@27670 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-29 07:03:15 +01:00
$join = '' ;
2014-07-20 00:27:14 +02:00
$where = '' ;
Revert the conversion of adjacent post queries to WP_Query. Explanation on the ticket.
Reverts [27285], [27286], [27287], [27288], [27291], [27292], [27293], [27296], [27633], [27634], [27635], and [27692].
see #26937.
Built from https://develop.svn.wordpress.org/trunk@27836
git-svn-id: http://core.svn.wordpress.org/trunk@27670 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-29 07:03:15 +01:00
if ( $in_same_term || ! empty ( $excluded_terms ) ) {
2014-07-20 00:27:14 +02:00
if ( ! empty ( $excluded_terms ) && ! is_array ( $excluded_terms ) ) {
// back-compat, $excluded_terms used to be $excluded_terms with IDs separated by " and "
if ( false !== strpos ( $excluded_terms , ' and ' ) ) {
_deprecated_argument ( __FUNCTION__ , '3.3' , sprintf ( __ ( 'Use commas instead of %s to separate excluded terms.' ), " 'and' " ) );
$excluded_terms = explode ( ' and ' , $excluded_terms );
} else {
$excluded_terms = explode ( ',' , $excluded_terms );
}
$excluded_terms = array_map ( 'intval' , $excluded_terms );
}
2006-02-12 08:53:23 +01:00
Revert the conversion of adjacent post queries to WP_Query. Explanation on the ticket.
Reverts [27285], [27286], [27287], [27288], [27291], [27292], [27293], [27296], [27633], [27634], [27635], and [27692].
see #26937.
Built from https://develop.svn.wordpress.org/trunk@27836
git-svn-id: http://core.svn.wordpress.org/trunk@27670 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-29 07:03:15 +01:00
if ( $in_same_term ) {
2015-09-12 22:34:24 +02:00
$join .= " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id " ;
$where .= $wpdb -> prepare ( " AND tt.taxonomy = %s " , $taxonomy );
Revert the conversion of adjacent post queries to WP_Query. Explanation on the ticket.
Reverts [27285], [27286], [27287], [27288], [27291], [27292], [27293], [27296], [27633], [27634], [27635], and [27692].
see #26937.
Built from https://develop.svn.wordpress.org/trunk@27836
git-svn-id: http://core.svn.wordpress.org/trunk@27670 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-29 07:03:15 +01:00
if ( ! is_object_in_taxonomy ( $post -> post_type , $taxonomy ) )
return '' ;
$term_array = wp_get_object_terms ( $post -> ID , $taxonomy , array ( 'fields' => 'ids' ) );
2014-07-20 00:27:14 +02:00
// Remove any exclusions from the term array to include.
$term_array = array_diff ( $term_array , ( array ) $excluded_terms );
$term_array = array_map ( 'intval' , $term_array );
Revert the conversion of adjacent post queries to WP_Query. Explanation on the ticket.
Reverts [27285], [27286], [27287], [27288], [27291], [27292], [27293], [27296], [27633], [27634], [27635], and [27692].
see #26937.
Built from https://develop.svn.wordpress.org/trunk@27836
git-svn-id: http://core.svn.wordpress.org/trunk@27670 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-29 07:03:15 +01:00
if ( ! $term_array || is_wp_error ( $term_array ) )
return '' ;
2014-07-20 00:27:14 +02:00
$where .= " AND tt.term_id IN ( " . implode ( ',' , $term_array ) . " ) " ;
2014-02-26 18:10:13 +01:00
}
Revert the conversion of adjacent post queries to WP_Query. Explanation on the ticket.
Reverts [27285], [27286], [27287], [27288], [27291], [27292], [27293], [27296], [27633], [27634], [27635], and [27692].
see #26937.
Built from https://develop.svn.wordpress.org/trunk@27836
git-svn-id: http://core.svn.wordpress.org/trunk@27670 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-29 07:03:15 +01:00
if ( ! empty ( $excluded_terms ) ) {
2014-11-06 21:12:22 +01:00
$where .= " AND p.ID NOT IN ( SELECT tr.object_id FROM $wpdb->term_relationships tr LEFT JOIN $wpdb->term_taxonomy tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id) WHERE tt.term_id IN ( " . implode ( $excluded_terms , ',' ) . ') )' ;
2007-12-05 10:25:45 +01:00
}
2005-04-18 23:47:35 +02:00
}
2004-08-24 03:35:57 +02:00
2015-01-30 03:20:23 +01:00
// 'post_status' clause depends on the current user.
if ( is_user_logged_in () ) {
$user_id = get_current_user_id ();
$post_type_object = get_post_type_object ( $post -> post_type );
if ( empty ( $post_type_object ) ) {
$post_type_cap = $post -> post_type ;
$read_private_cap = 'read_private_' . $post_type_cap . 's' ;
} else {
$read_private_cap = $post_type_object -> cap -> read_private_posts ;
}
/*
* Results should include private posts belonging to the current user , or private posts where the
* current user has the 'read_private_posts' cap .
*/
$private_states = get_post_stati ( array ( 'private' => true ) );
$where .= " AND ( p.post_status = 'publish' " ;
foreach ( ( array ) $private_states as $state ) {
if ( current_user_can ( $read_private_cap ) ) {
$where .= $wpdb -> prepare ( " OR p.post_status = %s " , $state );
} else {
$where .= $wpdb -> prepare ( " OR (p.post_author = %d AND p.post_status = %s) " , $user_id , $state );
}
}
$where .= " ) " ;
} else {
$where .= " AND p.post_status = 'publish' " ;
}
Revert the conversion of adjacent post queries to WP_Query. Explanation on the ticket.
Reverts [27285], [27286], [27287], [27288], [27291], [27292], [27293], [27296], [27633], [27634], [27635], and [27692].
see #26937.
Built from https://develop.svn.wordpress.org/trunk@27836
git-svn-id: http://core.svn.wordpress.org/trunk@27670 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-29 07:03:15 +01:00
$adjacent = $previous ? 'previous' : 'next' ;
$op = $previous ? '<' : '>' ;
$order = $previous ? 'DESC' : 'ASC' ;
2014-04-14 04:13:16 +02:00
/**
* Filter the JOIN clause in the SQL for an adjacent post query .
*
2014-11-30 13:10:23 +01:00
* The dynamic portion of the hook name , `$adjacent` , refers to the type
2014-04-14 04:13:16 +02:00
* of adjacency , 'next' or 'previous' .
*
* @ since 2.5 . 0
2015-09-09 05:49:24 +02:00
* @ since 4.4 . 0 Added the `$taxonomy` and `$post` parameters .
2014-04-14 04:13:16 +02:00
*
2015-09-09 05:49:24 +02:00
* @ param string $join The JOIN clause in the SQL .
* @ param bool $in_same_term Whether post should be in a same taxonomy term .
* @ param array $excluded_terms Array of excluded term IDs .
* @ param string $taxonomy Taxonomy . Used to identify the term used when `$in_same_term` is true .
* @ param WP_Post $post WP_Post object .
2014-04-14 04:13:16 +02:00
*/
2015-09-09 05:49:24 +02:00
$join = apply_filters ( " get_ { $adjacent } _post_join " , $join , $in_same_term , $excluded_terms , $taxonomy , $post );
2014-04-14 04:13:16 +02:00
/**
* Filter the WHERE clause in the SQL for an adjacent post query .
*
2014-11-30 13:10:23 +01:00
* The dynamic portion of the hook name , `$adjacent` , refers to the type
2014-04-14 04:13:16 +02:00
* of adjacency , 'next' or 'previous' .
*
* @ since 2.5 . 0
2015-09-09 05:49:24 +02:00
* @ since 4.4 . 0 Added the `$taxonomy` and `$post` parameters .
2014-04-14 04:13:16 +02:00
*
2014-11-30 13:10:23 +01:00
* @ param string $where The `WHERE` clause in the SQL .
2014-04-14 04:13:16 +02:00
* @ param bool $in_same_term Whether post should be in a same taxonomy term .
* @ param array $excluded_terms Array of excluded term IDs .
2015-08-29 21:59:21 +02:00
* @ param string $taxonomy Taxonomy . Used to identify the term used when `$in_same_term` is true .
2015-09-09 05:49:24 +02:00
* @ param WP_Post $post WP_Post object .
2014-04-14 04:13:16 +02:00
*/
2015-09-09 05:49:24 +02:00
$where = apply_filters ( " get_ { $adjacent } _post_where " , $wpdb -> prepare ( " WHERE p.post_date $op %s AND p.post_type = %s $where " , $current_post_date , $post -> post_type ), $in_same_term , $excluded_terms , $taxonomy , $post );
2014-04-14 04:13:16 +02:00
/**
* Filter the ORDER BY clause in the SQL for an adjacent post query .
*
2014-11-30 13:10:23 +01:00
* The dynamic portion of the hook name , `$adjacent` , refers to the type
2014-04-14 04:13:16 +02:00
* of adjacency , 'next' or 'previous' .
*
* @ since 2.5 . 0
2015-09-09 05:49:24 +02:00
* @ since 4.4 . 0 Added the `$post` parameter .
2014-04-14 04:13:16 +02:00
*
2014-11-30 13:10:23 +01:00
* @ param string $order_by The `ORDER BY` clause in the SQL .
2015-09-09 05:49:24 +02:00
* @ param WP_Post $post WP_Post object .
2014-04-14 04:13:16 +02:00
*/
2015-09-09 05:49:24 +02:00
$sort = apply_filters ( " get_ { $adjacent } _post_sort " , " ORDER BY p.post_date $order LIMIT 1 " , $post );
Revert the conversion of adjacent post queries to WP_Query. Explanation on the ticket.
Reverts [27285], [27286], [27287], [27288], [27291], [27292], [27293], [27296], [27633], [27634], [27635], and [27692].
see #26937.
Built from https://develop.svn.wordpress.org/trunk@27836
git-svn-id: http://core.svn.wordpress.org/trunk@27670 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-29 07:03:15 +01:00
$query = " SELECT p.ID FROM $wpdb->posts AS p $join $where $sort " ;
$query_key = 'adjacent_post_' . md5 ( $query );
$result = wp_cache_get ( $query_key , 'counts' );
if ( false !== $result ) {
if ( $result )
$result = get_post ( $result );
return $result ;
2012-08-27 15:13:40 +02:00
}
2009-05-08 20:04:13 +02:00
Revert the conversion of adjacent post queries to WP_Query. Explanation on the ticket.
Reverts [27285], [27286], [27287], [27288], [27291], [27292], [27293], [27296], [27633], [27634], [27635], and [27692].
see #26937.
Built from https://develop.svn.wordpress.org/trunk@27836
git-svn-id: http://core.svn.wordpress.org/trunk@27670 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-29 07:03:15 +01:00
$result = $wpdb -> get_var ( $query );
if ( null === $result )
$result = '' ;
2014-03-20 03:59:15 +01:00
Revert the conversion of adjacent post queries to WP_Query. Explanation on the ticket.
Reverts [27285], [27286], [27287], [27288], [27291], [27292], [27293], [27296], [27633], [27634], [27635], and [27692].
see #26937.
Built from https://develop.svn.wordpress.org/trunk@27836
git-svn-id: http://core.svn.wordpress.org/trunk@27670 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-29 07:03:15 +01:00
wp_cache_set ( $query_key , $result , 'counts' );
2014-03-20 03:59:15 +01:00
Revert the conversion of adjacent post queries to WP_Query. Explanation on the ticket.
Reverts [27285], [27286], [27287], [27288], [27291], [27292], [27293], [27296], [27633], [27634], [27635], and [27692].
see #26937.
Built from https://develop.svn.wordpress.org/trunk@27836
git-svn-id: http://core.svn.wordpress.org/trunk@27670 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-29 07:03:15 +01:00
if ( $result )
$result = get_post ( $result );
2014-03-20 03:59:15 +01:00
Revert the conversion of adjacent post queries to WP_Query. Explanation on the ticket.
Reverts [27285], [27286], [27287], [27288], [27291], [27292], [27293], [27296], [27633], [27634], [27635], and [27692].
see #26937.
Built from https://develop.svn.wordpress.org/trunk@27836
git-svn-id: http://core.svn.wordpress.org/trunk@27670 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-29 07:03:15 +01:00
return $result ;
2007-12-05 10:25:45 +01:00
}
2004-08-24 03:35:57 +02:00
2009-03-18 22:56:03 +01:00
/**
* Get adjacent post relational link .
*
* Can either be next or previous post relational link .
*
* @ since 2.8 . 0
*
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
* @ param string $title Optional . Link title format .
* @ param bool $in_same_term Optional . Whether link should be in a same taxonomy term .
* @ param array | string $excluded_terms Optional . Array or comma - separated list of excluded term IDs .
* @ param bool $previous Optional . Whether to display link to previous or next post . Default true .
* @ param string $taxonomy Optional . Taxonomy , if $in_same_term is true . Default 'category' .
2015-05-26 20:44:25 +02:00
* @ return string | void The adjacent post relational link URL .
2009-03-18 22:56:03 +01:00
*/
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
function get_adjacent_post_rel_link ( $title = '%title' , $in_same_term = false , $excluded_terms = '' , $previous = true , $taxonomy = 'category' ) {
2012-09-04 18:29:28 +02:00
if ( $previous && is_attachment () && $post = get_post () )
$post = get_post ( $post -> post_parent );
2009-03-18 22:56:03 +01:00
else
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
$post = get_adjacent_post ( $in_same_term , $excluded_terms , $previous , $taxonomy );
2009-03-18 22:56:03 +01:00
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
if ( empty ( $post ) )
2009-03-18 22:56:03 +01:00
return ;
2013-07-23 18:05:40 +02:00
$post_title = the_title_attribute ( array ( 'echo' => false , 'post' => $post ) );
if ( empty ( $post_title ) )
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
$post_title = $previous ? __ ( 'Previous Post' ) : __ ( 'Next Post' );
2009-03-18 22:56:03 +01:00
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
$date = mysql2date ( get_option ( 'date_format' ), $post -> post_date );
2009-04-20 20:18:39 +02:00
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
$title = str_replace ( '%title' , $post_title , $title );
$title = str_replace ( '%date' , $date , $title );
2009-03-18 22:56:03 +01:00
$link = $previous ? " <link rel='prev' title=' " : " <link rel='next' title=' " ;
2009-05-05 21:43:53 +02:00
$link .= esc_attr ( $title );
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
$link .= " ' href=' " . get_permalink ( $post ) . " ' /> \n " ;
2009-03-18 22:56:03 +01:00
2009-04-23 00:56:52 +02:00
$adjacent = $previous ? 'previous' : 'next' ;
2014-04-14 04:13:16 +02:00
/**
* Filter the adjacent post relational link .
*
2014-11-30 13:10:23 +01:00
* The dynamic portion of the hook name , `$adjacent` , refers to the type
2014-04-14 04:13:16 +02:00
* of adjacency , 'next' or 'previous' .
*
* @ since 2.8 . 0
*
* @ param string $link The relational link .
*/
2009-04-23 00:56:52 +02:00
return apply_filters ( " { $adjacent } _post_rel_link " , $link );
2009-03-18 22:56:03 +01:00
}
/**
* Display relational links for the posts adjacent to the current post .
*
* @ since 2.8 . 0
*
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
* @ param string $title Optional . Link title format .
* @ param bool $in_same_term Optional . Whether link should be in a same taxonomy term .
* @ param array | string $excluded_terms Optional . Array or comma - separated list of excluded term IDs .
* @ param string $taxonomy Optional . Taxonomy , if $in_same_term is true . Default 'category' .
2009-03-18 22:56:03 +01:00
*/
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
function adjacent_posts_rel_link ( $title = '%title' , $in_same_term = false , $excluded_terms = '' , $taxonomy = 'category' ) {
2014-03-26 23:32:15 +01:00
echo get_adjacent_post_rel_link ( $title , $in_same_term , $excluded_terms , true , $taxonomy );
echo get_adjacent_post_rel_link ( $title , $in_same_term , $excluded_terms , false , $taxonomy );
2009-03-18 22:56:03 +01:00
}
2010-04-06 17:06:42 +02:00
/**
* Display relational links for the posts adjacent to the current post for single post pages .
*
2011-09-30 00:57:43 +02:00
* This is meant to be attached to actions like 'wp_head' . Do not call this directly in plugins or theme templates .
2010-04-06 17:06:42 +02:00
* @ since 3.0 . 0
*
*/
function adjacent_posts_rel_link_wp_head () {
2014-06-18 02:05:16 +02:00
if ( ! is_single () || is_attachment () ) {
2010-04-06 17:06:42 +02:00
return ;
2014-05-30 23:20:14 +02:00
}
2010-04-06 17:06:42 +02:00
adjacent_posts_rel_link ();
}
2009-03-18 22:56:03 +01:00
/**
* Display relational link for the next post adjacent to the current post .
*
* @ since 2.8 . 0
*
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
* @ param string $title Optional . Link title format .
* @ param bool $in_same_term Optional . Whether link should be in a same taxonomy term .
* @ param array | string $excluded_terms Optional . Array or comma - separated list of excluded term IDs .
* @ param string $taxonomy Optional . Taxonomy , if $in_same_term is true . Default 'category' .
2009-03-18 22:56:03 +01:00
*/
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
function next_post_rel_link ( $title = '%title' , $in_same_term = false , $excluded_terms = '' , $taxonomy = 'category' ) {
2014-03-26 23:32:15 +01:00
echo get_adjacent_post_rel_link ( $title , $in_same_term , $excluded_terms , false , $taxonomy );
2009-03-18 22:56:03 +01:00
}
/**
* Display relational link for the previous post adjacent to the current post .
*
* @ since 2.8 . 0
*
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
* @ param string $title Optional . Link title format .
* @ param bool $in_same_term Optional . Whether link should be in a same taxonomy term .
* @ param array | string $excluded_terms Optional . Array or comma - separated list of excluded term IDs . Default true .
* @ param string $taxonomy Optional . Taxonomy , if $in_same_term is true . Default 'category' .
2009-03-18 22:56:03 +01:00
*/
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
function prev_post_rel_link ( $title = '%title' , $in_same_term = false , $excluded_terms = '' , $taxonomy = 'category' ) {
2014-03-26 23:32:15 +01:00
echo get_adjacent_post_rel_link ( $title , $in_same_term , $excluded_terms , true , $taxonomy );
2009-03-18 22:56:03 +01:00
}
/**
* Retrieve boundary post .
*
2010-09-26 10:31:16 +02:00
* Boundary being either the first or last post by publish date within the constraints specified
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
* by $in_same_term or $excluded_terms .
2009-03-18 22:56:03 +01:00
*
* @ since 2.8 . 0
*
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
* @ param bool $in_same_term Optional . Whether returned post should be in a same taxonomy term .
* @ param array | string $excluded_terms Optional . Array or comma - separated list of excluded term IDs .
* @ param bool $start Optional . Whether to retrieve first or last post .
* @ param string $taxonomy Optional . Taxonomy , if $in_same_term is true . Default 'category' .
2015-05-26 20:44:25 +02:00
* @ return null | array Array containing the boundary post object if successful , null otherwise .
2009-03-18 22:56:03 +01:00
*/
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
function get_boundary_post ( $in_same_term = false , $excluded_terms = '' , $start = true , $taxonomy = 'category' ) {
2012-09-04 18:29:28 +02:00
$post = get_post ();
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
if ( ! $post || ! is_single () || is_attachment () || ! taxonomy_exists ( $taxonomy ) )
2009-04-23 00:56:52 +02:00
return null ;
2009-03-18 22:56:03 +01:00
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
$query_args = array (
'posts_per_page' => 1 ,
'order' => $start ? 'ASC' : 'DESC' ,
'update_post_term_cache' => false ,
'update_post_meta_cache' => false
);
2009-04-23 00:56:52 +02:00
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
$term_array = array ();
2009-04-23 00:56:52 +02:00
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
if ( ! is_array ( $excluded_terms ) ) {
if ( ! empty ( $excluded_terms ) )
$excluded_terms = explode ( ',' , $excluded_terms );
else
$excluded_terms = array ();
2009-04-23 00:56:52 +02:00
}
2009-03-18 22:56:03 +01:00
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
if ( $in_same_term || ! empty ( $excluded_terms ) ) {
if ( $in_same_term )
$term_array = wp_get_object_terms ( $post -> ID , $taxonomy , array ( 'fields' => 'ids' ) );
2009-03-18 22:56:03 +01:00
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
if ( ! empty ( $excluded_terms ) ) {
$excluded_terms = array_map ( 'intval' , $excluded_terms );
$excluded_terms = array_diff ( $excluded_terms , $term_array );
$inverse_terms = array ();
foreach ( $excluded_terms as $excluded_term )
$inverse_terms [] = $excluded_term * - 1 ;
$excluded_terms = $inverse_terms ;
}
$query_args [ 'tax_query' ] = array ( array (
'taxonomy' => $taxonomy ,
'terms' => array_merge ( $term_array , $excluded_terms )
) );
}
2009-03-18 22:56:03 +01:00
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
return get_posts ( $query_args );
2009-03-18 22:56:03 +01:00
}
2013-09-11 00:12:10 +02:00
/*
* Get previous post link that is adjacent to the current post .
*
* @ since 3.7 . 0
*
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
* @ param string $format Optional . Link anchor format .
* @ param string $link Optional . Link permalink format .
* @ param bool $in_same_term Optional . Whether link should be in a same taxonomy term .
* @ param array | string $excluded_terms Optional . Array or comma - separated list of excluded term IDs .
* @ param string $taxonomy Optional . Taxonomy , if $in_same_term is true . Default 'category' .
2014-11-30 05:44:23 +01:00
* @ return string The link URL of the previous post in relation to the current post .
2013-09-11 00:12:10 +02:00
*/
2014-05-25 18:10:13 +02:00
function get_previous_post_link ( $format = '« %link' , $link = '%title' , $in_same_term = false , $excluded_terms = '' , $taxonomy = 'category' ) {
return get_adjacent_post_link ( $format , $link , $in_same_term , $excluded_terms , true , $taxonomy );
2013-09-11 00:12:10 +02:00
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Display previous post link that is adjacent to the current post .
2008-10-14 00:00:07 +02:00
*
* @ since 1.5 . 0
2013-10-30 15:39:10 +01:00
* @ see get_previous_post_link ()
2008-10-14 00:00:07 +02:00
*
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
* @ param string $format Optional . Link anchor format .
* @ param string $link Optional . Link permalink format .
* @ param bool $in_same_term Optional . Whether link should be in a same taxonomy term .
* @ param array | string $excluded_terms Optional . Array or comma - separated list of excluded term IDs .
* @ param string $taxonomy Optional . Taxonomy , if $in_same_term is true . Default 'category' .
2008-10-14 00:00:07 +02:00
*/
2014-05-25 18:10:13 +02:00
function previous_post_link ( $format = '« %link' , $link = '%title' , $in_same_term = false , $excluded_terms = '' , $taxonomy = 'category' ) {
echo get_previous_post_link ( $format , $link , $in_same_term , $excluded_terms , $taxonomy );
2013-09-11 00:12:10 +02:00
}
/**
2013-10-30 15:39:10 +01:00
* Get next post link that is adjacent to the current post .
2013-09-11 00:12:10 +02:00
*
* @ since 3.7 . 0
*
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
* @ param string $format Optional . Link anchor format .
* @ param string $link Optional . Link permalink format .
* @ param bool $in_same_term Optional . Whether link should be in a same taxonomy term .
* @ param array | string $excluded_terms Optional . Array or comma - separated list of excluded term IDs .
* @ param string $taxonomy Optional . Taxonomy , if $in_same_term is true . Default 'category' .
2014-11-30 05:44:23 +01:00
* @ return string The link URL of the next post in relation to the current post .
2013-09-11 00:12:10 +02:00
*/
2014-05-25 18:10:13 +02:00
function get_next_post_link ( $format = '%link »' , $link = '%title' , $in_same_term = false , $excluded_terms = '' , $taxonomy = 'category' ) {
return get_adjacent_post_link ( $format , $link , $in_same_term , $excluded_terms , false , $taxonomy );
2004-08-24 03:35:57 +02:00
}
2008-10-14 00:00:07 +02:00
/**
2008-10-22 05:08:33 +02:00
* Display next post link that is adjacent to the current post .
2008-10-14 00:00:07 +02:00
*
* @ since 1.5 . 0
2013-10-30 15:39:10 +01:00
* @ see get_next_post_link ()
2008-10-14 00:00:07 +02:00
*
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
* @ param string $format Optional . Link anchor format .
* @ param string $link Optional . Link permalink format .
* @ param bool $in_same_term Optional . Whether link should be in a same taxonomy term .
* @ param array | string $excluded_terms Optional . Array or comma - separated list of excluded term IDs .
* @ param string $taxonomy Optional . Taxonomy , if $in_same_term is true . Default 'category' .
2008-10-14 00:00:07 +02:00
*/
2014-05-25 18:10:13 +02:00
function next_post_link ( $format = '%link »' , $link = '%title' , $in_same_term = false , $excluded_terms = '' , $taxonomy = 'category' ) {
echo get_next_post_link ( $format , $link , $in_same_term , $excluded_terms , $taxonomy );
2007-12-05 10:25:45 +01:00
}
2008-10-14 00:00:07 +02:00
/**
2013-09-11 00:12:10 +02:00
* Get adjacent post link .
2008-10-14 00:00:07 +02:00
*
2008-10-22 05:08:33 +02:00
* Can be either next post link or previous .
2008-10-14 00:00:07 +02:00
*
2013-09-11 00:12:10 +02:00
* @ since 3.7 . 0
2008-10-14 00:00:07 +02:00
*
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
* @ param string $format Link anchor format .
* @ param string $link Link permalink format .
* @ param bool $in_same_term Optional . Whether link should be in a same taxonomy term .
* @ param array | string $excluded_terms Optional . Array or comma - separated list of excluded terms IDs .
* @ param bool $previous Optional . Whether to display link to previous or next post . Default true .
* @ param string $taxonomy Optional . Taxonomy , if $in_same_term is true . Default 'category' .
2014-11-30 05:44:23 +01:00
* @ return string The link URL of the previous or next post in relation to the current post .
2008-10-14 00:00:07 +02:00
*/
2014-05-25 18:10:13 +02:00
function get_adjacent_post_link ( $format , $link , $in_same_term = false , $excluded_terms = '' , $previous = true , $taxonomy = 'category' ) {
2007-12-05 10:25:45 +01:00
if ( $previous && is_attachment () )
2012-09-04 18:29:28 +02:00
$post = get_post ( get_post () -> post_parent );
2007-12-05 10:25:45 +01:00
else
2014-05-25 18:10:13 +02:00
$post = get_adjacent_post ( $in_same_term , $excluded_terms , $previous , $taxonomy );
2004-08-24 03:35:57 +02:00
2012-09-10 23:36:06 +02:00
if ( ! $post ) {
$output = '' ;
} else {
$title = $post -> post_title ;
2004-08-24 03:35:57 +02:00
2012-09-10 23:36:06 +02:00
if ( empty ( $post -> post_title ) )
$title = $previous ? __ ( 'Previous Post' ) : __ ( 'Next Post' );
2007-09-11 22:05:52 +02:00
2013-10-25 00:59:20 +02:00
/** This filter is documented in wp-includes/post-template.php */
2012-09-10 23:36:06 +02:00
$title = apply_filters ( 'the_title' , $title , $post -> ID );
2014-04-14 04:13:16 +02:00
2012-09-10 23:36:06 +02:00
$date = mysql2date ( get_option ( 'date_format' ), $post -> post_date );
$rel = $previous ? 'prev' : 'next' ;
2007-09-11 22:05:52 +02:00
2012-09-10 23:36:06 +02:00
$string = '<a href="' . get_permalink ( $post ) . '" rel="' . $rel . '">' ;
$inlink = str_replace ( '%title' , $title , $link );
$inlink = str_replace ( '%date' , $date , $inlink );
$inlink = $string . $inlink . '</a>' ;
2007-12-05 10:25:45 +01:00
2012-09-10 23:36:06 +02:00
$output = str_replace ( '%link' , $inlink , $format );
}
2004-08-24 03:35:57 +02:00
2008-06-17 00:27:07 +02:00
$adjacent = $previous ? 'previous' : 'next' ;
2012-09-10 23:36:06 +02:00
2014-04-14 04:13:16 +02:00
/**
* Filter the adjacent post link .
*
2014-11-30 13:10:23 +01:00
* The dynamic portion of the hook name , `$adjacent` , refers to the type
2014-04-14 04:13:16 +02:00
* of adjacency , 'next' or 'previous' .
*
* @ since 2.6 . 0
2014-12-30 07:57:23 +01:00
* @ since 4.2 . 0 Added the `$adjacent` parameter .
2014-04-14 04:13:16 +02:00
*
2014-12-30 07:57:23 +01:00
* @ param string $output The adjacent post link .
* @ param string $format Link anchor format .
* @ param string $link Link permalink format .
* @ param WP_Post $post The adjacent post .
* @ param string $adjacent Whether the post is previous or next .
2014-04-14 04:13:16 +02:00
*/
2014-12-30 07:57:23 +01:00
return apply_filters ( " { $adjacent } _post_link " , $output , $format , $link , $post , $adjacent );
2013-09-11 00:12:10 +02:00
}
/**
* Display adjacent post link .
*
* Can be either next post link or previous .
*
* @ since 2.5 . 0
*
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
* @ param string $format Link anchor format .
* @ param string $link Link permalink format .
2014-05-25 18:12:14 +02:00
* @ param bool $in_same_term Optional . Whether link should be in a same taxonomy term .
Add a $taxonomy argument to each of the adjacent post functions.
Each took an array of category (IDs) when to search. Those can now be term IDs and each function now has $taxonomy = 'category' as an optional argument.
Functions affected: get_previous_post(), get_next_post(), get_adjacent_post(), get_adjacent_post_rel_link(), adjacent_posts_rel_link(), next_post_rel_link(), prev_post_rel_link(), get_boundary_post(), get_previous_post_link(), previous_post_link(), get_next_post_link(), next_post_link(), get_adjacent_post_link(), adjacent_post_link().
props ethitter.
finally fixes #17807.
Built from https://develop.svn.wordpress.org/trunk@25959
git-svn-id: http://core.svn.wordpress.org/trunk@25918 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-10-27 22:40:09 +01:00
* @ param array | string $excluded_terms Optional . Array or comma - separated list of excluded category IDs .
* @ param bool $previous Optional . Whether to display link to previous or next post . Default true .
* @ param string $taxonomy Optional . Taxonomy , if $in_same_term is true . Default 'category' .
2013-09-11 00:12:10 +02:00
*/
2014-05-25 18:10:13 +02:00
function adjacent_post_link ( $format , $link , $in_same_term = false , $excluded_terms = '' , $previous = true , $taxonomy = 'category' ) {
echo get_adjacent_post_link ( $format , $link , $in_same_term , $excluded_terms , $previous , $taxonomy );
2004-08-24 03:35:57 +02:00
}
2008-10-14 00:00:07 +02:00
/**
2011-09-30 00:57:43 +02:00
* Retrieve links for page numbers .
2008-10-14 00:00:07 +02:00
*
* @ since 1.5 . 0
*
2015-05-26 20:44:25 +02:00
* @ global WP_Rewrite $wp_rewrite
*
* @ param int $pagenum Optional . Page ID .
* @ param bool $escape Optional . Whether to escape the URL for display , with esc_url () . Defaults to true .
2015-08-23 09:19:27 +02:00
* Otherwise , prepares the URL with esc_url_raw () .
2014-11-30 05:44:23 +01:00
* @ return string The link URL for the given page number .
2008-10-14 00:00:07 +02:00
*/
2012-05-02 18:29:39 +02:00
function get_pagenum_link ( $pagenum = 1 , $escape = true ) {
2004-12-03 03:38:11 +01:00
global $wp_rewrite ;
2007-06-14 04:25:30 +02:00
2007-05-12 02:17:34 +02:00
$pagenum = ( int ) $pagenum ;
2007-06-14 04:25:30 +02:00
2007-05-12 02:17:34 +02:00
$request = remove_query_arg ( 'paged' );
2007-06-14 04:25:30 +02:00
2010-01-04 18:23:29 +01:00
$home_root = parse_url ( home_url ());
2008-01-10 21:51:07 +01:00
$home_root = ( isset ( $home_root [ 'path' ]) ) ? $home_root [ 'path' ] : '' ;
2012-06-28 22:54:20 +02:00
$home_root = preg_quote ( $home_root , '|' );
2007-06-14 04:25:30 +02:00
2012-10-25 22:09:54 +02:00
$request = preg_replace ( '|^' . $home_root . '|i' , '' , $request );
2007-05-16 04:47:24 +02:00
$request = preg_replace ( '|^/+|' , '' , $request );
2007-06-14 04:25:30 +02:00
2007-05-28 20:34:06 +02:00
if ( ! $wp_rewrite -> using_permalinks () || is_admin () ) {
2009-12-30 18:05:02 +01:00
$base = trailingslashit ( get_bloginfo ( 'url' ) );
2007-05-28 20:34:06 +02:00
2007-05-12 02:17:34 +02:00
if ( $pagenum > 1 ) {
2007-05-16 04:47:24 +02:00
$result = add_query_arg ( 'paged' , $pagenum , $base . $request );
2007-05-12 02:17:34 +02:00
} else {
$result = $base . $request ;
}
2005-03-28 04:34:16 +02:00
} else {
2007-05-12 02:17:34 +02:00
$qs_regex = '|\?.*?$|' ;
preg_match ( $qs_regex , $request , $qs_match );
2007-06-14 04:25:30 +02:00
2008-02-02 19:42:09 +01:00
if ( ! empty ( $qs_match [ 0 ] ) ) {
2007-05-12 02:17:34 +02:00
$query_string = $qs_match [ 0 ];
$request = preg_replace ( $qs_regex , '' , $request );
2005-03-28 04:34:16 +02:00
} else {
2007-05-12 02:17:34 +02:00
$query_string = '' ;
2005-03-28 04:34:16 +02:00
}
2007-06-14 04:25:30 +02:00
2010-09-07 03:18:42 +02:00
$request = preg_replace ( " | $wp_rewrite->pagination_base / \ d+/? $ | " , '' , $request );
2013-01-18 14:44:22 +01:00
$request = preg_replace ( '|^' . preg_quote ( $wp_rewrite -> index , '|' ) . '|i' , '' , $request );
2007-09-20 22:56:22 +02:00
$request = ltrim ( $request , '/' );
2007-06-14 04:25:30 +02:00
2007-05-16 04:47:24 +02:00
$base = trailingslashit ( get_bloginfo ( 'url' ) );
2007-06-14 04:25:30 +02:00
2007-09-22 08:07:03 +02:00
if ( $wp_rewrite -> using_index_permalinks () && ( $pagenum > 1 || '' != $request ) )
2013-01-18 14:44:22 +01:00
$base .= $wp_rewrite -> index . '/' ;
2007-06-14 04:25:30 +02:00
2007-05-16 04:47:24 +02:00
if ( $pagenum > 1 ) {
2010-09-07 03:18:42 +02:00
$request = ( ( ! empty ( $request ) ) ? trailingslashit ( $request ) : $request ) . user_trailingslashit ( $wp_rewrite -> pagination_base . " / " . $pagenum , 'paged' );
2007-05-16 04:47:24 +02:00
}
2007-06-14 04:25:30 +02:00
2007-05-12 02:17:34 +02:00
$result = $base . $request . $query_string ;
2005-03-28 04:34:16 +02:00
}
2007-06-14 04:25:30 +02:00
2014-04-14 04:13:16 +02:00
/**
* Filter the page number link for the current request .
*
* @ since 2.5 . 0
*
* @ param string $result The page number link .
*/
$result = apply_filters ( 'get_pagenum_link' , $result );
2008-02-25 19:40:46 +01:00
2012-05-02 18:29:39 +02:00
if ( $escape )
return esc_url ( $result );
else
return esc_url_raw ( $result );
2004-06-02 09:44:43 +02:00
}
2008-10-14 00:00:07 +02:00
/**
2011-09-30 00:57:43 +02:00
* Retrieve next posts page link .
2008-10-14 00:00:07 +02:00
*
* Backported from 2.1 . 3 to 2.0 . 10.
*
* @ since 2.0 . 10
*
2015-05-26 20:44:25 +02:00
* @ global int $paged
*
2008-10-22 05:08:33 +02:00
* @ param int $max_page Optional . Max pages .
2015-05-26 20:44:25 +02:00
* @ return string | void The link URL for next posts page .
2008-10-14 00:00:07 +02:00
*/
2007-03-16 09:04:24 +01:00
function get_next_posts_page_link ( $max_page = 0 ) {
2007-12-06 20:49:33 +01:00
global $paged ;
2005-10-18 01:41:28 +02:00
if ( ! is_single () ) {
if ( ! $paged )
$paged = 1 ;
$nextpage = intval ( $paged ) + 1 ;
if ( ! $max_page || $max_page >= $nextpage )
2007-03-16 09:04:24 +01:00
return get_pagenum_link ( $nextpage );
2005-10-18 01:41:28 +02:00
}
2004-06-02 09:44:43 +02:00
}
2008-10-14 00:00:07 +02:00
/**
2011-09-30 00:57:43 +02:00
* Display or return the next posts page link .
2008-10-14 00:00:07 +02:00
*
* @ since 0.71
*
2015-06-27 03:03:25 +02:00
* @ param int $max_page Optional . Max pages .
* @ param bool $echo Optional . Echo or return ;
2015-05-26 20:44:25 +02:00
* @ return string | void The link URL for next posts page if `$echo = false` .
2008-10-14 00:00:07 +02:00
*/
2008-11-12 11:13:50 +01:00
function next_posts ( $max_page = 0 , $echo = true ) {
2009-05-18 18:00:33 +02:00
$output = esc_url ( get_next_posts_page_link ( $max_page ) );
2008-11-12 11:13:50 +01:00
if ( $echo )
echo $output ;
else
return $output ;
2007-03-16 09:04:24 +01:00
}
2008-10-14 00:00:07 +02:00
/**
2011-09-30 00:57:43 +02:00
* Return the next posts page link .
2008-10-14 00:00:07 +02:00
*
2008-11-12 11:13:50 +01:00
* @ since 2.7 . 0
2008-10-14 00:00:07 +02:00
*
2015-05-26 20:44:25 +02:00
* @ global int $paged
* @ global WP_Query $wp_query
*
* @ param string $label Content for link text .
* @ param int $max_page Optional . Max pages .
* @ return string | void HTML - formatted next posts page link .
2008-10-14 00:00:07 +02:00
*/
2011-04-27 23:25:09 +02:00
function get_next_posts_link ( $label = null , $max_page = 0 ) {
2007-12-06 20:49:33 +01:00
global $paged , $wp_query ;
2008-11-12 11:13:50 +01:00
2010-04-02 02:07:59 +02:00
if ( ! $max_page )
2006-11-08 22:22:35 +01:00
$max_page = $wp_query -> max_num_pages ;
2008-11-12 11:13:50 +01:00
2005-10-18 01:41:28 +02:00
if ( ! $paged )
$paged = 1 ;
2008-11-12 11:13:50 +01:00
2005-10-18 01:41:28 +02:00
$nextpage = intval ( $paged ) + 1 ;
2011-06-11 01:01:45 +02:00
2011-04-27 23:25:09 +02:00
if ( null === $label )
$label = __ ( 'Next Page »' );
2008-11-12 11:13:50 +01:00
2010-10-15 16:43:31 +02:00
if ( ! is_single () && ( $nextpage <= $max_page ) ) {
2014-04-14 04:13:16 +02:00
/**
* Filter the anchor tag attributes for the next posts page link .
*
* @ since 2.7 . 0
*
* @ param string $attributes Attributes for the anchor tag .
*/
2008-07-30 09:01:03 +02:00
$attr = apply_filters ( 'next_posts_link_attributes' , '' );
2014-04-14 04:13:16 +02:00
2010-04-02 02:07:59 +02:00
return '<a href="' . next_posts ( $max_page , false ) . " \" $attr > " . preg_replace ( '/&([^#])(?![a-z]{1,8};)/i' , '&$1' , $label ) . '</a>' ;
2005-10-18 01:41:28 +02:00
}
2004-06-02 09:44:43 +02:00
}
2008-11-12 11:13:50 +01:00
/**
2011-09-30 00:57:43 +02:00
* Display the next posts page link .
2008-11-12 11:13:50 +01:00
*
* @ since 0.71
*
2015-05-26 20:44:25 +02:00
* @ param string $label Content for link text .
* @ param int $max_page Optional . Max pages .
2008-11-12 11:13:50 +01:00
*/
2011-04-27 23:25:09 +02:00
function next_posts_link ( $label = null , $max_page = 0 ) {
2008-11-12 11:13:50 +01:00
echo get_next_posts_link ( $label , $max_page );
}
2008-10-14 00:00:07 +02:00
/**
2011-09-30 00:57:43 +02:00
* Retrieve previous posts page link .
2008-10-22 05:08:33 +02:00
*
* Will only return string , if not on a single page or post .
2008-10-14 00:00:07 +02:00
*
2008-10-22 05:08:33 +02:00
* Backported to 2.0 . 10 from 2.1 . 3.
2008-10-14 00:00:07 +02:00
*
2008-10-22 05:08:33 +02:00
* @ since 2.0 . 10
2008-10-14 00:00:07 +02:00
*
2015-05-26 20:44:25 +02:00
* @ global int $paged
*
* @ return string | void The link for the previous posts page .
2008-10-14 00:00:07 +02:00
*/
2007-03-16 09:04:24 +01:00
function get_previous_posts_page_link () {
2007-12-06 20:49:33 +01:00
global $paged ;
2004-06-02 09:44:43 +02:00
2005-10-18 01:41:28 +02:00
if ( ! is_single () ) {
$nextpage = intval ( $paged ) - 1 ;
if ( $nextpage < 1 )
$nextpage = 1 ;
2007-03-16 09:04:24 +01:00
return get_pagenum_link ( $nextpage );
2005-10-18 01:41:28 +02:00
}
2004-06-02 09:44:43 +02:00
}
2008-10-14 00:00:07 +02:00
/**
2011-09-30 00:57:43 +02:00
* Display or return the previous posts page link .
2008-10-14 00:00:07 +02:00
*
* @ since 0.71
2008-11-12 11:13:50 +01:00
*
2015-06-27 03:03:25 +02:00
* @ param bool $echo Optional . Echo or return ;
2015-05-26 20:44:25 +02:00
* @ return string | void The previous posts page link if `$echo = false` .
2008-10-14 00:00:07 +02:00
*/
2008-11-12 11:13:50 +01:00
function previous_posts ( $echo = true ) {
2009-05-18 18:00:33 +02:00
$output = esc_url ( get_previous_posts_page_link () );
2008-11-12 11:13:50 +01:00
if ( $echo )
echo $output ;
else
return $output ;
2007-03-16 09:04:24 +01:00
}
2005-10-18 01:41:28 +02:00
2008-10-14 00:00:07 +02:00
/**
2011-09-30 00:57:43 +02:00
* Return the previous posts page link .
2008-10-14 00:00:07 +02:00
*
2008-11-12 11:13:50 +01:00
* @ since 2.7 . 0
2008-10-14 00:00:07 +02:00
*
2015-05-26 20:44:25 +02:00
* @ global int $paged
*
2008-10-22 05:08:33 +02:00
* @ param string $label Optional . Previous page link text .
2015-05-26 20:44:25 +02:00
* @ return string | void HTML - formatted previous page link .
2008-10-14 00:00:07 +02:00
*/
2011-04-27 23:25:09 +02:00
function get_previous_posts_link ( $label = null ) {
2005-10-18 01:41:28 +02:00
global $paged ;
2008-11-12 11:13:50 +01:00
2011-04-27 23:25:09 +02:00
if ( null === $label )
$label = __ ( '« Previous Page' );
2008-11-12 11:13:50 +01:00
if ( ! is_single () && $paged > 1 ) {
2014-04-14 04:13:16 +02:00
/**
* Filter the anchor tag attributes for the previous posts page link .
*
* @ since 2.7 . 0
*
* @ param string $attributes Attributes for the anchor tag .
*/
2008-07-30 09:01:03 +02:00
$attr = apply_filters ( 'previous_posts_link_attributes' , '' );
2012-04-19 17:08:06 +02:00
return '<a href="' . previous_posts ( false ) . " \" $attr > " . preg_replace ( '/&([^#])(?![a-z]{1,8};)/i' , '&$1' , $label ) . '</a>' ;
2005-10-18 01:41:28 +02:00
}
2004-06-02 09:44:43 +02:00
}
2008-11-12 11:13:50 +01:00
/**
* Display the previous posts page link .
*
* @ since 0.71
*
* @ param string $label Optional . Previous page link text .
*/
2011-04-27 23:25:09 +02:00
function previous_posts_link ( $label = null ) {
2008-11-12 11:13:50 +01:00
echo get_previous_posts_link ( $label );
}
2008-10-14 00:00:07 +02:00
/**
2009-04-22 10:44:37 +02:00
* Return post pages link navigation for previous and next pages .
2008-10-14 00:00:07 +02:00
*
2013-12-24 19:57:12 +01:00
* @ since 2.8 . 0
2008-10-14 00:00:07 +02:00
*
2015-05-26 20:44:25 +02:00
* @ global WP_Query $wp_query
*
2009-04-22 10:44:37 +02:00
* @ param string | array $args Optional args .
2009-05-25 01:47:49 +02:00
* @ return string The posts link navigation .
2008-10-14 00:00:07 +02:00
*/
2009-04-22 10:44:37 +02:00
function get_posts_nav_link ( $args = array () ) {
2006-11-08 22:22:35 +01:00
global $wp_query ;
2009-05-25 01:47:49 +02:00
2009-04-22 10:44:37 +02:00
$return = '' ;
2006-11-08 22:22:35 +01:00
if ( ! is_singular () ) {
2009-04-22 10:44:37 +02:00
$defaults = array (
2009-05-25 01:47:49 +02:00
'sep' => ' — ' ,
'prelabel' => __ ( '« Previous Page' ),
2009-04-22 10:44:37 +02:00
'nxtlabel' => __ ( 'Next Page »' ),
);
$args = wp_parse_args ( $args , $defaults );
2006-11-08 22:22:35 +01:00
$max_num_pages = $wp_query -> max_num_pages ;
2006-03-20 20:43:57 +01:00
$paged = get_query_var ( 'paged' );
2006-11-19 08:56:05 +01:00
2006-03-20 20:43:57 +01:00
//only have sep if there's both prev and next results
if ( $paged < 2 || $paged >= $max_num_pages ) {
2009-04-22 10:44:37 +02:00
$args [ 'sep' ] = '' ;
2004-10-12 15:04:35 +02:00
}
2004-08-17 00:50:06 +02:00
2005-10-18 01:41:28 +02:00
if ( $max_num_pages > 1 ) {
2009-04-22 10:44:37 +02:00
$return = get_previous_posts_link ( $args [ 'prelabel' ]);
2010-04-02 02:07:59 +02:00
$return .= preg_replace ( '/&([^#])(?![a-z]{1,8};)/i' , '&$1' , $args [ 'sep' ]);
2009-04-22 10:44:37 +02:00
$return .= get_next_posts_link ( $args [ 'nxtlabel' ]);
2005-10-18 01:41:28 +02:00
}
}
2009-04-22 10:44:37 +02:00
return $return ;
}
/**
* Display post pages link navigation for previous and next pages .
*
* @ since 0.71
*
2015-05-26 20:44:25 +02:00
* @ param string $sep Optional . Separator for posts navigation links .
2009-04-22 10:44:37 +02:00
* @ param string $prelabel Optional . Label for previous pages .
* @ param string $nxtlabel Optional Label for next pages .
*/
function posts_nav_link ( $sep = '' , $prelabel = '' , $nxtlabel = '' ) {
$args = array_filter ( compact ( 'sep' , 'prelabel' , 'nxtlabel' ) );
echo get_posts_nav_link ( $args );
2004-06-02 09:44:43 +02:00
}
2014-10-28 20:39:24 +01:00
/**
* Return navigation to next / previous post when applicable .
*
* @ since 4.1 . 0
*
* @ param array $args {
2014-11-28 12:57:24 +01:00
* Optional . Default post navigation arguments . Default empty array .
2014-10-28 20:39:24 +01:00
*
2014-11-28 12:57:24 +01:00
* @ type string $prev_text Anchor text to display in the previous post link . Default `%title` .
* @ type string $next_text Anchor text to display in the next post link . Default `%title` .
* @ type string $screen_reader_text Screen reader text for nav element . Default 'Post navigation' .
2014-10-28 20:39:24 +01:00
* }
* @ return string Markup for post links .
*/
function get_the_post_navigation ( $args = array () ) {
$args = wp_parse_args ( $args , array (
2014-11-20 16:19:24 +01:00
'prev_text' => '%title' ,
'next_text' => '%title' ,
'screen_reader_text' => __ ( 'Post navigation' ),
2014-10-28 20:39:24 +01:00
) );
$navigation = '' ;
$previous = get_previous_post_link ( '<div class="nav-previous">%link</div>' , $args [ 'prev_text' ] );
$next = get_next_post_link ( '<div class="nav-next">%link</div>' , $args [ 'next_text' ] );
// Only add markup if there's somewhere to navigate to.
2014-11-20 16:19:24 +01:00
if ( $previous || $next ) {
$navigation = _navigation_markup ( $previous . $next , 'post-navigation' , $args [ 'screen_reader_text' ] );
2014-10-28 20:39:24 +01:00
}
return $navigation ;
}
/**
* Display navigation to next / previous post when applicable .
*
* @ since 4.1 . 0
*
2014-11-28 12:57:24 +01:00
* @ param array $args Optional . See { @ see get_the_post_navigation ()} for available
* arguments . Default empty array .
2014-10-28 20:39:24 +01:00
*/
function the_post_navigation ( $args = array () ) {
echo get_the_post_navigation ( $args );
}
/**
* Return navigation to next / previous set of posts when applicable .
*
* @ since 4.1 . 0
*
* @ global WP_Query $wp_query WordPress Query object .
*
* @ param array $args {
2014-12-11 11:23:24 +01:00
* Optional . Default posts navigation arguments . Default empty array .
2014-11-28 12:57:24 +01:00
*
* @ type string $prev_text Anchor text to display in the previous posts link .
* Default 'Older posts' .
* @ type string $next_text Anchor text to display in the next posts link .
* Default 'Newer posts' .
* @ type string $screen_reader_text Screen reader text for nav element .
* Default 'Posts navigation' .
2014-10-28 20:39:24 +01:00
* }
2014-12-11 11:23:24 +01:00
* @ return string Markup for posts links .
2014-10-28 20:39:24 +01:00
*/
function get_the_posts_navigation ( $args = array () ) {
$navigation = '' ;
// Don't print empty markup if there's only one page.
if ( $GLOBALS [ 'wp_query' ] -> max_num_pages > 1 ) {
$args = wp_parse_args ( $args , array (
2014-11-20 16:19:24 +01:00
'prev_text' => __ ( 'Older posts' ),
'next_text' => __ ( 'Newer posts' ),
'screen_reader_text' => __ ( 'Posts navigation' ),
2014-10-28 20:39:24 +01:00
) );
2014-11-20 16:19:24 +01:00
$next_link = get_previous_posts_link ( $args [ 'next_text' ] );
$prev_link = get_next_posts_link ( $args [ 'prev_text' ] );
2014-10-28 20:39:24 +01:00
2014-11-20 16:19:24 +01:00
if ( $prev_link ) {
$navigation .= '<div class="nav-previous">' . $prev_link . '</div>' ;
2014-10-28 20:39:24 +01:00
}
2014-11-20 16:19:24 +01:00
if ( $next_link ) {
$navigation .= '<div class="nav-next">' . $next_link . '</div>' ;
2014-10-28 20:39:24 +01:00
}
2014-12-11 11:23:24 +01:00
$navigation = _navigation_markup ( $navigation , 'posts-navigation' , $args [ 'screen_reader_text' ] );
2014-10-28 20:39:24 +01:00
}
return $navigation ;
}
/**
* Display navigation to next / previous set of posts when applicable .
*
* @ since 4.1 . 0
*
2014-11-28 12:57:24 +01:00
* @ param array $args Optional . See { @ see get_the_posts_navigation ()} for available
* arguments . Default empty array .
2014-10-28 20:39:24 +01:00
*/
function the_posts_navigation ( $args = array () ) {
echo get_the_posts_navigation ( $args );
}
/**
* Return a paginated navigation to next / previous set of posts ,
* when applicable .
*
* @ since 4.1 . 0
*
* @ param array $args {
2014-11-28 12:57:24 +01:00
* Optional . Default pagination arguments , { @ see paginate_links ()} .
2014-11-20 16:19:24 +01:00
*
2014-11-28 12:57:24 +01:00
* @ type string $screen_reader_text Screen reader text for navigation element .
* Default 'Posts navigation' .
2014-10-28 20:39:24 +01:00
* }
* @ return string Markup for pagination links .
*/
2014-12-11 11:23:24 +01:00
function get_the_posts_pagination ( $args = array () ) {
2014-10-28 20:39:24 +01:00
$navigation = '' ;
// Don't print empty markup if there's only one page.
if ( $GLOBALS [ 'wp_query' ] -> max_num_pages > 1 ) {
$args = wp_parse_args ( $args , array (
2014-11-20 16:19:24 +01:00
'mid_size' => 1 ,
2015-01-08 00:07:22 +01:00
'prev_text' => _x ( 'Previous' , 'previous post' ),
'next_text' => _x ( 'Next' , 'next post' ),
2014-11-20 16:19:24 +01:00
'screen_reader_text' => __ ( 'Posts navigation' ),
2014-10-28 20:39:24 +01:00
) );
2014-12-11 10:39:23 +01:00
// Make sure we get a string back. Plain is the next best thing.
if ( isset ( $args [ 'type' ] ) && 'array' == $args [ 'type' ] ) {
$args [ 'type' ] = 'plain' ;
}
2014-10-28 20:39:24 +01:00
// Set up paginated links.
$links = paginate_links ( $args );
2014-11-20 16:19:24 +01:00
if ( $links ) {
$navigation = _navigation_markup ( $links , 'pagination' , $args [ 'screen_reader_text' ] );
2014-10-28 20:39:24 +01:00
}
}
return $navigation ;
}
/**
* Display a paginated navigation to next / previous set of posts ,
* when applicable .
*
* @ since 4.1 . 0
*
2014-12-11 11:23:24 +01:00
* @ param array $args Optional . See { @ see get_the_posts_pagination ()} for available arguments .
2014-11-28 12:57:24 +01:00
* Default empty array .
2014-10-28 20:39:24 +01:00
*/
2014-12-11 11:23:24 +01:00
function the_posts_pagination ( $args = array () ) {
echo get_the_posts_pagination ( $args );
2014-10-28 20:39:24 +01:00
}
/**
* Wraps passed links in navigational markup .
*
* @ since 4.1 . 0
* @ access private
*
* @ param string $links Navigational links .
2014-12-11 11:23:24 +01:00
* @ param string $class Optional . Custom class for nav element . Default : 'posts-navigation' .
2014-10-28 20:39:24 +01:00
* @ param string $screen_reader_text Optional . Screen reader text for nav element . Default : 'Posts navigation' .
* @ return string Navigation template tag .
*/
2014-12-11 11:23:24 +01:00
function _navigation_markup ( $links , $class = 'posts-navigation' , $screen_reader_text = '' ) {
2014-10-28 20:39:24 +01:00
if ( empty ( $screen_reader_text ) ) {
$screen_reader_text = __ ( 'Posts navigation' );
}
$template = '
< nav class = " navigation %1 $s " role = " navigation " >
2014-11-20 16:19:24 +01:00
< h2 class = " screen-reader-text " >% 2 $s </ h2 >
2014-10-28 20:39:24 +01:00
< div class = " nav-links " >% 3 $s </ div >
</ nav > ' ;
2015-08-23 18:34:26 +02:00
/**
* Filter the navigation markup template .
*
2015-08-23 20:08:25 +02:00
* Note : The filtered template HTML must contain specifiers for the navigation
* class ( % 1 $ s ), the screen - reader - text value ( % 2 $s ), and placement of the
* navigation links ( % 3 $s ) :
*
* < nav class = " navigation %1 $s " role = " navigation " >
* < h2 class = " screen-reader-text " >% 2 $s </ h2 >
* < div class = " nav-links " >% 3 $s </ div >
* </ nav >
*
2015-08-23 18:34:26 +02:00
* @ since 4.4 . 0
*
2015-08-23 20:08:25 +02:00
* @ param string $template The default template .
* @ param string $class The class passed by the calling function .
2015-08-23 18:34:26 +02:00
* @ return string Navigation template .
*/
$template = apply_filters ( 'navigation_markup_template' , $template , $class );
2014-10-28 20:39:24 +01:00
return sprintf ( $template , sanitize_html_class ( $class ), esc_html ( $screen_reader_text ), $links );
}
2008-10-22 05:08:33 +02:00
/**
2011-09-30 00:57:43 +02:00
* Retrieve comments page number link .
2008-10-22 05:08:33 +02:00
*
* @ since 2.7 . 0
*
2015-05-26 20:44:25 +02:00
* @ global WP_Rewrite $wp_rewrite
*
* @ param int $pagenum Optional . Page number .
2014-11-30 05:44:23 +01:00
* @ param int $max_page Optional . The maximum number of comment pages .
* @ return string The comments page number link URL .
2008-10-22 05:08:33 +02:00
*/
2008-10-23 18:08:47 +02:00
function get_comments_pagenum_link ( $pagenum = 1 , $max_page = 0 ) {
2012-09-04 18:29:28 +02:00
global $wp_rewrite ;
2008-09-23 23:11:27 +02:00
$pagenum = ( int ) $pagenum ;
2012-09-04 18:29:28 +02:00
$result = get_permalink ();
2008-09-23 23:11:27 +02:00
2008-10-23 18:08:47 +02:00
if ( 'newest' == get_option ( 'default_comments_page' ) ) {
2008-10-24 09:36:43 +02:00
if ( $pagenum != $max_page ) {
if ( $wp_rewrite -> using_permalinks () )
2015-02-14 04:48:27 +01:00
$result = user_trailingslashit ( trailingslashit ( $result ) . $wp_rewrite -> comments_pagination_base . '-' . $pagenum , 'commentpaged' );
2008-10-24 09:36:43 +02:00
else
2008-11-21 18:33:05 +01:00
$result = add_query_arg ( 'cpage' , $pagenum , $result );
2008-10-24 09:36:43 +02:00
}
} elseif ( $pagenum > 1 ) {
if ( $wp_rewrite -> using_permalinks () )
2015-02-14 04:48:27 +01:00
$result = user_trailingslashit ( trailingslashit ( $result ) . $wp_rewrite -> comments_pagination_base . '-' . $pagenum , 'commentpaged' );
2008-10-24 09:36:43 +02:00
else
2008-11-21 18:33:05 +01:00
$result = add_query_arg ( 'cpage' , $pagenum , $result );
2008-10-24 09:36:43 +02:00
}
2008-09-23 23:11:27 +02:00
2008-10-08 00:41:51 +02:00
$result .= '#comments' ;
2014-04-14 04:13:16 +02:00
/**
* Filter the comments page number link for the current request .
*
* @ since 2.7 . 0
*
* @ param string $result The comments page number link .
*/
2015-05-26 20:44:25 +02:00
return apply_filters ( 'get_comments_pagenum_link' , $result );
2008-09-23 23:11:27 +02:00
}
2008-10-22 05:08:33 +02:00
/**
2011-09-30 00:57:43 +02:00
* Return the link to next comments page .
2008-10-22 05:08:33 +02:00
*
2008-12-22 20:33:09 +01:00
* @ since 2.7 . 1
2008-10-22 05:08:33 +02:00
*
2015-05-26 20:44:25 +02:00
* @ global WP_Query $wp_query
*
* @ param string $label Optional . Label for link text .
* @ param int $max_page Optional . Max page .
* @ return string | void HTML - formatted link for the next page of comments .
2008-10-22 05:08:33 +02:00
*/
2008-12-22 20:33:09 +01:00
function get_next_comments_link ( $label = '' , $max_page = 0 ) {
2008-09-23 23:11:27 +02:00
global $wp_query ;
2009-01-15 00:06:46 +01:00
if ( ! is_singular () || ! get_option ( 'page_comments' ) )
2008-09-23 23:11:27 +02:00
return ;
$page = get_query_var ( 'cpage' );
2008-10-24 09:36:43 +02:00
2015-03-05 04:57:24 +01:00
if ( ! $page ) {
$page = 1 ;
}
2008-09-23 23:11:27 +02:00
$nextpage = intval ( $page ) + 1 ;
if ( empty ( $max_page ) )
$max_page = $wp_query -> max_num_comment_pages ;
2008-12-07 05:49:22 +01:00
if ( empty ( $max_page ) )
$max_page = get_comment_pages_count ();
2008-09-23 23:11:27 +02:00
if ( $nextpage > $max_page )
return ;
if ( empty ( $label ) )
2008-11-18 23:46:56 +01:00
$label = __ ( 'Newer Comments »' );
2008-09-23 23:11:27 +02:00
2014-04-14 04:13:16 +02:00
/**
* Filter the anchor tag attributes for the next comments page link .
*
* @ since 2.7 . 0
*
* @ param string $attributes Attributes for the anchor tag .
*/
2010-04-02 02:07:59 +02:00
return '<a href="' . esc_url ( get_comments_pagenum_link ( $nextpage , $max_page ) ) . '" ' . apply_filters ( 'next_comments_link_attributes' , '' ) . '>' . preg_replace ( '/&([^#])(?![a-z]{1,8};)/i' , '&$1' , $label ) . '</a>' ;
2008-09-23 23:11:27 +02:00
}
2008-10-22 05:08:33 +02:00
/**
2011-09-30 00:57:43 +02:00
* Display the link to next comments page .
2008-10-22 05:08:33 +02:00
*
* @ since 2.7 . 0
*
2015-05-26 20:44:25 +02:00
* @ param string $label Optional . Label for link text .
* @ param int $max_page Optional . Max page .
2008-10-22 05:08:33 +02:00
*/
2008-12-22 20:33:09 +01:00
function next_comments_link ( $label = '' , $max_page = 0 ) {
echo get_next_comments_link ( $label , $max_page );
}
2008-09-23 23:11:27 +02:00
2008-12-22 20:33:09 +01:00
/**
* Return the previous comments page link .
*
* @ since 2.7 . 1
*
* @ param string $label Optional . Label for comments link text .
2015-05-26 20:44:25 +02:00
* @ return string | void HTML - formatted link for the previous page of comments .
2008-12-22 20:33:09 +01:00
*/
function get_previous_comments_link ( $label = '' ) {
2009-01-15 00:06:46 +01:00
if ( ! is_singular () || ! get_option ( 'page_comments' ) )
2008-09-23 23:11:27 +02:00
return ;
$page = get_query_var ( 'cpage' );
2008-12-30 23:32:43 +01:00
if ( intval ( $page ) <= 1 )
2008-09-23 23:11:27 +02:00
return ;
2008-10-24 09:36:43 +02:00
$prevpage = intval ( $page ) - 1 ;
2008-09-23 23:11:27 +02:00
if ( empty ( $label ) )
$label = __ ( '« Older Comments' );
2014-04-14 04:13:16 +02:00
/**
* Filter the anchor tag attributes for the previous comments page link .
*
* @ since 2.7 . 0
*
* @ param string $attributes Attributes for the anchor tag .
*/
2010-04-02 02:07:59 +02:00
return '<a href="' . esc_url ( get_comments_pagenum_link ( $prevpage ) ) . '" ' . apply_filters ( 'previous_comments_link_attributes' , '' ) . '>' . preg_replace ( '/&([^#])(?![a-z]{1,8};)/i' , '&$1' , $label ) . '</a>' ;
2008-12-22 20:33:09 +01:00
}
/**
* Display the previous comments page link .
*
* @ since 2.7 . 0
*
* @ param string $label Optional . Label for comments link text .
*/
function previous_comments_link ( $label = '' ) {
echo get_previous_comments_link ( $label );
2008-09-23 23:11:27 +02:00
}
2008-10-22 05:08:33 +02:00
/**
* Create pagination links for the comments on the current post .
2008-10-08 00:41:51 +02:00
*
2008-10-22 05:08:33 +02:00
* @ see paginate_links ()
* @ since 2.7 . 0
2008-10-08 00:41:51 +02:00
*
2015-05-26 20:44:25 +02:00
* @ global WP_Rewrite $wp_rewrite
*
2011-09-30 00:57:43 +02:00
* @ param string | array $args Optional args . See paginate_links () .
2015-05-26 20:44:25 +02:00
* @ return string | void Markup for pagination links .
2008-10-08 00:41:51 +02:00
*/
function paginate_comments_links ( $args = array ()) {
2010-02-20 03:01:46 +01:00
global $wp_rewrite ;
2008-10-08 00:41:51 +02:00
2009-01-15 00:06:46 +01:00
if ( ! is_singular () || ! get_option ( 'page_comments' ) )
2008-10-08 00:41:51 +02:00
return ;
$page = get_query_var ( 'cpage' );
if ( ! $page )
$page = 1 ;
2008-12-07 05:49:22 +01:00
$max_page = get_comment_pages_count ();
2008-10-08 00:41:51 +02:00
$defaults = array (
'base' => add_query_arg ( 'cpage' , '%#%' ),
'format' => '' ,
'total' => $max_page ,
'current' => $page ,
'echo' => true ,
'add_fragment' => '#comments'
);
2008-10-23 20:55:22 +02:00
if ( $wp_rewrite -> using_permalinks () )
2015-02-14 04:48:27 +01:00
$defaults [ 'base' ] = user_trailingslashit ( trailingslashit ( get_permalink ()) . $wp_rewrite -> comments_pagination_base . '-%#%' , 'commentpaged' );
2008-10-23 20:55:22 +02:00
2008-10-08 00:41:51 +02:00
$args = wp_parse_args ( $args , $defaults );
$page_links = paginate_links ( $args );
if ( $args [ 'echo' ] )
echo $page_links ;
else
return $page_links ;
}
2008-10-14 00:00:07 +02:00
/**
2012-02-18 19:46:15 +01:00
* Retrieve the Press This bookmarklet link .
2008-10-14 00:00:07 +02:00
*
2008-10-22 05:08:33 +02:00
* Use this in 'a' element 'href' attribute .
2008-10-14 00:00:07 +02:00
*
2008-10-22 05:08:33 +02:00
* @ since 2.6 . 0
2008-10-14 00:00:07 +02:00
*
2015-05-26 20:44:25 +02:00
* @ global bool $is_IE
* @ global string $wp_version
* @ global WP_Press_This $wp_press_this
*
2014-11-30 05:44:23 +01:00
* @ return string The Press This bookmarklet link URL .
2008-10-14 00:00:07 +02:00
*/
2008-05-12 21:08:39 +02:00
function get_shortcut_link () {
PressThis v2, first run. Props michael-arestad, stephdau, marcelomazza, DrewAPicture, iseulde, afercia, kraftbj, rachelbaker, AramZS, dd32. See #31373.
Built from https://develop.svn.wordpress.org/trunk@31534
git-svn-id: http://core.svn.wordpress.org/trunk@31515 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-02-25 02:50:26 +01:00
global $is_IE , $wp_version ;
2015-04-10 23:08:29 +02:00
include_once ( ABSPATH . 'wp-admin/includes/class-wp-press-this.php' );
$bookmarklet_version = $GLOBALS [ 'wp_press_this' ] -> version ;
PressThis v2, first run. Props michael-arestad, stephdau, marcelomazza, DrewAPicture, iseulde, afercia, kraftbj, rachelbaker, AramZS, dd32. See #31373.
Built from https://develop.svn.wordpress.org/trunk@31534
git-svn-id: http://core.svn.wordpress.org/trunk@31515 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-02-25 02:50:26 +01:00
$link = '' ;
if ( $is_IE ) {
/**
* Return the old / shorter bookmarklet code for MSIE 8 and lower ,
* since they only support a max length of ~ 2000 characters for
* bookmark [ let ] URLs , which is way to small for our smarter one .
* Do update the version number so users do not get the " upgrade your
* bookmarklet " notice when using PT in those browsers.
*/
$ua = $_SERVER [ 'HTTP_USER_AGENT' ];
2015-02-25 04:58:25 +01:00
PressThis v2, first run. Props michael-arestad, stephdau, marcelomazza, DrewAPicture, iseulde, afercia, kraftbj, rachelbaker, AramZS, dd32. See #31373.
Built from https://develop.svn.wordpress.org/trunk@31534
git-svn-id: http://core.svn.wordpress.org/trunk@31515 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-02-25 02:50:26 +01:00
if ( ! empty ( $ua ) && preg_match ( '/\bMSIE (\d)/' , $ua , $matches ) && ( int ) $matches [ 1 ] <= 8 ) {
2015-02-25 04:58:25 +01:00
$url = wp_json_encode ( admin_url ( 'press-this.php' ) );
$link = 'javascript:var d=document,w=window,e=w.getSelection,k=d.getSelection,x=d.selection,' .
's=(e?e():(k)?k():(x?x.createRange().text:0)),f=' . $url . ',l=d.location,e=encodeURIComponent,' .
'u=f+"?u="+e(l.href)+"&t="+e(d.title)+"&s="+e(s)+"&v=' . $bookmarklet_version . '";' .
'a=function(){if(!w.open(u,"t","toolbar=0,resizable=1,scrollbars=1,status=1,width=600,height=700"))l.href=u;};' .
'if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else a();void(0)' ;
PressThis v2, first run. Props michael-arestad, stephdau, marcelomazza, DrewAPicture, iseulde, afercia, kraftbj, rachelbaker, AramZS, dd32. See #31373.
Built from https://develop.svn.wordpress.org/trunk@31534
git-svn-id: http://core.svn.wordpress.org/trunk@31515 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-02-25 02:50:26 +01:00
}
}
if ( empty ( $link ) ) {
2015-02-25 21:16:24 +01:00
$src = @ file_get_contents ( ABSPATH . 'wp-admin/js/bookmarklet.min.js' );
2015-02-25 04:58:25 +01:00
2015-02-25 21:16:24 +01:00
if ( $src ) {
$url = wp_json_encode ( admin_url ( 'press-this.php' ) . '?v=' . $bookmarklet_version );
$link = 'javascript:' . str_replace ( 'window.pt_url' , $url , $src );
}
PressThis v2, first run. Props michael-arestad, stephdau, marcelomazza, DrewAPicture, iseulde, afercia, kraftbj, rachelbaker, AramZS, dd32. See #31373.
Built from https://develop.svn.wordpress.org/trunk@31534
git-svn-id: http://core.svn.wordpress.org/trunk@31515 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-02-25 02:50:26 +01:00
}
$link = str_replace ( array ( " \r " , " \n " , " \t " ), '' , $link );
2008-05-12 21:08:39 +02:00
2014-04-14 04:13:16 +02:00
/**
* Filter the Press This bookmarklet link .
*
* @ since 2.6 . 0
*
* @ param string $link The Press This bookmarklet link .
*/
return apply_filters ( 'shortcut_link' , $link );
2008-05-12 21:08:39 +02:00
}
2008-05-27 19:46:01 +02:00
2010-01-04 18:23:29 +01:00
/**
2010-02-05 22:49:19 +01:00
* Retrieve the home url for the current site .
2010-01-04 18:23:29 +01:00
*
2011-09-30 00:57:43 +02:00
* Returns the 'home' option with the appropriate protocol , 'https' if
2014-12-06 22:24:45 +01:00
* { @ see is_ssl ()} and 'http' otherwise . If `$scheme` is 'http' or 'https' ,
* `is_ssl()` is overridden .
2010-01-04 18:23:29 +01:00
*
2010-02-05 22:49:19 +01:00
* @ since 3.0 . 0
*
2014-12-06 22:24:45 +01:00
* @ param string $path Optional . Path relative to the home url . Default empty .
* @ param string $scheme Optional . Scheme to give the home url context . Accepts
* 'http' , 'https' , or 'relative' . Default null .
2010-01-04 18:23:29 +01:00
* @ return string Home url link with optional path appended .
*/
2010-05-03 20:16:22 +02:00
function home_url ( $path = '' , $scheme = null ) {
2012-09-04 16:44:17 +02:00
return get_home_url ( null , $path , $scheme );
2010-02-05 22:49:19 +01:00
}
/**
* Retrieve the home url for a given site .
*
2011-09-30 00:57:43 +02:00
* Returns the 'home' option with the appropriate protocol , 'https' if
2014-12-06 22:24:45 +01:00
* { @ see is_ssl ()} and 'http' otherwise . If `$scheme` is 'http' or 'https' ,
* `is_ssl()` is
2010-02-05 22:49:19 +01:00
* overridden .
*
* @ since 3.0 . 0
*
2015-05-26 20:44:25 +02:00
* @ global string $pagenow
*
2014-12-06 22:24:45 +01:00
* @ param int $blog_id Optional . Blog ID . Default null ( current blog ) .
* @ param string $path Optional . Path relative to the home URL . Default empty .
* @ param string | null $orig_scheme Optional . Scheme to give the home URL context . Accepts
* 'http' , 'https' , 'relative' , or null . Default null .
* @ return string Home URL link with optional path appended .
2010-02-05 22:49:19 +01:00
*/
2010-05-03 20:16:22 +02:00
function get_home_url ( $blog_id = null , $path = '' , $scheme = null ) {
2015-08-25 23:03:20 +02:00
global $pagenow ;
2010-01-04 18:23:29 +01:00
$orig_scheme = $scheme ;
2010-03-29 22:25:30 +02:00
2012-08-03 19:51:42 +02:00
if ( empty ( $blog_id ) || ! is_multisite () ) {
2010-10-23 19:51:18 +02:00
$url = get_option ( 'home' );
2012-08-03 19:51:42 +02:00
} else {
switch_to_blog ( $blog_id );
$url = get_option ( 'home' );
restore_current_blog ();
}
2010-02-05 22:49:19 +01:00
2012-09-21 14:36:50 +02:00
if ( ! in_array ( $scheme , array ( 'http' , 'https' , 'relative' ) ) ) {
2015-08-25 23:03:20 +02:00
if ( is_ssl () && ! is_admin () && 'wp-login.php' !== $pagenow )
2012-09-21 14:36:50 +02:00
$scheme = 'https' ;
else
$scheme = parse_url ( $url , PHP_URL_SCHEME );
}
2012-09-04 16:44:17 +02:00
$url = set_url_scheme ( $url , $scheme );
2010-01-04 18:23:29 +01:00
2013-02-28 22:04:26 +01:00
if ( $path && is_string ( $path ) )
2010-01-04 18:23:29 +01:00
$url .= '/' . ltrim ( $path , '/' );
2014-04-14 04:13:16 +02:00
/**
* Filter the home URL .
*
* @ since 3.0 . 0
*
* @ param string $url The complete home URL including scheme and path .
* @ param string $path Path relative to the home URL . Blank string if no path is specified .
* @ param string | null $orig_scheme Scheme to give the home URL context . Accepts 'http' , 'https' , 'relative' or null .
* @ param int | null $blog_id Blog ID , or null for the current blog .
*/
2010-05-03 20:16:22 +02:00
return apply_filters ( 'home_url' , $url , $path , $orig_scheme , $blog_id );
2010-01-04 18:23:29 +01:00
}
2008-10-14 00:00:07 +02:00
/**
2010-02-05 22:49:19 +01:00
* Retrieve the site url for the current site .
2008-07-15 01:39:11 +02:00
*
2011-09-30 00:57:43 +02:00
* Returns the 'site_url' option with the appropriate protocol , 'https' if
2008-10-14 00:00:07 +02:00
* is_ssl () and 'http' otherwise . If $scheme is 'http' or 'https' , is_ssl () is
* overridden .
2008-07-15 01:39:11 +02:00
*
2014-04-14 04:13:16 +02:00
* @ since 3.0 . 0
2008-07-15 01:39:11 +02:00
*
2015-05-26 20:44:25 +02:00
* @ param string $path Optional . Path relative to the site url .
2012-09-04 16:44:17 +02:00
* @ param string $scheme Optional . Scheme to give the site url context . See set_url_scheme () .
2010-02-05 22:49:19 +01:00
* @ return string Site url link with optional path appended .
*/
2010-05-03 20:16:22 +02:00
function site_url ( $path = '' , $scheme = null ) {
2012-09-04 16:44:17 +02:00
return get_site_url ( null , $path , $scheme );
2010-02-05 22:49:19 +01:00
}
/**
* Retrieve the site url for a given site .
*
2011-09-30 00:57:43 +02:00
* Returns the 'site_url' option with the appropriate protocol , 'https' if
2014-12-06 22:24:45 +01:00
* { @ see is_ssl ()} and 'http' otherwise . If `$scheme` is 'http' or 'https' ,
* `is_ssl()` is overridden .
2010-02-05 22:49:19 +01:00
*
* @ since 3.0 . 0
*
2014-12-06 22:24:45 +01:00
* @ param int $blog_id Optional . Blog ID . Default null ( current site ) .
* @ param string $path Optional . Path relative to the site url . Default empty .
* @ param string $scheme Optional . Scheme to give the site url context . Accepts
* 'http' , 'https' , 'login' , 'login_post' , 'admin' , or
* 'relative' . Default null .
2008-10-14 00:00:07 +02:00
* @ return string Site url link with optional path appended .
2008-07-15 01:39:11 +02:00
*/
2010-05-03 20:16:22 +02:00
function get_site_url ( $blog_id = null , $path = '' , $scheme = null ) {
2012-08-03 19:51:42 +02:00
if ( empty ( $blog_id ) || ! is_multisite () ) {
2010-05-16 23:58:31 +02:00
$url = get_option ( 'siteurl' );
2012-08-03 19:51:42 +02:00
} else {
switch_to_blog ( $blog_id );
$url = get_option ( 'siteurl' );
restore_current_blog ();
}
2010-02-05 22:49:19 +01:00
2012-09-04 16:44:17 +02:00
$url = set_url_scheme ( $url , $scheme );
2008-05-27 19:46:01 +02:00
2013-02-28 22:04:26 +01:00
if ( $path && is_string ( $path ) )
2010-05-16 23:58:31 +02:00
$url .= '/' . ltrim ( $path , '/' );
2008-05-27 19:46:01 +02:00
2014-04-14 04:13:16 +02:00
/**
* Filter the site URL .
*
* @ since 2.7 . 0
*
* @ param string $url The complete site URL including scheme and path .
* @ param string $path Path relative to the site URL . Blank string if no path is specified .
* @ param string | null $scheme Scheme to give the site URL context . Accepts 'http' , 'https' , 'login' ,
* 'login_post' , 'admin' , 'relative' or null .
* @ param int | null $blog_id Blog ID , or null for the current blog .
*/
2012-09-04 16:44:17 +02:00
return apply_filters ( 'site_url' , $url , $path , $scheme , $blog_id );
2008-05-27 19:46:01 +02:00
}
2008-10-14 00:00:07 +02:00
/**
2010-02-05 22:49:19 +01:00
* Retrieve the url to the admin area for the current site .
2008-07-15 01:39:11 +02:00
*
2008-10-14 00:00:07 +02:00
* @ since 2.6 . 0
2008-07-15 01:39:11 +02:00
*
2015-05-26 20:44:25 +02:00
* @ param string $path Optional path relative to the admin url .
2010-03-25 23:00:36 +01:00
* @ param string $scheme The scheme to use . Default is 'admin' , which obeys force_ssl_admin () and is_ssl () . 'http' or 'https' can be passed to force those schemes .
2011-09-30 00:57:43 +02:00
* @ return string Admin url link with optional path appended .
2008-07-15 01:39:11 +02:00
*/
2010-05-03 20:16:22 +02:00
function admin_url ( $path = '' , $scheme = 'admin' ) {
2012-09-04 16:44:17 +02:00
return get_admin_url ( null , $path , $scheme );
2010-02-05 22:49:19 +01:00
}
/**
2014-12-06 22:24:45 +01:00
* Retrieves the url to the admin area for a given site .
2010-02-05 22:49:19 +01:00
*
* @ since 3.0 . 0
*
2014-12-06 22:24:45 +01:00
* @ param int $blog_id Optional . Blog ID . Default null ( current site ) .
* @ param string $path Optional . Path relative to the admin url . Default empty .
* @ param string $scheme Optional . The scheme to use . Accepts 'http' or 'https' ,
* to force those schemes . Default 'admin' , which obeys
* { @ see force_ssl_admin ()} and { @ see is_ssl ()} .
2011-09-30 00:57:43 +02:00
* @ return string Admin url link with optional path appended .
2010-02-05 22:49:19 +01:00
*/
2010-05-03 20:16:22 +02:00
function get_admin_url ( $blog_id = null , $path = '' , $scheme = 'admin' ) {
2010-03-25 23:00:36 +01:00
$url = get_site_url ( $blog_id , 'wp-admin/' , $scheme );
2008-05-27 19:46:01 +02:00
2013-02-28 22:04:26 +01:00
if ( $path && is_string ( $path ) )
2012-09-04 16:44:17 +02:00
$url .= ltrim ( $path , '/' );
2008-05-27 19:46:01 +02:00
2014-04-14 04:13:16 +02:00
/**
* Filter the admin area URL .
*
* @ since 2.8 . 0
*
* @ param string $url The complete admin area URL including scheme and path .
* @ param string $path Path relative to the admin area URL . Blank string if no path is specified .
* @ param int | null $blog_id Blog ID , or null for the current blog .
*/
2012-09-04 16:44:17 +02:00
return apply_filters ( 'admin_url' , $url , $path , $blog_id );
2008-05-27 19:46:01 +02:00
}
2008-10-14 00:00:07 +02:00
/**
* Retrieve the url to the includes directory .
2008-07-15 01:39:11 +02:00
*
2008-10-14 00:00:07 +02:00
* @ since 2.6 . 0
2008-07-15 01:39:11 +02:00
*
2015-05-26 20:44:25 +02:00
* @ param string $path Optional . Path relative to the includes url .
2013-08-01 15:15:14 +02:00
* @ param string $scheme Optional . Scheme to give the includes url context .
2008-10-14 00:00:07 +02:00
* @ return string Includes url link with optional path appended .
2008-07-15 01:39:11 +02:00
*/
2013-08-01 15:15:14 +02:00
function includes_url ( $path = '' , $scheme = null ) {
$url = site_url ( '/' . WPINC . '/' , $scheme );
2008-05-27 19:46:01 +02:00
2013-02-28 22:04:26 +01:00
if ( $path && is_string ( $path ) )
2008-05-27 19:46:01 +02:00
$url .= ltrim ( $path , '/' );
2014-04-14 04:13:16 +02:00
/**
* Filter the URL to the includes directory .
*
* @ since 2.8 . 0
*
* @ param string $url The complete URL to the includes directory including scheme and path .
* @ param string $path Path relative to the URL to the wp - includes directory . Blank string
* if no path is specified .
*/
return apply_filters ( 'includes_url' , $url , $path );
2008-05-27 19:46:01 +02:00
}
2008-10-14 00:00:07 +02:00
/**
* Retrieve the url to the content directory .
2008-07-15 01:39:11 +02:00
*
2008-10-14 00:00:07 +02:00
* @ since 2.6 . 0
2008-07-15 01:39:11 +02:00
*
2008-10-14 00:00:07 +02:00
* @ param string $path Optional . Path relative to the content url .
* @ return string Content url link with optional path appended .
2008-07-15 01:39:11 +02:00
*/
2010-05-03 20:16:22 +02:00
function content_url ( $path = '' ) {
2012-08-30 15:33:00 +02:00
$url = set_url_scheme ( WP_CONTENT_URL );
2008-07-09 19:24:36 +02:00
2013-02-28 22:04:26 +01:00
if ( $path && is_string ( $path ) )
2008-07-09 19:24:36 +02:00
$url .= '/' . ltrim ( $path , '/' );
2014-04-14 04:13:16 +02:00
/**
* Filter the URL to the content directory .
*
* @ since 2.8 . 0
*
* @ param string $url The complete URL to the content directory including scheme and path .
* @ param string $path Path relative to the URL to the content directory . Blank string
* if no path is specified .
*/
return apply_filters ( 'content_url' , $url , $path );
2008-07-09 19:24:36 +02:00
}
2008-10-14 00:00:07 +02:00
/**
2014-07-03 21:42:15 +02:00
* Retrieve a URL within the plugins or mu - plugins directory .
*
* Defaults to the plugins directory URL if no arguments are supplied .
2008-07-15 02:10:07 +02:00
*
2008-10-14 00:00:07 +02:00
* @ since 2.6 . 0
2008-07-15 02:10:07 +02:00
*
2014-07-03 21:42:15 +02:00
* @ param string $path Optional . Extra path appended to the end of the URL , including
* the relative directory if $plugin is supplied . Default empty .
* @ param string $plugin Optional . A full path to a file inside a plugin or mu - plugin .
* The URL will be relative to its directory . Default empty .
* Typically this is done by passing `__FILE__` as the argument .
* @ return string Plugins URL link with optional paths appended .
2008-07-15 02:10:07 +02:00
*/
2014-07-03 21:42:15 +02:00
function plugins_url ( $path = '' , $plugin = '' ) {
2009-04-23 10:16:06 +02:00
2014-08-05 03:31:16 +02:00
$path = wp_normalize_path ( $path );
$plugin = wp_normalize_path ( $plugin );
$mu_plugin_dir = wp_normalize_path ( WPMU_PLUGIN_DIR );
2010-02-05 13:39:04 +01:00
if ( ! empty ( $plugin ) && 0 === strpos ( $plugin , $mu_plugin_dir ) )
2009-04-23 10:16:06 +02:00
$url = WPMU_PLUGIN_URL ;
2010-02-05 13:39:04 +01:00
else
2009-04-23 10:16:06 +02:00
$url = WP_PLUGIN_URL ;
2012-09-19 20:11:43 +02:00
2012-08-30 15:33:00 +02:00
$url = set_url_scheme ( $url );
2008-07-15 02:10:07 +02:00
2009-04-23 10:16:06 +02:00
if ( ! empty ( $plugin ) && is_string ( $plugin ) ) {
2009-02-15 17:50:45 +01:00
$folder = dirname ( plugin_basename ( $plugin ));
2010-02-05 13:39:04 +01:00
if ( '.' != $folder )
2009-02-15 17:50:45 +01:00
$url .= '/' . ltrim ( $folder , '/' );
}
2009-03-18 03:43:45 +01:00
2013-02-28 22:04:26 +01:00
if ( $path && is_string ( $path ) )
2008-07-15 02:10:07 +02:00
$url .= '/' . ltrim ( $path , '/' );
2014-04-14 04:13:16 +02:00
/**
* Filter the URL to the plugins directory .
*
* @ since 2.8 . 0
*
* @ param string $url The complete URL to the plugins directory including scheme and path .
* @ param string $path Path relative to the URL to the plugins directory . Blank string
* if no path is specified .
* @ param string $plugin The plugin file path to be relative to . Blank string if no plugin
* is specified .
*/
return apply_filters ( 'plugins_url' , $url , $path , $plugin );
2008-07-15 02:10:07 +02:00
}
2010-03-29 19:53:03 +02:00
/**
* Retrieve the site url for the current network .
*
2011-09-30 00:57:43 +02:00
* Returns the site url with the appropriate protocol , 'https' if
2010-03-29 19:53:03 +02:00
* is_ssl () and 'http' otherwise . If $scheme is 'http' or 'https' , is_ssl () is
* overridden .
*
* @ since 3.0 . 0
*
2015-05-26 20:44:25 +02:00
* @ param string $path Optional . Path relative to the site url .
2012-09-04 16:44:17 +02:00
* @ param string $scheme Optional . Scheme to give the site url context . See set_url_scheme () .
2010-03-29 19:53:03 +02:00
* @ return string Site url link with optional path appended .
*/
2010-05-03 20:16:22 +02:00
function network_site_url ( $path = '' , $scheme = null ) {
2012-09-04 16:44:17 +02:00
if ( ! is_multisite () )
2010-03-29 23:45:31 +02:00
return site_url ( $path , $scheme );
2013-11-13 04:23:10 +01:00
$current_site = get_current_site ();
2012-02-08 17:09:41 +01:00
if ( 'relative' == $scheme )
$url = $current_site -> path ;
else
2012-09-04 16:44:17 +02:00
$url = set_url_scheme ( 'http://' . $current_site -> domain . $current_site -> path , $scheme );
2010-03-29 19:53:03 +02:00
2013-02-28 22:04:26 +01:00
if ( $path && is_string ( $path ) )
2012-09-04 16:44:17 +02:00
$url .= ltrim ( $path , '/' );
2010-03-29 19:53:03 +02:00
2014-04-14 04:13:16 +02:00
/**
* Filter the network site URL .
*
* @ since 3.0 . 0
*
* @ param string $url The complete network site URL including scheme and path .
* @ param string $path Path relative to the network site URL . Blank string if
* no path is specified .
* @ param string | null $scheme Scheme to give the URL context . Accepts 'http' , 'https' ,
* 'relative' or null .
*/
2012-09-04 16:44:17 +02:00
return apply_filters ( 'network_site_url' , $url , $path , $scheme );
2010-03-29 19:53:03 +02:00
}
/**
2014-12-06 22:24:45 +01:00
* Retrieves the home url for the current network .
2010-03-29 19:53:03 +02:00
*
2014-12-06 22:24:45 +01:00
* Returns the home url with the appropriate protocol , 'https' { @ see is_ssl ()}
* and 'http' otherwise . If `$scheme` is 'http' or 'https' , `is_ssl()` is
2010-03-29 19:53:03 +02:00
* overridden .
*
* @ since 3.0 . 0
*
2014-12-06 22:24:45 +01:00
* @ param string $path Optional . Path relative to the home url . Default empty .
* @ param string $scheme Optional . Scheme to give the home url context . Accepts
* 'http' , 'https' , or 'relative' . Default null .
2010-03-29 19:53:03 +02:00
* @ return string Home url link with optional path appended .
*/
2010-05-03 20:16:22 +02:00
function network_home_url ( $path = '' , $scheme = null ) {
2012-09-04 16:44:17 +02:00
if ( ! is_multisite () )
2010-03-29 23:45:31 +02:00
return home_url ( $path , $scheme );
2013-11-13 04:23:10 +01:00
$current_site = get_current_site ();
2010-03-29 19:53:03 +02:00
$orig_scheme = $scheme ;
2010-03-29 22:25:30 +02:00
2012-09-04 16:44:17 +02:00
if ( ! in_array ( $scheme , array ( 'http' , 'https' , 'relative' ) ) )
$scheme = is_ssl () && ! is_admin () ? 'https' : 'http' ;
2010-03-29 19:53:03 +02:00
2012-02-08 17:09:41 +01:00
if ( 'relative' == $scheme )
$url = $current_site -> path ;
else
2012-09-04 16:44:17 +02:00
$url = set_url_scheme ( 'http://' . $current_site -> domain . $current_site -> path , $scheme );
2010-03-29 19:53:03 +02:00
2013-02-28 22:04:26 +01:00
if ( $path && is_string ( $path ) )
2010-03-29 21:57:17 +02:00
$url .= ltrim ( $path , '/' );
2010-03-29 19:53:03 +02:00
2014-04-14 04:13:16 +02:00
/**
* Filter the network home URL .
*
* @ since 3.0 . 0
*
* @ param string $url The complete network home URL including scheme and path .
* @ param string $path Path relative to the network home URL . Blank string
* if no path is specified .
* @ param string | null $orig_scheme Scheme to give the URL context . Accepts 'http' , 'https' ,
* 'relative' or null .
*/
2010-05-03 20:16:22 +02:00
return apply_filters ( 'network_home_url' , $url , $path , $orig_scheme );
2010-03-29 19:53:03 +02:00
}
/**
* Retrieve the url to the admin area for the network .
*
* @ since 3.0 . 0
*
2015-05-26 20:44:25 +02:00
* @ param string $path Optional path relative to the admin url .
2010-03-29 19:53:03 +02:00
* @ param string $scheme The scheme to use . Default is 'admin' , which obeys force_ssl_admin () and is_ssl () . 'http' or 'https' can be passed to force those schemes .
2011-09-30 00:57:43 +02:00
* @ return string Admin url link with optional path appended .
2010-03-29 19:53:03 +02:00
*/
2010-05-03 20:16:22 +02:00
function network_admin_url ( $path = '' , $scheme = 'admin' ) {
2010-12-16 10:31:42 +01:00
if ( ! is_multisite () )
return admin_url ( $path , $scheme );
2010-07-30 22:34:54 +02:00
$url = network_site_url ( 'wp-admin/network/' , $scheme );
2010-03-29 19:53:03 +02:00
2013-02-28 22:04:26 +01:00
if ( $path && is_string ( $path ) )
2010-03-29 19:53:03 +02:00
$url .= ltrim ( $path , '/' );
2014-04-14 04:13:16 +02:00
/**
* Filter the network admin URL .
*
* @ since 3.0 . 0
*
* @ param string $url The complete network admin URL including scheme and path .
* @ param string $path Path relative to the network admin URL . Blank string if
* no path is specified .
*/
return apply_filters ( 'network_admin_url' , $url , $path );
2010-03-29 19:53:03 +02:00
}
2010-10-07 21:34:18 +02:00
/**
* Retrieve the url to the admin area for the current user .
*
* @ since 3.0 . 0
*
2015-05-26 20:44:25 +02:00
* @ param string $path Optional path relative to the admin url .
2010-10-07 21:34:18 +02:00
* @ param string $scheme The scheme to use . Default is 'admin' , which obeys force_ssl_admin () and is_ssl () . 'http' or 'https' can be passed to force those schemes .
2011-09-30 00:57:43 +02:00
* @ return string Admin url link with optional path appended .
2010-10-07 21:34:18 +02:00
*/
function user_admin_url ( $path = '' , $scheme = 'admin' ) {
$url = network_site_url ( 'wp-admin/user/' , $scheme );
2013-02-28 22:04:26 +01:00
if ( $path && is_string ( $path ) )
2010-10-07 21:34:18 +02:00
$url .= ltrim ( $path , '/' );
2014-04-14 04:13:16 +02:00
/**
* Filter the user admin URL for the current user .
*
* @ since 3.1 . 0
*
* @ param string $url The complete URL including scheme and path .
* @ param string $path Path relative to the URL . Blank string if
* no path is specified .
*/
return apply_filters ( 'user_admin_url' , $url , $path );
2010-10-07 21:34:18 +02:00
}
2010-07-30 22:34:54 +02:00
/**
* Retrieve the url to the admin area for either the current blog or the network depending on context .
*
* @ since 3.1 . 0
*
2015-05-26 20:44:25 +02:00
* @ param string $path Optional path relative to the admin url .
2010-07-30 22:34:54 +02:00
* @ param string $scheme The scheme to use . Default is 'admin' , which obeys force_ssl_admin () and is_ssl () . 'http' or 'https' can be passed to force those schemes .
2011-09-30 00:57:43 +02:00
* @ return string Admin url link with optional path appended .
2010-07-30 22:34:54 +02:00
*/
function self_admin_url ( $path = '' , $scheme = 'admin' ) {
if ( is_network_admin () )
return network_admin_url ( $path , $scheme );
2010-10-07 21:34:18 +02:00
elseif ( is_user_admin () )
return user_admin_url ( $path , $scheme );
2010-07-30 22:34:54 +02:00
else
return admin_url ( $path , $scheme );
}
2012-05-18 22:04:59 +02:00
/**
* Set the scheme for a URL
*
* @ since 3.4 . 0
2012-05-27 18:25:43 +02:00
*
2015-05-26 20:44:25 +02:00
* @ param string $url Absolute url that includes a scheme
2012-05-18 22:04:59 +02:00
* @ param string $scheme Optional . Scheme to give $url . Currently 'http' , 'https' , 'login' , 'login_post' , 'admin' , or 'relative' .
* @ return string $url URL with chosen scheme .
*/
function set_url_scheme ( $url , $scheme = null ) {
$orig_scheme = $scheme ;
2014-05-29 05:59:15 +02:00
if ( ! $scheme ) {
$scheme = is_ssl () ? 'https' : 'http' ;
} elseif ( $scheme === 'admin' || $scheme === 'login' || $scheme === 'login_post' || $scheme === 'rpc' ) {
$scheme = is_ssl () || force_ssl_admin () ? 'https' : 'http' ;
} elseif ( $scheme !== 'http' && $scheme !== 'https' && $scheme !== 'relative' ) {
$scheme = is_ssl () ? 'https' : 'http' ;
2012-05-18 22:04:59 +02:00
}
2013-09-10 20:08:11 +02:00
$url = trim ( $url );
2013-09-11 05:57:09 +02:00
if ( substr ( $url , 0 , 2 ) === '//' )
2013-09-10 20:08:11 +02:00
$url = 'http:' . $url ;
if ( 'relative' == $scheme ) {
$url = ltrim ( preg_replace ( '#^\w+://[^/]*#' , '' , $url ) );
2013-09-11 05:57:09 +02:00
if ( $url !== '' && $url [ 0 ] === '/' )
2013-09-10 20:08:11 +02:00
$url = '/' . ltrim ( $url , " / \t \n \r \0 \x0B " );
} else {
$url = preg_replace ( '#^\w+://#' , $scheme . '://' , $url );
}
2012-05-18 22:04:59 +02:00
2014-04-14 04:13:16 +02:00
/**
* Filter the resulting URL after setting the scheme .
*
* @ since 3.4 . 0
*
* @ param string $url The complete URL including scheme and path .
* @ param string $scheme Scheme applied to the URL . One of 'http' , 'https' , or 'relative' .
* @ param string $orig_scheme Scheme requested for the URL . One of 'http' , 'https' , 'login' ,
* 'login_post' , 'admin' , 'rpc' , or 'relative' .
*/
2012-05-18 22:04:59 +02:00
return apply_filters ( 'set_url_scheme' , $url , $scheme , $orig_scheme );
}
2010-10-29 19:48:53 +02:00
/**
* Get the URL to the user ' s dashboard .
*
2011-12-14 00:45:31 +01:00
* If a user does not belong to any site , the global user dashboard is used . If the user belongs to the current site ,
2011-09-30 00:57:43 +02:00
* the dashboard for the current site is returned . If the user cannot edit the current site , the dashboard to the user ' s
2010-10-29 19:48:53 +02:00
* primary blog is returned .
*
* @ since 3.1 . 0
*
2015-05-26 20:44:25 +02:00
* @ param int $user_id Optional . User ID . Defaults to current user .
* @ param string $path Optional path relative to the dashboard . Use only paths known to both blog and user admins .
* @ param string $scheme The scheme to use . Default is 'admin' , which obeys force_ssl_admin () and is_ssl () . 'http' or 'https' can be passed to force those schemes .
2011-09-30 00:57:43 +02:00
* @ return string Dashboard url link with optional path appended .
2010-10-29 19:48:53 +02:00
*/
2014-02-25 18:08:13 +01:00
function get_dashboard_url ( $user_id = 0 , $path = '' , $scheme = 'admin' ) {
$user_id = $user_id ? ( int ) $user_id : get_current_user_id ();
2010-10-29 19:48:53 +02:00
$blogs = get_blogs_of_user ( $user_id );
2011-06-22 21:45:28 +02:00
if ( ! is_super_admin () && empty ( $blogs ) ) {
2010-10-29 19:48:53 +02:00
$url = user_admin_url ( $path , $scheme );
} elseif ( ! is_multisite () ) {
$url = admin_url ( $path , $scheme );
} else {
$current_blog = get_current_blog_id ();
2011-06-22 21:45:28 +02:00
if ( $current_blog && ( is_super_admin ( $user_id ) || in_array ( $current_blog , array_keys ( $blogs ) ) ) ) {
2010-10-29 19:48:53 +02:00
$url = admin_url ( $path , $scheme );
} else {
$active = get_active_blog_for_user ( $user_id );
if ( $active )
$url = get_admin_url ( $active -> blog_id , $path , $scheme );
else
$url = user_admin_url ( $path , $scheme );
}
}
2014-04-14 04:13:16 +02:00
/**
* Filter the dashboard URL for a user .
*
* @ since 3.1 . 0
*
* @ param string $url The complete URL including scheme and path .
* @ param int $user_id The user ID .
* @ param string $path Path relative to the URL . Blank string if no path is specified .
* @ param string $scheme Scheme to give the URL context . Accepts 'http' , 'https' , 'login' ,
* 'login_post' , 'admin' , 'relative' or null .
*/
2010-10-29 19:48:53 +02:00
return apply_filters ( 'user_dashboard_url' , $url , $user_id , $path , $scheme );
}
/**
* Get the URL to the user ' s profile editor .
*
* @ since 3.1 . 0
*
2014-02-25 18:08:13 +01:00
* @ param int $user_id Optional . User ID . Defaults to current user .
* @ param string $scheme The scheme to use . Default is 'admin' , which obeys force_ssl_admin () and is_ssl () .
* 'http' or 'https' can be passed to force those schemes .
2011-09-30 00:57:43 +02:00
* @ return string Dashboard url link with optional path appended .
2010-10-29 19:48:53 +02:00
*/
2014-02-25 18:08:13 +01:00
function get_edit_profile_url ( $user_id = 0 , $scheme = 'admin' ) {
2014-02-25 18:29:13 +01:00
$user_id = $user_id ? ( int ) $user_id : get_current_user_id ();
2010-10-29 19:48:53 +02:00
2010-11-19 00:07:59 +01:00
if ( is_user_admin () )
$url = user_admin_url ( 'profile.php' , $scheme );
elseif ( is_network_admin () )
$url = network_admin_url ( 'profile.php' , $scheme );
else
2014-02-25 18:08:13 +01:00
$url = get_dashboard_url ( $user_id , 'profile.php' , $scheme );
2010-10-29 19:48:53 +02:00
2014-04-14 04:13:16 +02:00
/**
* Filter the URL for a user ' s profile editor .
*
* @ since 3.1 . 0
*
* @ param string $url The complete URL including scheme and path .
* @ param int $user_id The user ID .
* @ param string $scheme Scheme to give the URL context . Accepts 'http' , 'https' , 'login' ,
* 'login_post' , 'admin' , 'relative' or null .
*/
2014-02-25 18:08:13 +01:00
return apply_filters ( 'edit_profile_url' , $url , $user_id , $scheme );
2010-10-29 19:48:53 +02:00
}
2009-08-05 18:43:51 +02:00
/**
2011-09-30 00:57:43 +02:00
* Output rel = canonical for singular queries .
2009-08-05 18:43:51 +02:00
*
* @ since 2.9 . 0
2015-05-26 20:44:25 +02:00
*
* @ global WP_Query $wp_the_query
2009-08-05 18:43:51 +02:00
*/
function rel_canonical () {
if ( ! is_singular () )
return ;
global $wp_the_query ;
if ( ! $id = $wp_the_query -> get_queried_object_id () )
return ;
$link = get_permalink ( $id );
2012-08-21 14:53:54 +02:00
if ( $page = get_query_var ( 'cpage' ) )
$link = get_comments_pagenum_link ( $page );
2009-08-05 18:43:51 +02:00
echo " <link rel='canonical' href=' $link ' /> \n " ;
}
2010-03-09 20:36:38 +01:00
/**
* Return a shortlink for a post , page , attachment , or blog .
*
2011-09-30 00:57:43 +02:00
* This function exists to provide a shortlink tag that all themes and plugins can target . A plugin must hook in to
* provide the actual shortlinks . Default shortlink support is limited to providing ? p = style links for posts .
* Plugins can short - circuit this function via the pre_get_shortlink filter or filter the output
2010-03-09 20:36:38 +01:00
* via the get_shortlink filter .
*
* @ since 3.0 . 0.
2010-03-17 17:27:25 +01:00
*
2015-05-26 20:44:25 +02:00
* @ global WP_Query $wp_query
*
* @ param int $id A post or blog id . Default is 0 , which means the current post or blog .
* @ param string $context Whether the id is a 'blog' id , 'post' id , or 'media' id .
* If 'post' , the post_type of the post is consulted .
* If 'query' , the current query is consulted to determine the id and context .
* Default is 'post' .
* @ param bool $allow_slugs Whether to allow post slugs in the shortlink . It is up to the plugin how and whether to honor this .
2010-03-09 20:36:38 +01:00
* @ return string A shortlink or an empty string if no shortlink exists for the requested resource or if shortlinks are not enabled .
*/
function wp_get_shortlink ( $id = 0 , $context = 'post' , $allow_slugs = true ) {
2014-04-14 04:13:16 +02:00
/**
* Filter whether to preempt generating a shortlink for the given post .
*
* Passing a truthy value to the filter will effectively short - circuit the
* shortlink - generation process , returning that value instead .
*
* @ since 3.0 . 0
*
* @ param bool | string $return Short - circuit return value . Either false or a URL string .
* @ param int $id Post ID , or 0 for the current post .
* @ param string $context The context for the link . One of 'post' or 'query' ,
* @ param bool $allow_slugs Whether to allow post slugs in the shortlink .
*/
$shortlink = apply_filters ( 'pre_get_shortlink' , false , $id , $context , $allow_slugs );
2010-03-09 20:36:38 +01:00
if ( false !== $shortlink )
return $shortlink ;
global $wp_query ;
$post_id = 0 ;
2013-08-22 17:56:08 +02:00
if ( 'query' == $context && is_singular () ) {
2010-03-09 20:36:38 +01:00
$post_id = $wp_query -> get_queried_object_id ();
2013-08-15 22:09:09 +02:00
$post = get_post ( $post_id );
2010-05-06 23:20:17 +02:00
} elseif ( 'post' == $context ) {
2013-08-15 22:09:09 +02:00
$post = get_post ( $id );
2013-09-12 19:30:10 +02:00
if ( ! empty ( $post -> ID ) )
$post_id = $post -> ID ;
2010-05-06 23:20:17 +02:00
}
2010-03-09 20:36:38 +01:00
$shortlink = '' ;
2013-08-15 22:09:09 +02:00
// Return p= link for all public post types.
if ( ! empty ( $post_id ) ) {
$post_type = get_post_type_object ( $post -> post_type );
2014-03-28 03:59:14 +01:00
if ( 'page' === $post -> post_type && $post -> ID == get_option ( 'page_on_front' ) && 'page' == get_option ( 'show_on_front' ) ) {
$shortlink = home_url ( '/' );
} elseif ( $post_type -> public ) {
$shortlink = home_url ( '?p=' . $post_id );
}
2010-03-09 20:36:38 +01:00
}
2014-04-14 04:13:16 +02:00
/**
* Filter the shortlink for a post .
*
* @ since 3.0 . 0
*
* @ param string $shortlink Shortlink URL .
* @ param int $id Post ID , or 0 for the current post .
* @ param string $context The context for the link . One of 'post' or 'query' ,
* @ param bool $allow_slugs Whether to allow post slugs in the shortlink . Not used by default .
*/
return apply_filters ( 'get_shortlink' , $shortlink , $id , $context , $allow_slugs );
2010-03-09 20:36:38 +01:00
}
/**
2011-09-05 21:08:15 +02:00
* Inject rel = shortlink into head if a shortlink is defined for the current page .
2010-03-09 20:36:38 +01:00
*
* Attached to the wp_head action .
*
* @ since 3.0 . 0
*/
function wp_shortlink_wp_head () {
2010-04-23 23:20:16 +02:00
$shortlink = wp_get_shortlink ( 0 , 'query' );
2010-03-09 20:36:38 +01:00
2010-04-23 23:20:16 +02:00
if ( empty ( $shortlink ) )
2010-03-09 20:36:38 +01:00
return ;
2011-04-01 21:29:06 +02:00
echo " <link rel='shortlink' href=' " . esc_url ( $shortlink ) . " ' /> \n " ;
2010-03-09 20:36:38 +01:00
}
/**
* Send a Link : rel = shortlink header if a shortlink is defined for the current page .
*
* Attached to the wp action .
*
* @ since 3.0 . 0
*/
function wp_shortlink_header () {
2010-06-30 02:05:18 +02:00
if ( headers_sent () )
2010-03-09 20:36:38 +01:00
return ;
$shortlink = wp_get_shortlink ( 0 , 'query' );
if ( empty ( $shortlink ) )
return ;
2010-03-10 21:10:32 +01:00
header ( 'Link: <' . $shortlink . '>; rel=shortlink' , false );
2010-03-09 20:36:38 +01:00
}
2010-03-12 17:08:37 +01:00
/**
* Display the Short Link for a Post
*
* Must be called from inside " The Loop "
*
* Call like the_shortlink ( __ ( 'Shortlinkage FTW' ))
*
* @ since 3.0 . 0
*
2015-05-26 20:44:25 +02:00
* @ param string $text Optional The link text or HTML to be displayed . Defaults to 'This is the short link.'
* @ param string $title Optional The tooltip for the link . Must be sanitized . Defaults to the sanitized post title .
2010-03-12 17:08:37 +01:00
* @ param string $before Optional HTML to display before the link .
2015-05-26 20:44:25 +02:00
* @ param string $after Optional HTML to display after the link .
2010-03-12 17:08:37 +01:00
*/
2010-04-23 23:20:16 +02:00
function the_shortlink ( $text = '' , $title = '' , $before = '' , $after = '' ) {
2012-11-14 06:05:34 +01:00
$post = get_post ();
2010-04-23 23:20:16 +02:00
if ( empty ( $text ) )
2010-03-12 17:08:37 +01:00
$text = __ ( 'This is the short link.' );
2010-04-23 23:20:16 +02:00
if ( empty ( $title ) )
2012-01-05 21:50:54 +01:00
$title = the_title_attribute ( array ( 'echo' => false ) );
2010-03-12 17:08:37 +01:00
2012-11-14 06:05:34 +01:00
$shortlink = wp_get_shortlink ( $post -> ID );
2010-03-12 17:08:37 +01:00
2010-04-23 23:20:16 +02:00
if ( ! empty ( $shortlink ) ) {
2010-04-23 23:23:32 +02:00
$link = '<a rel="shortlink" href="' . esc_url ( $shortlink ) . '" title="' . $title . '">' . $text . '</a>' ;
2014-04-14 04:13:16 +02:00
/**
* Filter the shortlink anchor tag for a post .
*
* @ since 3.0 . 0
*
* @ param string $link Shortlink anchor tag .
* @ param string $shortlink Shortlink URL .
* @ param string $text Shortlink ' s text .
* @ param string $title Shortlink ' s title attribute .
*/
2010-04-23 23:20:16 +02:00
$link = apply_filters ( 'the_shortlink' , $link , $shortlink , $text , $title );
echo $before , $link , $after ;
}
2010-03-12 17:08:37 +01:00
}
2015-01-09 05:43:23 +01:00
/**
* Retrieve the avatar URL .
*
* @ since 4.2 . 0
*
* @ param mixed $id_or_email The Gravatar to retrieve a URL for . Accepts a user_id , gravatar md5 hash ,
2015-09-03 20:17:24 +02:00
* user email , WP_User object , WP_Post object , or WP_Comment object .
2015-04-05 18:04:28 +02:00
* @ param array $args {
2015-01-09 05:43:23 +01:00
* Optional . Arguments to return instead of the default arguments .
*
* @ type int $size Height and width of the avatar in pixels . Default 96.
* @ type string $default URL for the default image or a default type . Accepts '404' ( return
* a 404 instead of a default image ), 'retro' ( 8 bit ), 'monsterid' ( monster ),
* 'wavatar' ( cartoon face ), 'indenticon' ( the " quilt " ), 'mystery' , 'mm' ,
* or 'mysterman' ( The Oyster Man ), 'blank' ( transparent GIF ), or
* 'gravatar_default' ( the Gravatar logo ) . Default is the value of the
* 'avatar_default' option , with a fallback of 'mystery' .
* @ type bool $force_default Whether to always show the default image , never the Gravatar . Default false .
* @ type string $rating What rating to display avatars up to . Accepts 'G' , 'PG' , 'R' , 'X' , and are
* judged in that order . Default is the value of the 'avatar_rating' option .
2015-04-05 18:04:28 +02:00
* @ type string $scheme URL scheme to use . See set_url_scheme () for accepted values .
2015-01-09 05:43:23 +01:00
* Default null .
* @ type array $processed_args When the function returns , the value will be the processed / sanitized $args
* plus a " found_avatar " guess . Pass as a reference . Default null .
* }
* @ return false | string The URL of the avatar we found , or false if we couldn ' t find an avatar .
*/
function get_avatar_url ( $id_or_email , $args = null ) {
$args = get_avatar_data ( $id_or_email , $args );
return $args [ 'url' ];
}
/**
* Retrieve default data about the avatar .
*
* @ since 4.2 . 0
*
2015-09-03 20:17:24 +02:00
* @ param mixed $id_or_email The Gravatar to retrieve . Accepts a user_id , gravatar md5 hash ,
* user email , WP_User object , WP_Post object , or WP_Comment object .
2015-04-05 18:04:28 +02:00
* @ param array $args {
2015-01-09 05:43:23 +01:00
* Optional . Arguments to return instead of the default arguments .
*
2015-02-26 22:17:24 +01:00
* @ type int $size Height and width of the avatar image file in pixels . Default 96.
* @ type int $height Display height of the avatar in pixels . Defaults to $size .
* @ type int $width Display width of the avatar in pixels . Defaults to $size .
2015-01-09 05:43:23 +01:00
* @ type string $default URL for the default image or a default type . Accepts '404' ( return
* a 404 instead of a default image ), 'retro' ( 8 bit ), 'monsterid' ( monster ),
* 'wavatar' ( cartoon face ), 'indenticon' ( the " quilt " ), 'mystery' , 'mm' ,
* or 'mysterman' ( The Oyster Man ), 'blank' ( transparent GIF ), or
* 'gravatar_default' ( the Gravatar logo ) . Default is the value of the
* 'avatar_default' option , with a fallback of 'mystery' .
* @ type bool $force_default Whether to always show the default image , never the Gravatar . Default false .
* @ type string $rating What rating to display avatars up to . Accepts 'G' , 'PG' , 'R' , 'X' , and are
* judged in that order . Default is the value of the 'avatar_rating' option .
2015-04-05 18:04:28 +02:00
* @ type string $scheme URL scheme to use . See set_url_scheme () for accepted values .
2015-01-09 05:43:23 +01:00
* Default null .
* @ type array $processed_args When the function returns , the value will be the processed / sanitized $args
* plus a " found_avatar " guess . Pass as a reference . Default null .
2015-03-01 08:19:24 +01:00
* @ type string $extra_attr HTML attributes to insert in the IMG element . Is not sanitized . Default empty .
2015-01-09 05:43:23 +01:00
* }
* @ return array $processed_args {
2015-04-05 18:04:28 +02:00
* Along with the arguments passed in `$args` , this will contain a couple of extra arguments .
2015-01-09 05:43:23 +01:00
*
2015-01-12 01:20:24 +01:00
* @ type bool $found_avatar True if we were able to find an avatar for this user ,
* false or not set if we couldn ' t .
* @ type string $url The URL of the avatar we found .
2015-01-09 05:43:23 +01:00
* }
*/
function get_avatar_data ( $id_or_email , $args = null ) {
$args = wp_parse_args ( $args , array (
'size' => 96 ,
2015-02-26 22:17:24 +01:00
'height' => null ,
'width' => null ,
2015-01-09 05:43:23 +01:00
'default' => get_option ( 'avatar_default' , 'mystery' ),
'force_default' => false ,
'rating' => get_option ( 'avatar_rating' ),
'scheme' => null ,
'processed_args' => null , // if used, should be a reference
2015-02-26 22:17:24 +01:00
'extra_attr' => '' ,
2015-01-09 05:43:23 +01:00
) );
if ( is_numeric ( $args [ 'size' ] ) ) {
$args [ 'size' ] = absint ( $args [ 'size' ] );
if ( ! $args [ 'size' ] ) {
$args [ 'size' ] = 96 ;
}
} else {
$args [ 'size' ] = 96 ;
}
2015-02-26 22:17:24 +01:00
if ( is_numeric ( $args [ 'height' ] ) ) {
$args [ 'height' ] = absint ( $args [ 'height' ] );
if ( ! $args [ 'height' ] ) {
$args [ 'height' ] = $args [ 'size' ];
}
} else {
$args [ 'height' ] = $args [ 'size' ];
}
if ( is_numeric ( $args [ 'width' ] ) ) {
$args [ 'width' ] = absint ( $args [ 'width' ] );
if ( ! $args [ 'width' ] ) {
$args [ 'width' ] = $args [ 'size' ];
}
} else {
$args [ 'width' ] = $args [ 'size' ];
}
2015-01-09 05:43:23 +01:00
if ( empty ( $args [ 'default' ] ) ) {
2015-01-12 01:23:24 +01:00
$args [ 'default' ] = get_option ( 'avatar_default' , 'mystery' );
2015-01-09 05:43:23 +01:00
}
switch ( $args [ 'default' ] ) {
case 'mm' :
case 'mystery' :
case 'mysteryman' :
$args [ 'default' ] = 'mm' ;
break ;
case 'gravatar_default' :
$args [ 'default' ] = false ;
break ;
}
$args [ 'force_default' ] = ( bool ) $args [ 'force_default' ];
$args [ 'rating' ] = strtolower ( $args [ 'rating' ] );
$args [ 'found_avatar' ] = false ;
/**
* Filter whether to retrieve the avatar URL early .
*
* Passing a non - null value in the 'url' member of the return array will
2015-04-05 18:04:28 +02:00
* effectively short circuit get_avatar_data (), passing the value through
* the { @ see 'get_avatar_data' } filter and returning early .
2015-01-09 05:43:23 +01:00
*
* @ since 4.2 . 0
*
2015-09-03 20:17:24 +02:00
* @ param array $args Arguments passed to get_avatar_data (), after processing .
* @ param mixed $id_or_email The Gravatar to retrieve . Accepts a user_id , gravatar md5 hash ,
* user email , WP_User object , WP_Post object , or WP_Comment object .
2015-01-09 05:43:23 +01:00
*/
$args = apply_filters ( 'pre_get_avatar_data' , $args , $id_or_email );
if ( isset ( $args [ 'url' ] ) && ! is_null ( $args [ 'url' ] ) ) {
2015-02-19 15:59:26 +01:00
/** This filter is documented in wp-includes/link-template.php */
2015-01-09 05:43:23 +01:00
return apply_filters ( 'get_avatar_data' , $args , $id_or_email );
}
$email_hash = '' ;
$user = $email = false ;
2015-09-15 03:34:25 +02:00
if ( is_object ( $id_or_email ) && isset ( $id_or_email -> comment_ID ) ) {
$id_or_email = get_comment ( $id_or_email );
}
2015-01-09 05:43:23 +01:00
// Process the user identifier.
if ( is_numeric ( $id_or_email ) ) {
$user = get_user_by ( 'id' , absint ( $id_or_email ) );
} elseif ( is_string ( $id_or_email ) ) {
if ( strpos ( $id_or_email , '@md5.gravatar.com' ) ) {
// md5 hash
list ( $email_hash ) = explode ( '@' , $id_or_email );
} else {
// email address
$email = $id_or_email ;
}
} elseif ( $id_or_email instanceof WP_User ) {
// User Object
$user = $id_or_email ;
} elseif ( $id_or_email instanceof WP_Post ) {
// Post Object
$user = get_user_by ( 'id' , ( int ) $id_or_email -> post_author );
2015-09-03 20:17:24 +02:00
} elseif ( $id_or_email instanceof WP_Comment ) {
2015-01-09 05:43:23 +01:00
/**
* Filter the list of allowed comment types for retrieving avatars .
*
* @ since 3.0 . 0
*
* @ param array $types An array of content types . Default only contains 'comment' .
*/
$allowed_comment_types = apply_filters ( 'get_avatar_comment_types' , array ( 'comment' ) );
if ( ! empty ( $id_or_email -> comment_type ) && ! in_array ( $id_or_email -> comment_type , ( array ) $allowed_comment_types ) ) {
$args [ 'url' ] = false ;
2015-02-19 15:59:26 +01:00
/** This filter is documented in wp-includes/link-template.php */
2015-01-09 05:43:23 +01:00
return apply_filters ( 'get_avatar_data' , $args , $id_or_email );
}
if ( ! empty ( $id_or_email -> user_id ) ) {
$user = get_user_by ( 'id' , ( int ) $id_or_email -> user_id );
}
if ( ( ! $user || is_wp_error ( $user ) ) && ! empty ( $id_or_email -> comment_author_email ) ) {
$email = $id_or_email -> comment_author_email ;
}
}
if ( ! $email_hash ) {
if ( $user ) {
$email = $user -> user_email ;
}
if ( $email ) {
$email_hash = md5 ( strtolower ( trim ( $email ) ) );
}
}
if ( $email_hash ) {
$args [ 'found_avatar' ] = true ;
$gravatar_server = hexdec ( $email_hash [ 0 ] ) % 3 ;
} else {
$gravatar_server = rand ( 0 , 2 );
}
$url_args = array (
's' => $args [ 'size' ],
'd' => $args [ 'default' ],
'f' => $args [ 'force_default' ] ? 'y' : false ,
'r' => $args [ 'rating' ],
);
2015-06-18 20:36:25 +02:00
if ( is_ssl () ) {
$url = 'https://secure.gravatar.com/avatar/' . $email_hash ;
} else {
$url = sprintf ( 'http://%d.gravatar.com/avatar/%s' , $gravatar_server , $email_hash );
}
2015-01-09 05:43:23 +01:00
$url = add_query_arg (
rawurlencode_deep ( array_filter ( $url_args ) ),
set_url_scheme ( $url , $args [ 'scheme' ] )
);
/**
* Filter the avatar URL .
*
* @ since 4.2 . 0
*
2015-09-03 20:17:24 +02:00
* @ param string $url The URL of the avatar .
* @ param mixed $id_or_email The Gravatar to retrieve . Accepts a user_id , gravatar md5 hash ,
* user email , WP_User object , WP_Post object , or WP_Comment object .
* @ param array $args Arguments passed to get_avatar_data (), after processing .
2015-01-09 05:43:23 +01:00
*/
$args [ 'url' ] = apply_filters ( 'get_avatar_url' , $url , $id_or_email , $args );
/**
* Filter the avatar data .
*
* @ since 4.2 . 0
*
2015-09-03 20:17:24 +02:00
* @ param array $args Arguments passed to get_avatar_data (), after processing .
* @ param mixed $id_or_email The Gravatar to retrieve . Accepts a user_id , gravatar md5 hash ,
* user email , WP_User object , WP_Post object , or WP_Comment object .
2015-01-09 05:43:23 +01:00
*/
2015-01-12 01:20:24 +01:00
return apply_filters ( 'get_avatar_data' , $args , $id_or_email );
2015-01-09 05:43:23 +01:00
}