diff options
Diffstat (limited to 'wp-includes/post-template.php')
-rw-r--r-- | wp-includes/post-template.php | 444 |
1 files changed, 444 insertions, 0 deletions
diff --git a/wp-includes/post-template.php b/wp-includes/post-template.php new file mode 100644 index 0000000..1c18980 --- /dev/null +++ b/wp-includes/post-template.php @@ -0,0 +1,444 @@ +<?php + +// +// "The Loop" post functions +// + +function the_ID() { + global $id; + echo $id; +} + + +function get_the_ID() { + global $id; + return $id; +} + + +function the_title($before = '', $after = '', $echo = true) { + $title = get_the_title(); + if ( strlen($title) > 0 ) { + $title = apply_filters('the_title', $before . $title . $after, $before, $after); + if ( $echo ) + echo $title; + else + return $title; + } +} + + +function get_the_title($id = 0) { + $post = &get_post($id); + + $title = $post->post_title; + if ( !empty($post->post_password) ) + $title = sprintf(__('Protected: %s'), $title); + + return $title; +} + +function the_guid( $id = 0 ) { + echo get_the_guid($id); +} + +function get_the_guid( $id = 0 ) { + $post = &get_post($id); + + return apply_filters('get_the_guid', $post->guid); +} + +function the_content($more_link_text = '(more...)', $stripteaser = 0, $more_file = '') { + $content = get_the_content($more_link_text, $stripteaser, $more_file); + $content = apply_filters('the_content', $content); + $content = str_replace(']]>', ']]>', $content); + echo $content; +} + + +function get_the_content($more_link_text = '(more...)', $stripteaser = 0, $more_file = '') { + global $id, $post, $more, $single, $withcomments, $page, $pages, $multipage, $numpages; + global $preview; + global $pagenow; + $output = ''; + + if ( !empty($post->post_password) ) { // if there's a password + if ( stripslashes($_COOKIE['wp-postpass_'.COOKIEHASH]) != $post->post_password ) { // and it doesn't match the cookie + $output = get_the_password_form(); + return $output; + } + } + + if ( $more_file != '' ) + $file = $more_file; + else + $file = $pagenow; //$_SERVER['PHP_SELF']; + + $content = $pages[$page-1]; + $content = explode('<!--more-->', $content, 2); + if ( (false !== strpos($post->post_content, '<!--noteaser-->') && ((!$multipage) || ($page==1))) ) + $stripteaser = 1; + $teaser = $content[0]; + if ( ($more) && ($stripteaser) ) + $teaser = ''; + $output .= $teaser; + if ( count($content) > 1 ) { + if ( $more ) + $output .= '<a id="more-'.$id.'"></a>'.$content[1]; + else + $output = balanceTags($output . ' <a href="'. get_permalink() . "#more-$id\">$more_link_text</a>"); + } + if ( $preview ) // preview fix for javascript bug with foreign languages + $output = preg_replace('/\%u([0-9A-F]{4,4})/e', "'&#'.base_convert('\\1',16,10).';'", $output); + + return $output; +} + + +function the_excerpt() { + echo apply_filters('the_excerpt', get_the_excerpt()); +} + + +function get_the_excerpt($fakeit = true) { + global $id, $post; + $output = ''; + $output = $post->post_excerpt; + if ( !empty($post->post_password) ) { // if there's a password + if ( $_COOKIE['wp-postpass_'.COOKIEHASH] != $post->post_password ) { // and it doesn't match the cookie + $output = __('There is no excerpt because this is a protected post.'); + return $output; + } + } + + return apply_filters('get_the_excerpt', $output); +} + + +function wp_link_pages($args = '') { + parse_str($args, $r); + if ( !isset($r['before']) ) + $r['before'] = '<p>' . __('Pages:'); + if ( !isset($r['after']) ) + $r['after'] = '</p>'; + if ( !isset($r['next_or_number']) ) + $r['next_or_number'] = 'number'; + if ( !isset($r['nextpagelink']) ) + $r['nextpagelink'] = 'Next page'; + if ( !isset($r['previouspagelink']) ) + $r['previouspagelink'] = 'Previous page'; + if ( !isset($r['pagelink']) ) + $r['pagelink'] = '%'; + if ( !isset($r['more_file']) ) + $r['more_file'] = ''; + + link_pages($r['before'], $r['after'], $r['next_or_number'], $r['nextpagelink'], $r['previouspagelink'], $r['pagelink'], $r['more_file']); +} + + +function link_pages($before='<br />', $after='<br />', $next_or_number='number', $nextpagelink='next page', $previouspagelink='previous page', $pagelink='%', $more_file='') { + global $id, $page, $numpages, $multipage, $more, $pagenow; + if ( $more_file != '' ) + $file = $more_file; + else + $file = $pagenow; + if ( $multipage ) { + if ( 'number' == $next_or_number ) { + echo $before; + for ( $i = 1; $i < ($numpages+1); $i = $i + 1 ) { + $j = str_replace('%',"$i",$pagelink); + echo ' '; + if ( ($i != $page) || ((!$more) && ($page==1)) ) { + if ( '' == get_settings('permalink_structure') ) + echo '<a href="' . get_permalink() . '&page=' . $i . '">'; + else + echo '<a href="' . trailingslashit( get_permalink() ) . $i . '/">'; + } + echo $j; + if ( ($i != $page) || ((!$more) && ($page==1)) ) + echo '</a>'; + } + echo $after; + } else { + if ( $more ) { + echo $before; + $i = $page - 1; + if ( $i && $more ) { + if ( '' == get_settings('permalink_structure') ) + echo '<a href="' . get_permalink() . '&page=' . $i . '">'.$previouspagelink.'</a>'; + else + echo '<a href="' . get_permalink() . $i . '/">'.$previouspagelink.'</a>'; + } + $i = $page + 1; + if ( $i <= $numpages && $more ) { + if ( '' == get_settings('permalink_structure') ) + echo '<a href="'.get_permalink() . '&page=' . $i . '">'.$nextpagelink.'</a>'; + else + echo '<a href="'.get_permalink().$i.'/">'.$nextpagelink.'</a>'; + } + echo $after; + } + } + } +} + + +// +// Post-meta: Custom per-post fields. +// + + +function post_custom( $key = '' ) { + $custom = get_post_custom(); + + if ( 1 == count($custom[$key]) ) + return $custom[$key][0]; + else + return $custom[$key]; +} + + +// this will probably change at some point... +function the_meta() { + global $id, $post_meta_cache; + + if ( $keys = get_post_custom_keys() ) { + echo "<ul class='post-meta'>\n"; + foreach ( $keys as $key ) { + $keyt = trim($key); + if ( '_' == $keyt{0} ) + continue; + $values = array_map('trim', get_post_custom_values($key)); + $value = implode($values,', '); + echo "<li><span class='post-meta-key'>$key:</span> $value</li>\n"; + } + echo "</ul>\n"; + } +} + + +// +// Pages +// + +function wp_dropdown_pages($args = '') { + if ( is_array($args) ) + $r = &$args; + else + parse_str($args, $r); + + $defaults = array('depth' => 0, 'child_of' => 0, 'selected' => 0, 'echo' => 1, + 'name' => 'page_id', 'show_option_none' => ''); + $r = array_merge($defaults, $r); + extract($r); + + $pages = get_pages($r); + $output = ''; + + if ( ! empty($pages) ) { + $output = "<select name='$name'>\n"; + if ( $show_option_none ) + $output .= "\t<option value=''>$show_option_none</option>\n"; + $output .= walk_page_dropdown_tree($pages, $depth, $r); + $output .= "</select>\n"; + } + + $output = apply_filters('wp_dropdown_pages', $output); + + if ( $echo ) + echo $output; + + return $output; +} + +function wp_list_pages($args = '') { + if ( is_array($args) ) + $r = &$args; + else + parse_str($args, $r); + + $defaults = array('depth' => 0, 'show_date' => '', 'date_format' => get_settings('date_format'), + 'child_of' => 0, 'title_li' => __('Pages'), 'echo' => 1); + $r = array_merge($defaults, $r); + + $output = ''; + + // Query pages. + $pages = get_pages($r); + + if ( !empty($pages) ) { + if ( $r['title_li'] ) + $output .= '<li class="pagenav">' . $r['title_li'] . '<ul>'; + + global $wp_query; + $current_page = $wp_query->get_queried_object_id(); + $output .= walk_page_tree($pages, $r['depth'], $current_page, $r['show_date'], $r['date_format']); + + if ( $r['title_li'] ) + $output .= '</ul></li>'; + } + + $output = apply_filters('wp_list_pages', $output); + + if ( $r['echo'] ) + echo $output; + else + return $output; +} + +// +// Page helpers +// + +function walk_page_tree() { + $walker = new Walker_Page; + $args = func_get_args(); + return call_user_func_array(array(&$walker, 'walk'), $args); +} + +function walk_page_dropdown_tree() { + $walker = new Walker_PageDropdown; + $args = func_get_args(); + return call_user_func_array(array(&$walker, 'walk'), $args); +} + +// +// Attachments +// + +function the_attachment_link($id = 0, $fullsize = false, $max_dims = false) { + echo get_the_attachment_link($id, $fullsize, $max_dims); +} + +function get_the_attachment_link($id = 0, $fullsize = false, $max_dims = false) { + $id = (int) $id; + $_post = & get_post($id); + + if ( ('attachment' != $_post->post_type) || ('' == $_post->guid) ) + return __('Missing Attachment'); + + if (! empty($_post->guid) ) { + $innerHTML = get_attachment_innerHTML($_post->ID, $fullsize, $max_dims); + + return "<a href=\"{$_post->guid}\" title=\"{$_post->post_title}\" >{$innerHTML}</a>"; + + } else { + $p .= __('Missing attachment'); + } + return $p; +} + +function get_attachment_icon($id = 0, $fullsize = false, $max_dims = false) { + $id = (int) $id; + $post = & get_post($id); + + $mime = $post->post_mime_type; + + $imagedata = get_post_meta($post->ID, '_wp_attachment_metadata', true); + + $file = get_post_meta($post->ID, '_wp_attached_file', true); + + if ( !$fullsize && !empty($imagedata['thumb']) + && ($thumbfile = str_replace(basename($file), $imagedata['thumb'], $file)) + && file_exists($thumbfile) ) { + + // We have a thumbnail desired, specified and existing + + $src = str_replace(basename($post->guid), $imagedata['thumb'], $post->guid); + $src_file = $thumbfile; + $class = 'attachmentthumb'; + + } elseif ( substr($mime, 0, 6) == 'image/' + && file_exists($file) ) { + + // We have an image without a thumbnail + + $src = $post->guid; + $src_file = & $file; + $class = 'attachmentimage'; + } elseif (! empty($mime) ) { + + // No thumb, no image. We'll look for a mime-related icon instead. + $icon_dir = apply_filters('icon_dir', get_template_directory().'/images'); + $icon_dir_uri = apply_filters('icon_dir_uri', get_template_directory_uri().'/images'); + + $types = array(substr($mime, 0, strpos($mime, '/')), substr($mime, strpos($mime, '/') + 1), str_replace('/', '_', $mime)); + $exts = array('jpg', 'gif', 'png'); + foreach ($types as $type) { + foreach ($exts as $ext) { + $src_file = "$icon_dir/$type.$ext"; + if ( file_exists($src_file) ) { + $src = "$icon_dir_uri/$type.$ext"; + break 2; + } + } + } + } + + if (! isset($src) ) + return false; + + // Do we need to constrain the image? + if ( ($max_dims = apply_filters('attachment_max_dims', $max_dims)) && file_exists($src_file) ) { + + $imagesize = getimagesize($src_file); + + if (($imagesize[0] > $max_dims[0]) || $imagesize[1] > $max_dims[1] ) { + $actual_aspect = $imagesize[0] / $imagesize[1]; + $desired_aspect = $max_dims[0] / $max_dims[1]; + + if ( $actual_aspect >= $desired_aspect ) { + $height = $actual_aspect * $max_dims[0]; + $constraint = "width=\"{$max_dims[0]}\" "; + $post->iconsize = array($max_dims[0], $height); + } else { + $width = $max_dims[1] / $actual_aspect; + $constraint = "height=\"{$max_dims[1]}\" "; + $post->iconsize = array($width, $max_dims[1]); + } + } else { + $post->iconsize = array($imagesize[0], $imagesize[1]); + } + } + + $icon = "<img src=\"{$src}\" title=\"{$post->post_title}\" alt=\"{$post->post_title}\" {$constraint}/>"; + + return apply_filters('attachment_icon', $icon, $post->ID); +} + +function get_attachment_innerHTML($id = 0, $fullsize = false, $max_dims = false) { + $id = (int) $id; + + if ( $innerHTML = get_attachment_icon($id, $fullsize, $max_dims)) + return $innerHTML; + + $post = & get_post($id); + + $innerHTML = $post->post_title; + + return apply_filters('attachment_innerHTML', $innerHTML, $post->ID); +} + +function prepend_attachment($content) { + $p = '<p class="attachment">'; + $p .= get_the_attachment_link(false, true, array(400, 300)); + $p .= '</p>'; + $p = apply_filters('prepend_attachment', $p); + + return "$p\n$content"; +} + +// +// Misc +// + +function get_the_password_form() { + $output = '<form action="' . get_settings('siteurl') . '/wp-pass.php" method="post"> + <p>' . __("This post is password protected. To view it please enter your password below:") . '</p> + <p><label>' . __("Password:") . ' <input name="post_password" type="password" size="20" /></label> <input type="submit" name="Submit" value="' . __("Submit") . '" /></p> + </form> + '; + return $output; +} + +?> |