post_parent ) : get_adjacent_post( false, '', true );
$next = get_adjacent_post( false, '', false );
if ( ! $next && ! $previous )
return;
}
// Don't print empty markup in archives if there's only one page.
if ( $wp_query->max_num_pages < 2 && ( is_home() || is_archive() || is_search() ) )
return;
$nav_class = ( is_single() ) ? 'navigation-post' : 'navigation-paging';
// Add a class when both navigation items are there.
if ( ( get_previous_posts_link() && get_next_posts_link() ) || ( is_single() && ( $next && $previous ) ) )
$nav_class .= ' double';
?>
', '' . _x( '→', 'Next post link', 'ryu' ) . ' %title' ); ?>
%link', '' . _x( '←', 'Previous post link', 'ryu' ) . ' %title' ); ?>
max_num_pages > 1 && ( is_home() || is_archive() || is_search() ) ) : // navigation links for home, archive, and search pages ?>
→ Newer posts', 'ryu' ) ); ?>
← Older posts', 'ryu' ) ); ?>
comment_type ) :
case 'pingback' :
case 'trackback' :
?>
', '' ); ?>
id="li-comment-">
post_parent ) {
/**
* Grab the IDs of all the image attachments in a gallery so we can get the
* URL of the next adjacent image in a gallery, or the first image (if
* we're looking at the last image in a gallery), or, in a gallery of one,
* just the link to that image file.
*/
$attachment_ids = get_posts( array(
'post_parent' => $post->post_parent,
'fields' => 'ids',
'numberposts' => 999,
'post_status' => 'inherit',
'post_type' => 'attachment',
'post_mime_type' => 'image',
'order' => 'ASC',
'orderby' => 'menu_order ID'
) );
// If there is more than 1 attachment in a gallery...
if ( is_countable( $attachment_ids ) && count( $attachment_ids ) > 1 ) {
foreach ( $attachment_ids as $idx => $attachment_id ) {
if ( $attachment_id == $post->ID ) {
$next_id = $attachment_ids[ ( $idx + 1 ) % count( $attachment_ids ) ];
break;
}
}
// get the URL of the next image attachment...
if ( $next_id )
$next_attachment_url = get_attachment_link( $next_id );
// or get the URL of the first image attachment.
else
$next_attachment_url = get_attachment_link( array_shift( $attachment_ids ) );
}
}
printf( '%3$s',
esc_url( $next_attachment_url ),
the_title_attribute( array( 'echo' => false ) ),
wp_get_attachment_image( $post->ID, $attachment_size )
);
}
endif;
if ( ! function_exists( 'ryu_entry_meta' ) ) :
/**
* Prints HTML with meta information for the current post-date/time and author.
*/
function ryu_entry_meta() {
if ( is_sticky() && is_home() && ! is_paged() )
echo wp_kses(
sprintf(
__( 'Sticky', 'ryu' ),
esc_url( get_permalink() ),
esc_attr( get_the_time() )
),
array( 'a' => array( 'href' => array(), 'title' => array(), 'rel' => array(), 'class' => array() ), 'span' => array( 'class' => array() ), 'time' => array( 'class' => array(), 'datetime' => array() ) )
);
if ( 'post' == get_post_type() ) {
echo wp_kses(
sprintf(
__( '%7$s', 'ryu' ),
esc_url( get_permalink() ),
esc_attr( get_the_time() ),
esc_attr( get_the_date( 'c' ) ),
esc_html( get_the_date() ),
esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ),
esc_attr( sprintf( __( 'View all posts by %s', 'ryu' ), get_the_author() ) ),
esc_html( get_the_author() )
),
array( 'a' => array( 'href' => array(), 'title' => array(), 'rel' => array(), 'class' => array() ), 'span' => array( 'class' => array() ), 'time' => array( 'class' => array(), 'datetime' => array() ) )
);
}
$tags_list = get_the_tag_list( '', __( ', ', 'ryu' ) );
if ( $tags_list && ! is_wp_error( $tags_list ) )
echo '' . wp_kses_post( $tags_list ) . '';
}
endif;
/**
* Returns true if a blog has more than 1 category
*/
function ryu_categorized_blog() {
if ( false === ( $all_the_cool_cats = get_transient( 'all_the_cool_cats' ) ) ) {
// Create an array of all the categories that are attached to posts
$all_the_cool_cats = get_categories( array(
'hide_empty' => 1,
) );
// Count the number of categories that are attached to the posts
$all_the_cool_cats = is_countable( $all_the_cool_cats ) ? count( $all_the_cool_cats ) : 0;
set_transient( 'all_the_cool_cats', $all_the_cool_cats );
}
if ( '1' != $all_the_cool_cats ) {
// This blog has more than 1 category so ryu_categorized_blog should return true
return true;
} else {
// This blog has only 1 category so ryu_categorized_blog should return false
return false;
}
}
/**
* Flush out the transients used in ryu_categorized_blog
*/
function ryu_category_transient_flusher() {
// Like, beat it. Dig?
delete_transient( 'all_the_cool_cats' );
}
add_action( 'edit_category', 'ryu_category_transient_flusher' );
add_action( 'save_post', 'ryu_category_transient_flusher' );
if ( ! function_exists( 'ryu_sanitize_hex' ) ) :
/**
* Reduce a value to six hexadecimal digits.
*
* @param string $hex Colour in hexadecimal notation, with or without a leading "#".
* @return string Six hex digits, or an empty string.
*/
function ryu_sanitize_hex( $hex ) {
$hex = ltrim( trim( (string) $hex ), '#' );
return ( 1 === preg_match( '/^[0-9a-fA-F]{6}$/', $hex ) ) ? $hex : '';
}
endif;
if ( ! function_exists( 'ryu_sanitize_rgb' ) ) :
/**
* Reduce a value to a comma separated rgb triplet.
*
* @param string $rgb Triplet in "r,g,b" form.
* @return string Normalised triplet, or an empty string.
*/
function ryu_sanitize_rgb( $rgb ) {
$parts = explode( ',', (string) $rgb );
if ( 3 !== count( $parts ) )
return '';
$values = array();
foreach ( $parts as $part ) {
$part = trim( $part );
if ( '' === $part || 1 !== preg_match( '/^\d{1,3}$/', $part ) )
return '';
$value = (int) $part;
if ( $value > 255 )
return '';
$values[] = $value;
}
return implode( ',', $values );
}
endif;
if ( ! function_exists( 'ryu_tonesque_css' ) ) :
/**
* Prints each image post specific style rules via Tonesque
*/
function ryu_tonesque_css() {
if ( ! current_theme_supports( 'tonesque' ) || ! class_exists( 'Tonesque' ) ) {
return;
} else {
$tonesque = get_post_meta( get_the_ID(), 'ryu_tonesque', true );
if ( empty( $tonesque ) ) {
$content = get_the_content();
$content = apply_filters( 'the_content', $content );
$output = preg_match_all( '//i', $content, $matches );
if ( empty( $matches[1][0] ) )
return;
$tonesque = new Tonesque( $matches[1][0] );
$tonesque = array(
'color' => $tonesque->color(),
'contrast' => $tonesque->contrast(),
);
/*
* Record the outcome either way, so an image we cannot read is
* not looked up again on every render. ryu_tonesque_post_meta_flusher()
* clears this whenever the post is saved.
*/
update_post_meta( get_the_ID(), 'ryu_tonesque', $tonesque );
if ( empty( $tonesque['color'] ) )
return;
}
$tonesque = maybe_unserialize( $tonesque );
$color = ryu_sanitize_hex( isset( $tonesque['color'] ) ? $tonesque['color'] : '' );
$contrast = ryu_sanitize_rgb( isset( $tonesque['contrast'] ) ? $tonesque['contrast'] : '' );
if ( '' === $color || '' === $contrast )
return;
$postid = '#post-' . absint( get_the_ID() );
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- $color, $contrast and $postid are validated directly above.
echo "";
}
}
endif; // ends check for ryu_tonesque_css()
/**
* Flush out the post meta used in ryu_tonesque_css().
*
* @param int $post_id The ID of the saved post.
*/
function ryu_tonesque_post_meta_flusher( $post_id ) {
delete_post_meta( $post_id, 'ryu_tonesque' );
}
add_action( 'save_post', 'ryu_tonesque_post_meta_flusher' );