\n";
$menu = apply_filters( 'wp_page_menu', $menu );
if ( $args['echo'] )
echo $menu;
else
return $menu;
}
//
// Page helpers
//
/**
* Retrieve HTML list content for page list.
*
* @uses Walker_Page to create HTML list content.
* @since 2.1.0
* @see Walker_Page::walk() for parameters and return description.
*/
function walk_page_tree() {
$walker = new Walker_Page;
$args = func_get_args();
return call_user_func_array(array(&$walker, 'walk'), $args);
}
/**
* Retrieve HTML dropdown (select) content for page list.
*
* @uses Walker_PageDropdown to create HTML dropdown content.
* @since 2.1.0
* @see Walker_PageDropdown::walk() for parameters and return description.
*/
function walk_page_dropdown_tree() {
$walker = new Walker_PageDropdown;
$args = func_get_args();
return call_user_func_array(array(&$walker, 'walk'), $args);
}
//
// Attachments
//
/**
* {@internal Missing Short Description}}
*
* {@internal Missing Long Description}}
*
* @since 2.0.0
*
* @param unknown_type $id
* @param unknown_type $fullsize
* @param unknown_type $max_dims
*/
function the_attachment_link($id = 0, $fullsize = false, $deprecated = false, $permalink = false) {
if ( $fullsize )
echo wp_get_attachment_link($id, 'full', $permalink);
else
echo wp_get_attachment_link($id, 'thumbnail', $permalink);
}
/**
* Retrieve an attachment page link using an image or icon, if possible.
*
* {@internal Missing Long Description}}
*
* @since unknown
*
* @param unknown_type $id
* @param unknown_type $size
* @param unknown_type $permalink
* @param unknown_type $icon
* @return unknown
*/
function wp_get_attachment_link($id = 0, $size = 'thumbnail', $permalink = false, $icon = false) {
$id = intval($id);
$_post = & get_post( $id );
if ( ('attachment' != $_post->post_type) || !$url = wp_get_attachment_url($_post->ID) )
return __('Missing Attachment');
if ( $permalink )
$url = get_attachment_link($_post->ID);
$post_title = attribute_escape($_post->post_title);
$link_text = wp_get_attachment_image($id, $size, $icon);
if ( !$link_text )
$link_text = $_post->post_title;
return apply_filters( 'wp_get_attachment_link', "$link_text", $id, $size, $permalink, $icon );
}
/**
* {@internal Missing Short Description}}
*
* {@internal Missing Long Description}}
*
* @since unknown
* @deprecated Use {@link wp_get_attachment_link()}
* @see wp_get_attachment_link() Use instead.
*
* @param unknown_type $id
* @param unknown_type $fullsize
* @param unknown_type $max_dims
* @param unknown_type $permalink
* @return unknown
*/
function get_the_attachment_link($id = 0, $fullsize = false, $max_dims = false, $permalink = false) {
$id = (int) $id;
$_post = & get_post($id);
if ( ('attachment' != $_post->post_type) || !$url = wp_get_attachment_url($_post->ID) )
return __('Missing Attachment');
if ( $permalink )
$url = get_attachment_link($_post->ID);
$post_title = attribute_escape($_post->post_title);
$innerHTML = get_attachment_innerHTML($_post->ID, $fullsize, $max_dims);
return "$innerHTML";
}
/**
* {@internal Missing Short Description}}
*
* {@internal Missing Long Description}}
*
* @since 2.1.0
* @deprecated Use {@link wp_get_attachment_image_src()}
* @see wp_get_attachment_image_src() Use instead.
*
* @param unknown_type $id
* @param unknown_type $fullsize
* @return unknown
*/
function get_attachment_icon_src( $id = 0, $fullsize = false ) {
$id = (int) $id;
if ( !$post = & get_post($id) )
return false;
$file = get_attached_file( $post->ID );
if ( !$fullsize && $src = wp_get_attachment_thumb_url( $post->ID ) ) {
// We have a thumbnail desired, specified and existing
$src_file = basename($src);
$class = 'attachmentthumb';
} elseif ( wp_attachment_is_image( $post->ID ) ) {
// We have an image without a thumbnail
$src = wp_get_attachment_url( $post->ID );
$src_file = & $file;
$class = 'attachmentimage';
} elseif ( $src = wp_mime_type_icon( $post->ID ) ) {
// No thumb, no image. We'll look for a mime-related icon instead.
$icon_dir = apply_filters( 'icon_dir', get_template_directory() . '/images' );
$src_file = $icon_dir . '/' . basename($src);
}
if ( !isset($src) || !$src )
return false;
return array($src, $src_file);
}
/**
* {@internal Missing Short Description}}
*
* {@internal Missing Long Description}}
*
* @since 2.0.0
* @deprecated Use {@link wp_get_attachment_image()}
* @see wp_get_attachment_image() Use instead of.
*
* @param unknown_type $id
* @param unknown_type $fullsize
* @param unknown_type $max_dims
* @return unknown
*/
function get_attachment_icon( $id = 0, $fullsize = false, $max_dims = false ) {
$id = (int) $id;
if ( !$post = & get_post($id) )
return false;
if ( !$src = get_attachment_icon_src( $post->ID, $fullsize ) )
return false;
list($src, $src_file) = $src;
// 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]);
$constraint = '';
}
} else {
$constraint = '';
}
$post_title = attribute_escape($post->post_title);
$icon = "";
return apply_filters( 'attachment_icon', $icon, $post->ID );
}
/**
* {@internal Missing Short Description}}
*
* {@internal Missing Long Description}}
*
* @since 2.0.0
* @deprecated Use {@link wp_get_attachment_image()}
* @see wp_get_attachment_image() Use instead.
*
* @param unknown_type $id
* @param unknown_type $fullsize
* @param unknown_type $max_dims
* @return unknown
*/
function get_attachment_innerHTML($id = 0, $fullsize = false, $max_dims = false) {
$id = (int) $id;
if ( !$post = & get_post($id) )
return false;
if ( $innerHTML = get_attachment_icon($post->ID, $fullsize, $max_dims))
return $innerHTML;
$innerHTML = attribute_escape($post->post_title);
return apply_filters('attachment_innerHTML', $innerHTML, $post->ID);
}
/**
* {@internal Missing Short Description}}
*
* {@internal Missing Long Description}}
*
* @since 2.0.0
*
* @param unknown_type $content
* @return unknown
*/
function prepend_attachment($content) {
global $post;
if ( empty($post->post_type) || $post->post_type != 'attachment' )
return $content;
$p = '
';
// show the medium sized image representation of the attachment if available, and link to the raw file
$p .= wp_get_attachment_link(0, 'medium', false);
$p .= '
';
$p = apply_filters('prepend_attachment', $p);
return "$p\n$content";
}
//
// Misc
//
/**
* Retrieve protected post password form content.
*
* @since 1.0.0
* @uses apply_filters() Calls 'the_password_form' filter on output.
*
* @return string HTML content for password form for password protected post.
*/
function get_the_password_form() {
global $post;
$label = 'pwbox-'.(empty($post->ID) ? rand() : $post->ID);
$output = '
';
return apply_filters('the_password_form', $output);
}
/**
* Whether currently in a page template.
*
* This template tag allows you to determine whether or not you are in a page
* template. You can optional provide a template name and then the check will be
* specific to that template.
*
* @since 2.5.0
* @uses $wp_query
*
* @param string $template The specific template name if specific matching is required.
* @return bool False on failure, true if success.
*/
function is_page_template($template = '') {
if (!is_page()) {
return false;
}
global $wp_query;
$page = $wp_query->get_queried_object();
$custom_fields = get_post_custom_values('_wp_page_template',$page->ID);
$page_template = $custom_fields[0];
// We have no argument passed so just see if a page_template has been specified
if ( empty( $template ) ) {
if (!empty( $page_template ) ) {
return true;
}
} elseif ( $template == $page_template) {
return true;
}
return false;
}
/**
* Retrieve formatted date timestamp of a revision (linked to that revisions's page).
*
* @package WordPress
* @subpackage Post_Revisions
* @since 2.6.0
*
* @uses date_i18n()
*
* @param int|object $revision Revision ID or revision object.
* @param bool $link Optional, default is true. Link to revisions's page?
* @return string i18n formatted datetimestamp or localized 'Current Revision'.
*/
function wp_post_revision_title( $revision, $link = true ) {
if ( !$revision = get_post( $revision ) )
return $revision;
if ( !in_array( $revision->post_type, array( 'post', 'page', 'revision' ) ) )
return false;
$datef = _c( 'j F, Y @ G:i|revision date format');
$autosavef = __( '%s [Autosave]' );
$currentf = __( '%s [Current Revision]' );
$date = date_i18n( $datef, strtotime( $revision->post_modified_gmt . ' +0000' ) );
if ( $link && current_user_can( 'edit_post', $revision->ID ) && $link = get_edit_post_link( $revision->ID ) )
$date = "$date";
if ( !wp_is_post_revision( $revision ) )
$date = sprintf( $currentf, $date );
elseif ( wp_is_post_autosave( $revision ) )
$date = sprintf( $autosavef, $date );
return $date;
}
/**
* Display list of a post's revisions.
*
* Can output either a UL with edit links or a TABLE with diff interface, and
* restore action links.
*
* Second argument controls parameters:
* (bool) parent : include the parent (the "Current Revision") in the list.
* (string) format : 'list' or 'form-table'. 'list' outputs UL, 'form-table'
* outputs TABLE with UI.
* (int) right : what revision is currently being viewed - used in
* form-table format.
* (int) left : what revision is currently being diffed against right -
* used in form-table format.
*
* @package WordPress
* @subpackage Post_Revisions
* @since 2.6.0
*
* @uses wp_get_post_revisions()
* @uses wp_post_revision_title()
* @uses get_edit_post_link()
* @uses get_author_name()
*
* @todo split into two functions (list, form-table) ?
*
* @param int|object $post_id Post ID or post object.
* @param string|array $args See description {@link wp_parse_args()}.
* @return null
*/
function wp_list_post_revisions( $post_id = 0, $args = null ) {
if ( !$post = get_post( $post_id ) )
return;
$defaults = array( 'parent' => false, 'right' => false, 'left' => false, 'format' => 'list', 'type' => 'all' );
extract( wp_parse_args( $args, $defaults ), EXTR_SKIP );
switch ( $type ) {
case 'autosave' :
if ( !$autosave = wp_get_post_autosave( $post->ID ) )
return;
$revisions = array( $autosave );
break;
case 'revision' : // just revisions - remove autosave later
case 'all' :
default :
if ( !$revisions = wp_get_post_revisions( $post->ID ) )
return;
break;
}
$titlef = _c( '%1$s by %2$s|post revision 1:datetime, 2:name' );
if ( $parent )
array_unshift( $revisions, $post );
$rows = '';
$class = false;
$can_edit_post = current_user_can( 'edit_post', $post->ID );
foreach ( $revisions as $revision ) {
if ( !current_user_can( 'read_post', $revision->ID ) )
continue;
if ( 'revision' === $type && wp_is_post_autosave( $revision ) )
continue;
$date = wp_post_revision_title( $revision );
$name = get_author_name( $revision->post_author );
if ( 'form-table' == $format ) {
if ( $left )
$left_checked = $left == $revision->ID ? ' checked="checked"' : '';
else
$left_checked = $right_checked ? ' checked="checked"' : ''; // [sic] (the next one)
$right_checked = $right == $revision->ID ? ' checked="checked"' : '';
$class = $class ? '' : " class='alternate'";
if ( $post->ID != $revision->ID && $can_edit_post )
$actions = 'ID|$revision->ID" ) . '">' . __( 'Restore' ) . '';
else
$actions = '';
$rows .= "