2004-01-27 04:58:01 -05:00
< ? php
2004-04-21 00:12:55 -04:00
function the_permalink () {
echo get_permalink ();
}
2004-05-18 04:36:53 -04:00
function permalink_link () { // For backwards compatibility
echo get_permalink ();
}
2004-01-27 04:58:01 -05:00
function permalink_anchor ( $mode = 'id' ) {
global $id , $post ;
switch ( strtolower ( $mode )) {
case 'title' :
$title = sanitize_title ( $post -> post_title ) . '-' . $id ;
echo '<a id="' . $title . '"></a>' ;
break ;
case 'id' :
default :
echo '<a id="post-' . $id . '"></a>' ;
break ;
}
}
function permalink_single_rss ( $file = '' ) {
echo get_permalink ();
}
function get_permalink ( $id = false ) {
2004-05-24 04:22:18 -04:00
global $post , $wpdb ;
2004-02-26 11:15:48 -05:00
global $querystring_start , $querystring_equal ;
2004-01-27 04:58:01 -05:00
$rewritecode = array (
'%year%' ,
'%monthnum%' ,
'%day%' ,
2004-08-10 21:55:34 -04:00
'%hour%' ,
'%minute%' ,
'%second%' ,
2004-01-27 04:58:01 -05:00
'%postname%' ,
2004-06-03 22:36:46 -04:00
'%post_id%' ,
2004-08-10 01:35:59 -04:00
'%category%' ,
2004-08-14 13:29:09 -04:00
'%author%' ,
2004-08-10 01:35:59 -04:00
'%pagename%'
2004-01-27 04:58:01 -05:00
);
2004-06-03 22:36:46 -04:00
if ( $id ) {
2004-08-14 13:29:09 -04:00
$idpost = $wpdb -> get_row ( " SELECT ID, post_date, post_name, post_status, post_author FROM $wpdb->posts WHERE ID = $id " );
2004-06-03 22:36:46 -04:00
} else {
$idpost = $post ;
}
2004-08-10 01:35:59 -04:00
$permalink = get_settings ( 'permalink_structure' );
if ( '' != $permalink ) {
if ( $idpost -> post_status == 'static' ) {
$permalink = page_permastruct ();
}
2004-03-24 21:04:15 -05:00
$unixtime = strtotime ( $idpost -> post_date );
2004-06-03 22:36:46 -04:00
$cats = get_the_category ( $idpost -> ID );
$category = $cats [ 0 ] -> category_nicename ;
2004-08-14 13:29:09 -04:00
$authordata = get_userdata ( $idpost -> post_author );
$author = $authordata -> user_nicename ;
2004-06-03 22:36:46 -04:00
$rewritereplace = array (
date ( 'Y' , $unixtime ),
date ( 'm' , $unixtime ),
date ( 'd' , $unixtime ),
date ( 'H' , $unixtime ),
date ( 'i' , $unixtime ),
date ( 's' , $unixtime ),
$idpost -> post_name ,
$idpost -> ID ,
2004-08-10 01:35:59 -04:00
$category ,
2004-08-14 13:29:09 -04:00
$author ,
2004-08-10 01:35:59 -04:00
$idpost -> post_name ,
2004-06-03 22:36:46 -04:00
);
2004-08-10 01:35:59 -04:00
return get_settings ( 'home' ) . str_replace ( $rewritecode , $rewritereplace , $permalink );
2004-06-03 22:36:46 -04:00
} else { // if they're not using the fancy permalink option
2004-08-10 01:35:59 -04:00
$permalink = get_settings ( 'home' ) . '/' . get_settings ( 'blogfilename' ) . $querystring_start . 'p' . $querystring_equal . $idpost -> ID ;
if ( $idpost -> post_status == 'static' ) {
$permalink .= $querystring_separator . " static=1 " ;
}
2004-08-13 11:00:45 -04:00
return $permalink ;
2004-01-27 04:58:01 -05:00
}
}
function get_month_link ( $year , $month ) {
2004-02-26 11:15:48 -05:00
global $querystring_start , $querystring_equal ;
2004-04-24 17:52:24 -04:00
if ( ! $year ) $year = gmdate ( 'Y' , time () + ( get_settings ( 'gmt_offset' ) * 3600 ));
if ( ! $month ) $month = gmdate ( 'm' , time () + ( get_settings ( 'gmt_offset' ) * 3600 ));
2004-01-27 04:58:01 -05:00
if ( '' != get_settings ( 'permalink_structure' )) {
2004-05-31 13:22:25 -04:00
$permalink = get_settings ( 'permalink_structure' );
// If the permalink structure does not contain year and month, make
// one that does.
2004-06-05 22:02:27 -04:00
if ( ! ( strstr ( $permalink , '%year%' ) && strstr ( $permalink , '%monthnum%' ))
|| preg_match ( '/%category%.*(%year%|%monthnum%|%day%)/' , $permalink )) {
2004-05-31 13:22:25 -04:00
$front = substr ( $permalink , 0 , strpos ( $permalink , '%' ));
$permalink = $front . '%year%/%monthnum%/' ;
}
$off = strpos ( $permalink , '%monthnum%' );
2004-01-27 04:58:01 -05:00
$offset = $off + 11 ;
2004-05-31 13:22:25 -04:00
$monthlink = substr ( $permalink , 0 , $offset );
2004-01-27 04:58:01 -05:00
if ( '/' != substr ( $monthlink , - 1 )) $monthlink = substr ( $monthlink , 0 , - 1 );
$monthlink = str_replace ( '%year%' , $year , $monthlink );
$monthlink = str_replace ( '%monthnum%' , zeroise ( intval ( $month ), 2 ), $monthlink );
$monthlink = str_replace ( '%post_id%' , '' , $monthlink );
2004-06-05 22:02:27 -04:00
$monthlink = str_replace ( '%category%' , '' , $monthlink );
2004-04-28 03:27:03 -04:00
return get_settings ( 'home' ) . $monthlink ;
2004-01-27 04:58:01 -05:00
} else {
2004-04-28 03:27:03 -04:00
return get_settings ( 'home' ) . '/' . get_settings ( 'blogfilename' ) . $querystring_start . 'm' . $querystring_equal . $year . zeroise ( $month , 2 );
2004-01-27 04:58:01 -05:00
}
}
function get_day_link ( $year , $month , $day ) {
2004-02-26 11:15:48 -05:00
global $querystring_start , $querystring_equal ;
2004-04-24 17:52:24 -04:00
if ( ! $year ) $year = gmdate ( 'Y' , time () + ( get_settings ( 'gmt_offset' ) * 3600 ));
if ( ! $month ) $month = gmdate ( 'm' , time () + ( get_settings ( 'gmt_offset' ) * 3600 ));
if ( ! $day ) $day = gmdate ( 'j' , time () + ( get_settings ( 'gmt_offset' ) * 3600 ));
2004-01-27 04:58:01 -05:00
if ( '' != get_settings ( 'permalink_structure' )) {
2004-05-31 13:22:25 -04:00
$permalink = get_settings ( 'permalink_structure' );
// If the permalink structure does not contain year, month, and day,
// make one that does.
2004-06-05 22:02:27 -04:00
if ( ! ( strstr ( $permalink , '%year%' ) && strstr ( $permalink , '%monthnum%' ) && strstr ( $permalink , '%day%' ))
|| preg_match ( '/%category%.*(%year%|%monthnum%|%day%)/' , $permalink )) {
2004-05-31 13:22:25 -04:00
$front = substr ( $permalink , 0 , strpos ( $permalink , '%' ));
$permalink = $front . '%year%/%monthnum%/%day%/' ;
}
$off = strpos ( $permalink , '%day%' );
2004-01-27 04:58:01 -05:00
$offset = $off + 6 ;
2004-05-31 13:22:25 -04:00
$daylink = substr ( $permalink , 0 , $offset );
2004-01-27 04:58:01 -05:00
if ( '/' != substr ( $daylink , - 1 )) $daylink = substr ( $daylink , 0 , - 1 );
$daylink = str_replace ( '%year%' , $year , $daylink );
$daylink = str_replace ( '%monthnum%' , zeroise ( intval ( $month ), 2 ), $daylink );
$daylink = str_replace ( '%day%' , zeroise ( intval ( $day ), 2 ), $daylink );
$daylink = str_replace ( '%post_id%' , '' , $daylink );
2004-06-05 22:02:27 -04:00
$daylink = str_replace ( '%category%' , '' , $daylink );
2004-04-28 03:27:03 -04:00
return get_settings ( 'home' ) . $daylink ;
2004-01-27 04:58:01 -05:00
} else {
2004-04-28 03:27:03 -04:00
return get_settings ( 'home' ) . '/' . get_settings ( 'blogfilename' ) . $querystring_start . 'm' . $querystring_equal . $year . zeroise ( $month , 2 ) . zeroise ( $day , 2 );
2004-01-27 04:58:01 -05:00
}
2004-06-02 03:14:03 -04:00
}
function get_feed_link ( $feed = 'rss2' ) {
$do_perma = 0 ;
$feed_url = get_settings ( 'siteurl' );
$comment_feed_url = $feed_url ;
$permalink = get_settings ( 'permalink_structure' );
if ( '' != $permalink ) {
$do_perma = 1 ;
$feed_url = get_settings ( 'home' );
$index = get_settings ( 'blogfilename' );
$prefix = '' ;
if ( preg_match ( '#^/*' . $index . '#' , $permalink )) {
$feed_url .= '/' . $index ;
}
$comment_feed_url = $feed_url ;
$feed_url .= '/feed' ;
$comment_feed_url .= '/comments/feed' ;
}
switch ( $feed ) {
case 'rdf' :
$output = $feed_url . '/wp-rdf.php' ;
if ( $do_perma ) {
$output = $feed_url . '/rdf/' ;
}
break ;
case 'rss' :
$output = $feed_url . '/wp-rss.php' ;
if ( $do_perma ) {
$output = $feed_url . '/rss/' ;
}
break ;
case 'atom' :
$output = $feed_url . '/wp-atom.php' ;
if ( $do_perma ) {
$output = $feed_url . '/atom/' ;
}
break ;
case 'comments_rss2' :
$output = $feed_url . '/wp-commentsrss2.php' ;
if ( $do_perma ) {
$output = $comment_feed_url . '/rss2/' ;
}
break ;
case 'rss2' :
default :
$output = $feed_url . '/wp-rss2.php' ;
if ( $do_perma ) {
$output = $feed_url . '/rss2/' ;
}
break ;
}
return $output ;
2004-01-27 04:58:01 -05:00
}
function edit_post_link ( $link = 'Edit This' , $before = '' , $after = '' ) {
2004-02-26 11:15:48 -05:00
global $user_level , $post ;
2004-01-27 04:58:01 -05:00
get_currentuserinfo ();
if ( $user_level > 0 ) {
$authordata = get_userdata ( $post -> post_author );
if ( $user_level < $authordata -> user_level ) {
return ;
}
} else {
return ;
}
2004-02-26 11:15:48 -05:00
$location = get_settings ( 'siteurl' ) . " /wp-admin/post.php?action=edit&post= $post->ID " ;
2004-02-19 20:53:41 -05:00
echo " $before <a href= \" $location\ " > $link </ a > $after " ;
2004-01-27 04:58:01 -05:00
}
function edit_comment_link ( $link = 'Edit This' , $before = '' , $after = '' ) {
2004-02-26 11:15:48 -05:00
global $user_level , $post , $comment ;
2004-01-27 04:58:01 -05:00
get_currentuserinfo ();
if ( $user_level > 0 ) {
$authordata = get_userdata ( $post -> post_author );
if ( $user_level < $authordata -> user_level ) {
return ;
}
} else {
return ;
}
2004-02-26 11:15:48 -05:00
$location = get_settings ( 'siteurl' ) . " /wp-admin/post.php?action=editcomment&comment= $comment->comment_ID " ;
2004-05-09 01:47:02 -04:00
echo " $before <a href=' $location '> $link </a> $after " ;
2004-01-27 04:58:01 -05:00
}
2004-06-02 03:44:43 -04:00
// Navigation links
function previous_post ( $format = '%' , $previous = 'previous post: ' , $title = 'yes' , $in_same_cat = 'no' , $limitprev = 1 , $excluded_categories = '' ) {
global $id , $post , $wpdb ;
global $p , $posts , $posts_per_page , $s , $single ;
global $querystring_start , $querystring_equal , $querystring_separator ;
if (( $p ) || ( $posts_per_page == 1 ) || 1 == $single ) {
$current_post_date = $post -> post_date ;
$current_category = $post -> post_category ;
$sqlcat = '' ;
if ( $in_same_cat != 'no' ) {
$sqlcat = " AND post_category = ' $current_category ' " ;
}
$sql_exclude_cats = '' ;
if ( ! empty ( $excluded_categories )) {
$blah = explode ( 'and' , $excluded_categories );
foreach ( $blah as $category ) {
$category = intval ( $category );
$sql_exclude_cats .= " AND post_category != $category " ;
}
}
$limitprev -- ;
$lastpost = @ $wpdb -> get_row ( " SELECT ID, post_title FROM $wpdb->posts WHERE post_date < ' $current_post_date ' AND post_status = 'publish' $sqlcat $sql_exclude_cats ORDER BY post_date DESC LIMIT $limitprev , 1 " );
if ( $lastpost ) {
$string = '<a href="' . get_permalink ( $lastpost -> ID ) . '">' . $previous ;
if ( $title == 'yes' ) {
2004-06-17 20:22:09 -04:00
$string .= wptexturize ( $lastpost -> post_title );
2004-06-02 03:44:43 -04:00
}
$string .= '</a>' ;
$format = str_replace ( '%' , $string , $format );
echo $format ;
}
}
}
function next_post ( $format = '%' , $next = 'next post: ' , $title = 'yes' , $in_same_cat = 'no' , $limitnext = 1 , $excluded_categories = '' ) {
global $posts_per_page , $post , $wpdb , $single ;
if ( 1 == $posts_per_page || 1 == $single ) {
$current_post_date = $post -> post_date ;
$current_category = $post -> post_category ;
$sqlcat = '' ;
if ( $in_same_cat != 'no' ) {
$sqlcat = " AND post_category=' $current_category ' " ;
}
$sql_exclude_cats = '' ;
if ( ! empty ( $excluded_categories )) {
$blah = explode ( 'and' , $excluded_categories );
foreach ( $blah as $category ) {
$category = intval ( $category );
$sql_exclude_cats .= " AND post_category != $category " ;
}
}
$now = current_time ( 'mysql' );
$limitnext -- ;
$nextpost = @ $wpdb -> get_row ( " SELECT ID,post_title FROM $wpdb->posts WHERE post_date > ' $current_post_date ' AND post_date < ' $now ' AND post_status = 'publish' $sqlcat $sql_exclude_cats AND ID != $post->ID ORDER BY post_date ASC LIMIT $limitnext ,1 " );
if ( $nextpost ) {
$string = '<a href="' . get_permalink ( $nextpost -> ID ) . '">' . $next ;
if ( $title == 'yes' ) {
2004-06-17 20:22:09 -04:00
$string .= wptexturize ( $nextpost -> post_title );
2004-06-02 03:44:43 -04:00
}
$string .= '</a>' ;
$format = str_replace ( '%' , $string , $format );
echo $format ;
}
}
}
function get_pagenum_link ( $pagenum = 1 ){
$qstr = $_SERVER [ 'REQUEST_URI' ];
$page_querystring = " paged " ;
$page_modstring = " page/ " ;
$page_modregex = " page/? " ;
2004-06-08 13:48:21 -04:00
$permalink = 0 ;
2004-06-02 03:44:43 -04:00
// if we already have a QUERY style page string
if ( stristr ( $qstr , $page_querystring ) ) {
$replacement = " $page_querystring = $pagenum " ;
$qstr = preg_replace ( " / " . $page_querystring . " [^ \ d]+ \ d+/ " , $replacement , $qstr );
// if we already have a mod_rewrite style page string
} elseif ( preg_match ( '|' . $page_modregex . '\d+|' , $qstr ) ){
2004-06-08 13:48:21 -04:00
$permalink = 1 ;
2004-06-02 03:44:43 -04:00
$qstr = preg_replace ( '|' . $page_modregex . '\d+|' , " $page_modstring $pagenum " , $qstr );
// if we don't have a page string at all ...
// lets see what sort of URL we have...
} else {
// we need to know the way queries are being written
global $querystring_start , $querystring_equal , $querystring_separator ;
// if there's a querystring_start (a "?" usually), it's deffinitely not mod_rewritten
if ( stristr ( $qstr , $querystring_start ) ){
// so append the query string (using &, since we already have ?)
$qstr .= $querystring_separator . $page_querystring . $querystring_equal . $pagenum ;
// otherwise, it could be rewritten, OR just the default index ...
} elseif ( '' != get_settings ( 'permalink_structure' )) {
2004-06-08 13:48:21 -04:00
$permalink = 1 ;
2004-08-07 14:12:54 -04:00
// If it's not a path info permalink structure, trim the index.
if ( ! preg_match ( '#^/*' . get_settings ( 'blogfilename' ) . '#' , get_settings ( 'permalink_structure' ))) {
$qstr = preg_replace ( " #/* " . get_settings ( 'blogfilename' ) . " /*# " , '/' , $qstr );
}
$qstr = trailingslashit ( $qstr ) . $page_modstring . $pagenum ;
2004-06-02 03:44:43 -04:00
} else {
$qstr = get_settings ( 'blogfilename' ) . $querystring_start . $page_querystring . $querystring_equal . $pagenum ;
}
}
$home_root = str_replace ( 'http://' , '' , trim ( get_settings ( 'home' )));
2004-06-07 00:41:06 -04:00
$home_root = preg_replace ( '|([^/]*)(.*)|i' , '$2' , $home_root );
2004-06-02 03:44:43 -04:00
$home_root = preg_replace ( '|/+|i' , '/' , $home_root );
2004-06-07 00:41:06 -04:00
$home_root = trailingslashit ( $home_root );
$qstr = preg_replace ( '|^' . $home_root . '|' , '' , $qstr );
2004-06-02 03:44:43 -04:00
$qstr = preg_replace ( '|^/+|' , '' , $qstr );
2004-06-08 13:48:21 -04:00
if ( $permalink ) $qstr = trailingslashit ( $qstr );
2004-06-07 00:41:06 -04:00
return preg_replace ( '/&([^#])(?![a-z]{1,8};)/' , '&$1' , trailingslashit ( get_settings ( 'home' ) ) . $qstr );
2004-06-02 03:44:43 -04:00
}
function next_posts ( $max_page = 0 ) { // original by cfactor at cooltux.org
2004-07-28 23:34:08 -04:00
global $paged , $pagenow ;
2004-06-02 03:44:43 -04:00
global $querystring_start , $querystring_equal , $querystring_separator ;
2004-07-28 23:34:08 -04:00
if ( ! is_single ()) {
2004-06-02 03:44:43 -04:00
if ( ! $paged ) $paged = 1 ;
$nextpage = intval ( $paged ) + 1 ;
if ( ! $max_page || $max_page >= $nextpage ) {
echo get_pagenum_link ( $nextpage );
}
}
}
function next_posts_link ( $label = 'Next Page »' , $max_page = 0 ) {
2004-07-28 23:34:08 -04:00
global $paged , $result , $request , $posts_per_page , $wpdb ;
if ( ! $max_page ) {
$nxt_request = $request ;
//if the query includes a limit clause, call it again without that
//limit clause!
if ( $pos = strpos ( strtoupper ( $request ), 'LIMIT' )) {
$nxt_request = substr ( $request , 0 , $pos );
2004-06-02 03:44:43 -04:00
}
2004-07-28 23:34:08 -04:00
$nxt_result = $wpdb -> query ( $nxt_request );
$numposts = $wpdb -> num_rows ;
$max_page = ceil ( $numposts / $posts_per_page );
}
if ( ! $paged )
$paged = 1 ;
$nextpage = intval ( $paged ) + 1 ;
if (( ! is_single ()) && ( empty ( $paged ) || $nextpage <= $max_page )) {
echo '<a href="' ;
next_posts ( $max_page );
echo '">' . preg_replace ( '/&([^#])(?![a-z]{1,8};)/' , '&$1' , $label ) . '</a>' ;
2004-06-02 03:44:43 -04:00
}
}
function previous_posts () { // original by cfactor at cooltux.org
2004-07-28 23:34:08 -04:00
global $_SERVER , $paged , $pagenow ;
2004-06-02 03:44:43 -04:00
global $querystring_start , $querystring_equal , $querystring_separator ;
2004-07-28 23:34:08 -04:00
if ( ! is_single ()) {
2004-06-02 03:44:43 -04:00
$nextpage = intval ( $paged ) - 1 ;
if ( $nextpage < 1 ) $nextpage = 1 ;
echo get_pagenum_link ( $nextpage );
}
}
function previous_posts_link ( $label = '« Previous Page' ) {
2004-07-28 23:34:08 -04:00
global $paged ;
if (( ! is_single ()) && ( $paged > 1 ) ) {
2004-06-02 03:44:43 -04:00
echo '<a href="' ;
previous_posts ();
echo '">' . preg_replace ( '/&([^#])(?![a-z]{1,8};)/' , '&$1' , $label ) . '</a>' ;
}
}
function posts_nav_link ( $sep = ' — ' , $prelabel = '« Previous Page' , $nxtlabel = 'Next Page »' ) {
2004-07-28 23:34:08 -04:00
global $request , $posts_per_page , $wpdb ;
if ( ! is_single ()) {
2004-06-02 03:44:43 -04:00
$nxt_request = $request ;
if ( $pos = strpos ( strtoupper ( $request ), 'LIMIT' )) {
$nxt_request = substr ( $request , 0 , $pos );
}
$nxt_result = $wpdb -> query ( $nxt_request );
$numposts = $wpdb -> num_rows ;
$max_page = ceil ( $numposts / $posts_per_page );
if ( $max_page > 1 ) {
previous_posts_link ( $prelabel );
echo preg_replace ( '/&([^#])(?![a-z]{1,8};)/' , '&$1' , $sep );
next_posts_link ( $nxtlabel , $max_page );
}
}
}
2004-01-27 04:58:01 -05:00
?>