Skip to content
Snippets Groups Projects
Commit 6dd93f3e authored by ale's avatar ale Committed by lucha
Browse files

[auto] Theme: bliss 1.0.7

parent 43258b9c
No related branches found
No related tags found
No related merge requests found
Showing
with 3721 additions and 426 deletions
<?php get_header(); ?> <?php
/*
* 404
*
*
*/
<div class="post"> get_header();
<h1 class="post-title"><?php _e('Not Found','bliss'); ?></h1> ?>
<h1>Error 404 - Page Not Found</h1>
<div class="entry"> <div id="breadcrumbs">
<p><?php _e('Sorry, but you are looking for something that isn&#39;t here.','bliss'); ?></p> <div class="content">
You are here: Lost.
</div> </div>
</div> </div>
<p>We're sorry, but the content you were searching for was unavailable. Please try again.</p>
<?php
// as of version 0.1.1, 404 notification emails are now optional.
$bliss_notification = of_get_option('bliss_404_notification', 'no');
if($bliss_notification == 'yes'){
/*
* If selected, notify the webmaster when this page is called.
* include the referring page and the user's IP address in the notification
* because this page will usually be triggered either by bad links or hackers.
* sometimes, occasionally, a genuine mistake.
* and genuine mistakes are an opportunity to create a more intuitive UI.
*/
if(isset($_SERVER['HTTP_REFERER'])){
$referrer = esc_url($_SERVER['HTTP_REFERER']);
}else{
$referrer = 'Not set.';
}
$requested = esc_url($_SERVER['REQUEST_URI']);
$ip = esc_attr($_SERVER['REMOTE_ADDR']);
// get the administrator's email address.
if(function_exists('is_multisite') && is_multisite()){
$to = get_site_option('admin_email');
}else{
$to = get_option('admin_email');
}
$subject = "Page Not Found on " . $_SERVER['SERVER_NAME'];
$message = "A visitor to your website received a 404 error. This visitor attempted to access nonexistent content on your website. They may have followed a bad link, or they may have been attempting something malicious. Either way, it could be something for you to look into.
Visitor IP address: $ip
Requested page: $requested
";
if(isset($referrer) && $referrer){
$message .= "They say they were referred by: $referrer";
}else{
$message .= "This visitor's browser did not supply referral data.";
}
wp_mail($to, $subject, $message);
}
get_sidebar(); ?>
<?php get_footer(); ?> <?php get_footer(); ?>
<?php get_header(); ?> <?php
//archive.php
//included automatically if there is no Category page (or if this is an archive lookup)
//delete to default to index.php instead
//display an archive page
/*
* From the documentation:
* " Display archive title (tag, category, date-based,
* or author archives).
* Display a list of posts in excerpt or full-length form.
*
* Include wp_link_pages() to support navigation links within posts. "
*/
?>
<div class="post archive-header">
<h1 class="post-title">
<?php <?php
_e('Archive for ','bliss'); get_header();
if(is_day()) : the_time(__('F jS, Y','bliss')); ?>
elseif(is_month()) : the_time(__('F Y','bliss')); <article>
elseif(is_year()) : the_time(__('Y','bliss')); <h1>Archives</h1>
endif; <div id="breadcrumbs">
<div class="content">
You are here:
<?php
// this one constructor does the whole thing.
$crumbs = new simple_breadcrumb();
?> ?>
</h1>
<div class="entry">
<p><?php _e('You are browsing the archives of','bliss'); wp_title(''); ?>.</p>
</div> </div>
</div> </div>
</article>
<?php
if (have_posts()) :
while (have_posts()) :
the_post();
<?php if(have_posts()) : while(have_posts()) : the_post(); ?> /* post_class is required by ThemeCheck */
?>
<div class="post"> <article id="post-<?php the_ID(); ?>" <?php post_class();?>>
<h2>
<h2 class="post-title"> <?php
<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a> // our custom function outputs the title within a permalink, all properly escaped to prevent XSS attacks.
// see http://codex.wordpress.org/Theme_Development#Untrusted_Data
bliss_clean_title_link();
?>
</h2> </h2>
<p class="byline">
<span class="time"><?php the_time(__('M jS, Y','bliss')); ?></span>
<span class="author"><?php the_author_posts_link() ?></span>
<?php comments_popup_link(__('No Comments','bliss'), __('1 Comment','bliss'), __('% Comments','bliss'), 'comments-link'); ?>
<?php edit_post_link(__('Edit','bliss'), '<span class="edit">', '</span>'); ?>
</p>
<div class="entry">
<?php <?php
if($settings['archives'] == __('Excerpts','bliss')) the_excerpt(); // recommended by ThemeCheck.
else the_content(__('Read more &raquo;','bliss')); // via http://codex.wordpress.org/Function_Reference/add_theme_support
if ( has_post_thumbnail() ) {
the_post_thumbnail();
}
//the_content();//full post content
the_excerpt();
//doesn't require a read more link at the bottom,
//because I've built those into the_excerpt from functions.php
?> ?>
</div>
<div class="post-meta-data"> </article>
<span class="categories"><?php _e('Categories:','bliss'); ?> <?php the_category(', '); ?></span> <?php
<span class="tags"><?php _e('Tags:','bliss'); ?> <?php the_tags('', ', ', ''); ?></span> endwhile;
</div>
</div> else:
<?php endwhile; ?> _e("Sorry, no articles matched your search.", 'bliss');
<div class="navigation-links section">
<?php posts_nav_link('',
'<span class="previous">&laquo; '.__('Previous Page','bliss').'</span>',
'<span class="next">'.__('Next Page','bliss').' &raquo;</span>'
); ?>
</div>
<?php else: ?> endif;
<p><?php _e('Sorry, no posts matched your criteria.','bliss'); ?></p>
paginate(); //blog archive pagination!
<?php endif; ?> get_sidebar();
get_footer();
<?php get_footer(); ?> ?>
\ No newline at end of file \ No newline at end of file
<?php get_header(); ?> <?php
//attachment.php
<?php if(have_posts()) : while(have_posts()) : the_post(); ?> //used for displaying multimedia content.
//display a customized layout and behavior specific to viewing a single attachment.
<div class="post">
<h1 class="post-title"> get_header();
<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a> if (have_posts()) :
</h1> while (have_posts()) :
the_post();
?>
<article>
<h1>
<?php the_title();//title of the post
?></h1>
<div class="entry"> <?php
<?php the_content(); ?> the_content();//full post content -- doesn't output diddly squat on an image page.
</div>
</div> // see the documentation at http://codex.wordpress.org/Function_Reference/wp_get_attachment_image
echo wp_get_attachment_image( $post->ID, 'full' );// this is how you display the image.
<?php comments_template(); ?> ?>
<div class="navigation-links section"> </article>
<span class="previous"><?php previous_post_link('&laquo; %link'); ?></span> <?php
<span class="next"><?php next_post_link(' %link &raquo;'); ?></span> endwhile;
</div> endif;
get_sidebar();
get_footer();
<?php endwhile; ?> ?>
\ No newline at end of file
<?php else: ?>
<p><?php _e('Sorry, no posts matched your criteria.','bliss'); ?></p>
<?php endif; ?>
<?php get_footer(); ?>
\ No newline at end of file
<?php get_header(); ?> <?php
//author.php
<div class="post author-header"> //included automatically if there is no Category page (or if this is an archive lookup)
<h1 class="post-title"><?php wp_title(''); ?></h1> //delete to default to index.php instead
<div class="entry">
<?php op_author_bio(); // Author header hook ?> //display an author page
</div> //see http://codex.wordpress.org/Author_Templates
</div>
<?php if(have_posts()) : while(have_posts()) : the_post(); ?>
<div class="post"> //link to this page by calling the_author_posts_link()
<h2 class="post-title"> /*
<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a> *
</h2> * to get more specific you could also make versions of this page,
* with php files named after the associated query term, eg:
*
* author-{id}.php
* or
* author-{nicename}.php
*
*/
<p class="byline">
<span class="time"><?php the_time(__('M jS, Y','bliss')); ?></span>
<span class="author"><?php the_author_posts_link(); ?></span>
<?php comments_popup_link(__('No Comments','bliss'), __('1 Comment','bliss'), __('% Comments','bliss'), 'comments-link'); ?>
<?php edit_post_link(__('Edit','bliss'), '<span class="edit">', '</span>'); ?>
</p>
<div class="entry">
$curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) : get_userdata(intval($author));
get_header();
?>
<h1>Posts by
<?php
//the_title();//title of the post
$curauth->first_name .' ';
if($curauth->nickname && $curauth->nickname != ''){
echo '&quot;';
$curauth->nickname;
echo '&quot; ';//note the extra space...
}
$curauth->last_name;
//as usual, many more available...
?>
</h1>
<div id="breadcrumbs">
<div class="content">
You are here:
<?php <?php
if($settings['archives'] == __('Excerpts','bliss')) the_excerpt(); // this one constructor does the whole thing.
else the_content(__('Read more &raquo;','bliss')); $crumbs = new simple_breadcrumb();
?> ?>
</div> </div>
<div class="post-meta-data">
<span class="categories"><?php _e('Categories:','bliss'); ?> <?php the_category(', '); ?></span>
<span class="tags"><?php _e('Tags:','bliss'); ?> <?php the_tags('', ', ', ''); ?></span>
</div> </div>
<ul class="author-post-list">
<?php
if (have_posts()) :
while (have_posts()) :
the_post();
</div> /* post_class is required by ThemeCheck */
?>
<article id="post-<?php the_ID(); ?>" <?php post_class();?>>
<?php
//ThemeCheck complains that I'm not using get_option('date_format') instead of the_time() here:
?>
<li>
<?php
// our custom function outputs the title within a permalink, all properly escaped to prevent XSS attacks.
// see http://codex.wordpress.org/Theme_Development#Untrusted_Data
bliss_clean_title_link();
?>, posted
<?php
// ThemeCheck just really can't stand this line:
//the_time('d M Y');
<?php endwhile; ?> // instead, it wants me to call:
get_option('d M Y');
<div class="navigation-links section"> ?> in <?php the_category('&');?>
<?php posts_nav_link('', </li>
'<span class="previous">&laquo; '.__('Previous Page','bliss').'</span>',
'<span class="next">'.__('Next Page','bliss').' &raquo;</span>'
); ?>
</div>
<?php else: ?>
<p><?php _e('Sorry, no posts matched your criteria.','bliss'); ?></p> </article>
<?php
endwhile;
else: ?>
<p><?php _e('No posts by this author.', 'bliss'); ?></p>
<?php endif; ?> <?php
endif;
?>
</ul>
<?php
get_sidebar();//author-specific sidebars?
get_footer();
<?php get_footer(); ?> ?>
\ No newline at end of file \ No newline at end of file
<?php
//blogroll.php
/*
Template Name: Blogroll
*/
// Optional custom blog home page template
// allows the user to preface the blogroll with customized introductory content (such as text, featured image, or slideshow).
// Does not override home.php
// Is not affected by site's Reading settings.
// To use this template, select a page from the content editor, and choose Blogroll as the page template.
get_header();
//this is "The Loop"
if (have_posts()) :
while (have_posts()) :
the_post(); //makes the current item available for use...
/* post_class is required by ThemeCheck */
?>
<article id="post-<?php the_ID(); ?>" <?php post_class();?>>
<h1><?php the_title(); ?></h1>
<div id="breadcrumbs">
<div class="content">
You are here:
<?php
// this one constructor does the whole thing.
$crumbs = new simple_breadcrumb();
?>
</div>
</div>
<section class="content">
<?php
// recommended by ThemeCheck.
// via http://codex.wordpress.org/Function_Reference/add_theme_support
if ( has_post_thumbnail() ) {
echo '<div class="center featured-image-container">';
the_post_thumbnail();
echo '</div>';
}
the_content();
?>
</section>
</article>
<?php
// proper blogroll functionality requires a sub-loop.
// could eg. use query_var to get the current page & paginate
// then calll query_posts to retrieve the posts.
//query_posts();
// however, Ben Gillbanks says that's no longer a best practice.
//http://www.binarymoon.co.uk/2010/03/5-wordpress-queryposts-tips/
// instead, use a sub-loop with a new WP_Query object.
// don't forget the pagination...
// with help from http://codex.wordpress.org/Class_Reference/WP_Query#Post_.26_Page_Parameters
// if you want to use "blogroll" as a static front page, you have to change 'paged' to 'page' in get_query_var on this next line:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$query = array (
'posts_per_page' => 5,
'paged' => $paged
);// add query params as needed.
$innerLoop = new WP_Query($query);
// I'm placing pagination at both the top and the bottom of the inner loop itself.
// an instance of the WP_Query object is required by this version of the pagination function.
paginate_blogroll($innerLoop); //blog archive pagination!
// The Loop...
if ($innerLoop->have_posts()) {
while ($innerLoop->have_posts()) {
$innerLoop->the_post();
?>
<article id="post-<?php the_ID(); ?>" <?php post_class();?>>
<hgroup class="post-meta">
<h2><?php
bliss_clean_title_link(); //includes post title wrapped in permalink with escaped title attribute
?></h2>
<p class="author-credit">Posted by <?php the_author(); ?> on <?php the_date(); ?></p>
</hgroup>
<section class="content">
<?php
// recommended by ThemeCheck.
// via http://codex.wordpress.org/Function_Reference/add_theme_support
if ( has_post_thumbnail() ) {
echo '<div class="center featured-image-container">';
printf('<a href="%s">', esc_attr(get_the_permalink()));
the_post_thumbnail();
echo '</a>
</div>';
}
the_excerpt();// complete with readmore link via functions.php
//the_content();
?>
<p class="tags">Tagged under <?php the_tags(); ?></p>
<p class="categories">Filed under <?php the_category(', ');?>
</section>
</article>
<?php
}//end while
}else{//end if
?>
<h1>Nothing to see here</h1>
<p>Check back later to see if we&#039;ve posted anything. </p>
<?php
}//end inner loop.
// an instance of the WP_Query object is required by this version of the pagination function.
paginate_blogroll($innerLoop); //blog archive pagination!
// after the inner loop:
// recommended by http://codex.wordpress.org/Class_Reference/WP_Query
wp_reset_postdata();
// end outer loop
endwhile;
endif;
//end of "The Loop"
get_sidebar();
get_footer();
?>
\ No newline at end of file
<?php get_header(); ?> <?php
//category.php
<div class="post category-header"> //included automatically
<h1 class="post-title"><?php single_cat_title(); ?></h1> //delete to default to archive.php (or index.php) instead
<div class="entry">
<?php echo category_description(); ?>
</div>
</div>
<?php if(have_posts()) : while(have_posts()) : the_post(); ?> get_header();
?>
<h1>Category: <?php single_cat_title(); ?></h1>
<p>All posts filed under <?php single_cat_title();?></p>
<div class="post"> <div id="breadcrumbs">
<div class="content">
You are here:
<?php
// this one constructor does the whole thing.
$crumbs = new simple_breadcrumb();
?>
</div>
</div>
<?php
if (have_posts()) :
while (have_posts()) :
the_post();
<h2 class="post-title"> /* post_class is required by ThemeCheck */
<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a> ?>
</h2> <article id="post-<?php the_ID(); ?>" <?php post_class();?>>
<h3>
<?php
// our custom function outputs the title within a permalink, all properly escaped to prevent XSS attacks.
// see http://codex.wordpress.org/Theme_Development#Untrusted_Data
bliss_clean_title_link();
?>
</h3>
<?php
// recommended by ThemeCheck.
// via http://codex.wordpress.org/Function_Reference/add_theme_support
if ( has_post_thumbnail() ) {
the_post_thumbnail();
}
<p class="byline"> the_excerpt();
<span class="time"><?php the_time(__('M jS, Y','bliss')); ?></span> //doesn't require a read more link at the bottom,
<span class="author"><?php the_author_posts_link(); ?></span> //because I've built those into the_excerpt from functions.php
<?php comments_popup_link(__('No Comments','bliss'), __('1 Comment','bliss'), __('% Comments','bliss'), 'comments-link'); ?> ?>
<?php edit_post_link(__('Edit','bliss'), '<span class="edit">', '</span>'); ?>
</p>
<div class="entry"> </article>
<?php <?php
if($settings['archives'] == __('Excerpts','bliss')) the_excerpt(); endwhile;
else the_content(__('Read more &raquo;','bliss'));
?>
</div>
<div class="post-meta-data"> else:
<span class="categories"><?php _e('Categories:','bliss'); ?> <?php the_category(', '); ?></span>
<span class="tags"><?php _e('Tags:','bliss'); ?> <?php the_tags('', ', ', ''); ?></span>
</div>
</div>
<?php endwhile; ?> _e("Sorry, no articles found in this category.", 'bliss');
<div class="navigation-links section">
<?php posts_nav_link('',
'<span class="previous">&laquo; '.__('Previous Page','bliss').'</span>',
'<span class="next">'.__('Next Page','bliss').' &raquo;</span>'
); ?>
</div>
<?php else: ?> endif;
<p><?php _e('Sorry, no posts matched your criteria.','bliss'); ?></p> paginate(); //blog archive pagination!
<?php endif; ?> get_sidebar();
get_footer();
<?php get_footer(); ?> ?>
\ No newline at end of file \ No newline at end of file
<div id="comments-template"> <?php
<?php // Do not delete these lines //comments.php
if ('comments.php' == basename($_SERVER['SCRIPT_FILENAME'])) die ('Please do not load this page directly. Thanks!');
if (!empty($post->post_password)) { // if there's a password //controls the OUTPUT of comments.
if ($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) { // and it doesn't match the cookie
echo '<h2>'; _e('Password Protected','bliss'); echo '</h2>';
echo '<p>'; _e('Enter the password to view comments.','bliss'); echo '</p></div>';
return;
}
}
// Variable for alternating comments with the CSS class "alt"
$oddcomment = 'alt';
// Start editing here //include this file in the loop to enable.
if ($comments) :
echo '<h3 id="comments">';
comments_number(__('No Responses','bliss'), __('One Response','bliss'), '% '.__('Responses','bliss'));
echo ' '; _e('to','bliss'); echo ' &#8220'; the_title();
echo '&#8221;</h3>';
echo '<ol class="commentlist">'; //overridden by plugins e.g. Disqus
foreach ($comments as $comment) : ?>
<li class="<?php echo $oddcomment; ?> <?php if($comment->comment_author_email == get_the_author_email()) echo 'author'; ?>" id="comment-<?php comment_ID(); ?>"> /* required by ThemeCheck: enqueue the comment reply script. */
// but we only really need to show it if they're viewing a page with comments enabled, so:
//http://codex.wordpress.org/Function_Reference/comments_open
if ( is_singular() && comments_open() ) wp_enqueue_script( "comment-reply" );
<div class="comment-meta-data">
?>
<div id="comments" class="clear">
<?php if ( post_password_required() ) : ?>
<p class="nopassword"><?php _e( 'This post is password protected. Enter the password to view any comments.', 'bliss' ); ?></p>
</div><!-- #comments -->
<?php <?php
if($comment->comment_author_url == true) { /* Stop the rest of comments.php from being processed,
if($comment->comment_author_url == 'http://') $comment->comment_author_url = 'http://gravatar.com'; * but don't kill the script entirely -- we still have
echo "<a href=\"$comment->comment_author_url\" rel=\"nofollow\" title=\""; comment_author(); echo "\">"; * to fully load the template.
} */
$comment_type = get_comment_type(); return;
if($comment_type == 'trackback' || $comment_type == 'pingback') $avatar = get_bloginfo('template_directory').'/images/trackback.jpg'; endif;
elseif(get_option('bs_avatar') == true) $avatar = 'wavatar';
else $avatar = get_option('avatar_default');
echo get_avatar(get_comment_author_email(), '80', $avatar);
if($comment->comment_author_url == true) echo '</a>';
?> ?>
<span class="permalink">
<a class="time" href="#comment-<?php comment_ID(); ?>" title=""><?php _e('Permalink','bliss'); ?></a> <?php // You can start editing here -- including this comment! ?>
</span>
<?php edit_comment_link(__('Edit','bliss'),'<span class="edit">','</span>'); <?php if ( have_comments() ) : ?>
if ($comment->comment_approved == '0') : <h2 id="comments-title">
echo '<em>'; _e('Your comment is awaiting moderation.','bliss'); echo '</em>'; <?php
endif; ?> printf( _n( 'One thought on &ldquo;%2$s&rdquo;', '%1$s thoughts on &ldquo;%2$s&rdquo;', get_comments_number(), 'bliss' ),
</div><!-- comment-meta-data --> number_format_i18n( get_comments_number() ), '<span>' . get_the_title() . '</span>' );
<p>
<span class="comment-author">
<?php _e('By','bliss'); ?> <?php comment_author_link(); ?>
</span>
<span class="time">
<?php _e('on','bliss'); ?> <?php comment_date(__('M jS, Y','bliss')); ?>
<?php _e('at','bliss'); ?> <?php comment_time(); ?>
</span>
</p>
<div class="comment-text">
<?php comment_text() ?>
</div>
</li>
<?php // Changes every other comment to a different class
if ('alt' == $oddcomment) $oddcomment = '';
else $oddcomment = 'alt';
endforeach; // end foreach comment
?> ?>
</h2>
</ol> <?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?>
<nav id="comment-nav-above">
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'bliss' ); ?></h1>
<div class="nav-previous"><?php previous_comments_link( __( '&larr; Older Comments', 'bliss' ) ); ?></div>
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments &rarr;', 'bliss' ) ); ?></div>
</nav>
<?php endif; // check for comment navigation ?>
<ol class="commentlist">
<?php
/* Loop through and list the comments. Tell wp_list_comments()
* to use bliss_comment() to format the comments.
* If you want to overload this in a child theme then you can
* define bliss_comment() and that will be used instead.
* See bliss_comment() in bliss/functions.php for more.
*/
// instead of doing this:
//echo "<p>Site administrator: Please format this function's return value to enable it.</p>";
//I'm going to crib a bit. Yay, open-source.
// The following comment formatting is from the WP theme, bliss.
// from bliss:
if ( ! function_exists( 'bliss_comment' ) ) :
/**
* Template for comments and pingbacks.
*
* To override this walker in a child theme without modifying the comments template
* simply create your own bliss_comment(), and that function will be used instead.
*
* Used as a callback by wp_list_comments() for displaying the comments.
*
* @since Twenty Eleven 1.0
*/
function bliss_comment( $comment, $args, $depth ) {
$GLOBALS['comment'] = $comment;
switch ( $comment->comment_type ) :
case 'pingback' :
case 'trackback' :
?>
<li class="post pingback">
<p><?php _e( 'Pingback:', 'bliss' ); ?> <?php comment_author_link(); ?><?php edit_comment_link( __( 'Edit', 'bliss' ), '<span class="edit-link">', '</span>' ); ?></p>
<?php <?php
else : // this is displayed if there are no comments so far break;
default :
?>
<li <?php comment_class(); ?> id="li-comment-<?php comment_ID(); ?>">
<article id="comment-<?php comment_ID(); ?>" class="comment">
<footer class="comment-meta">
<div class="comment-author vcard">
<?php
$avatar_size = 68;
if ( '0' != $comment->comment_parent )
$avatar_size = 39;
echo get_avatar( $comment, $avatar_size );
/* translators: 1: comment author, 2: date and time */
printf( __( '%1$s on %2$s <span class="says">said:</span>', 'bliss' ),
sprintf( '<span class="fn">%s</span>', get_comment_author_link() ),
sprintf( '<a href="%1$s"><time pubdate datetime="%2$s">%3$s</time></a>',
esc_url( get_comment_link( $comment->comment_ID ) ),
get_comment_time( 'c' ),
/* translators: 1: date, 2: time */
sprintf( __( '%1$s at %2$s', 'bliss' ), get_comment_date(), get_comment_time() )
)
);
?>
if ('open' == $post->comment_status) : <?php edit_comment_link( __( 'Edit', 'bliss' ), '<span class="edit-link">', '</span>' ); ?>
// If comments are open, but there are no comments. </div><!-- .comment-author .vcard -->
else : // comments are closed
// If comments are closed ?>
<p class="nocomments"><?php _e('Comments are closed.','bliss'); ?></p>
<?php endif; <?php if ( $comment->comment_approved == '0' ) : ?>
endif; <em class="comment-awaiting-moderation"><?php _e( 'Your comment is awaiting moderation.', 'bliss' ); ?></em>
<br />
<?php endif; ?>
if ('open' == $post->comment_status) : ?> </footer>
<h3 id="respond"><?php _e('Leave a Reply','bliss'); ?></h3>
<?php if ( get_option('comment_registration') && !$user_ID ) : ?> <div class="comment-content"><?php comment_text(); ?></div>
<p><?php _e('You must be','bliss'); ?> <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=<?php the_permalink(); ?>"> <?php _e('logged in','bliss'); ?></a> <?php echo ' '; _e('to post a comment.','bliss'); ?></p>
<?php else : ?> <div class="reply">
<?php comment_reply_link( array_merge( $args, array( 'reply_text' => __( 'Reply <span>&darr;</span>', 'bliss' ), 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?>
</div><!-- .reply -->
</article><!-- #comment-## -->
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform"> <?php
<?php if ( $user_ID ) : ?> break;
endswitch;
}
<p><?php _e('Logged in as','bliss'); ?> <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"> <?php echo $user_identity; ?></a>. <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?action=logout" title="<?php _e('Log out of this account','bliss'); ?>"><?php _e('Logout','bliss'); ?> &raquo;</a></p>
<?php else : ?>
<div class="comment-input"> endif; // ends check for bliss_comment()
<p><input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="40" tabindex="1" />
<label for="author"><?php _e('Name','bliss'); echo ' '; if ($req) _e('(Required)','bliss'); ?></label></p>
<p><input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="40" tabindex="2" />
<label for="email"><?php _e('Email','bliss'); echo ' '; if ($req) if ($req) _e('(Required)','bliss'); ?></label></p>
<p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="40" tabindex="3" />
<label for="url"><?php _e('Website','bliss'); ?></label></p>
</div>
<?php endif; ?> //the bliss theme uses this custom function.
wp_list_comments( array( 'callback' => 'bliss_comment' ) );
//which is defined in that theme's functions.php, but pasted here for better performance, since this function is not used elsewhere in this theme...
<p class="textarea"><textarea name="comment" id="comment" cols="60" rows="10" tabindex="4"></textarea></p>
<p class="comment-submit"><input class="submit-comment" name="submit" type="submit" id="submit" tabindex="5" value="<?php _e('Submit','bliss'); ?>" />
<input class="reset-comment" name="reset" type="reset" id="reset" tabindex="6" value="<?php _e('Reset','bliss'); ?>" />
<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />
</p>
<div class="comment-footer">
<?php do_action('comment_form', $post->ID); ?>
<p class="allowed-tags"><?php echo '<strong>'; _e('You can use these XHTML tags','bliss'); echo '&#58;</strong>'; ?> &lt;a href=&quot;&quot; title=&quot;&quot;&gt; &lt;abbr title=&quot;&quot;&gt; &lt;acronym title=&quot;&quot;&gt; &lt;blockquote cite=&quot;&quot;&gt; &lt;code&gt; &lt;em&gt; &lt;strong&gt;</p>
</div> ?>
</ol>
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?>
<nav id="comment-nav-below">
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'bliss' ); ?></h1>
<div class="nav-previous"><?php previous_comments_link( __( '&larr; Older Comments', 'bliss' ) ); ?></div>
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments &rarr;', 'bliss' ) ); ?></div>
</nav>
<?php endif; // check for comment navigation ?>
<?php
/* If there are no comments and comments are closed, let's leave a little note, shall we?
* But we don't want the note on pages or post types that do not support comments.
*/
elseif ( ! comments_open() && ! is_page() && post_type_supports( get_post_type(), 'comments' ) ) :
?>
<p class="nocomments"><?php _e( 'Comments are closed.', 'bliss' ); ?></p>
<?php endif; ?>
<?php comment_form(); ?>
</form> </div><!-- #comments -->
<?php endif; // If registration required and not logged in ?>
<?php endif; // if you delete this the sky will fall on your head ?>
</div>
\ No newline at end of file
/*
http://codex.wordpress.org/Function_Reference/add_editor_style
*/
/* the use of this file and associated function call are recommended by ThemeCheck. */
@import url( 'style.css' );
/* Add overwrites as needed so that the content of the editor field is attractive and not broken */
body { padding: 0; background: #fff; }
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
File added
File added
Source diff could not be displayed: it is too large. Options to address this: view the blob.
File added
File added
File added
</div> <?php
//footer.php
?>
<?php op_widget_insert(); // Widget insert hook ?> <footer class="site-footer">
<div class="content">
</div> <?php
wp_nav_menu(array(
'theme_location' => 'footer-nav',
'container' => 'nav',
'container_id' => 'footerNav',
'container_class' => 'clearfix small'
));
?>
<div id="footer-container"> <?php
// version 0.1.5 introduces widget areas for the footer.
if(is_active_sidebar('footer-widget') || is_active_sidebar('footer-widget-2') || is_active_sidebar('footer-widget-3')){
?>
<section class="thirds clear clearfix spacer small">
<?php
// footer widgets here.
if(is_active_sidebar('footer-widget')){
dynamic_sidebar('footer-widget');
}
if(is_active_sidebar('footer-widget-2')){
dynamic_sidebar('footer-widget-2');
}
if(is_active_sidebar('footer-widget-3')){
dynamic_sidebar('footer-widget-3');
}
?>
</section>
<?php
}
?>
<div id="footer"> <?php
if(has_nav_menu('social-menu')){
<?php op_footer(); // Theme footer hook ?> wp_nav_menu(array(
'theme_location' => 'social-menu',
'container' => 'nav',
'container_id' => 'social',
'container_class' => 'right social social-menu clearfix',//hidden-text
<?php wp_footer(); // WordPress footer hook ?> ));
}
?>
<p class="credit spacer small">
<?php
printf(
__( 'Copyright &#169; %d by %s. Powered by <a rel="nofollow" href="%s">Bliss</a> for <a rel="nofollow" href="%s">WordPress</a>', 'bliss' ),
date('Y'), esc_attr(get_bloginfo('name')), 'http://www.mardesco.com/themes/bliss/', 'http://www.wordpress.org' );
?>
</p>
</div> </div>
</div> <?php wp_footer(); ?>
</footer>
</div> <!--! end of #container -->
<!--[if lt IE 7 ]>
<script src="//ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/CFInstall.min.js"></script>
<script>window.attachEvent("onload",function(){CFInstall.check({mode:"overlay"})})</script>
<![endif]-->
</div>
</body> </body>
</html> </html>
\ No newline at end of file
<?php
//front-page.php
// Trying to use a custom homepage? Can't get it to change or update?
// try editing this file instead.
// When a front-page.php is present, WordPress presents unexpected behavior:
// The front-page template overrides all other templates, but the body class will give the other template's name!
get_header();
if (have_posts()) :
while (have_posts()) :
the_post();
// display the slideshow, if one has been attached to the home page.
// NOTE: when using the default homepage, slideshow1 is included automatically, if it exists.
?>
<article>
<?php
// recommended by ThemeCheck.
// via http://codex.wordpress.org/Function_Reference/add_theme_support
if ( has_post_thumbnail() ) {
echo '<div class="center featured-image-container">';
the_post_thumbnail();
echo '</div>';
}
?>
<?php
if(is_home()){
// if your front page is a blogroll:
?>
<h1>
<?php bliss_clean_title_link();//title of the post, with link
?></h1>
<?php
// version 0.1.1 adds post thumbnails to blogroll
if ( has_post_thumbnail() ) {
echo '<div class="center featured-image-container">';
printf('<a href="%s">', esc_attr(get_the_permalink()));
the_post_thumbnail();
echo '</a>
</div>';
}
the_content();
}else{
// if your front page is a proper static homepage:
?>
<h1>
<?php the_title();//title of the post
?></h1>
<?php
$subtitle = bliss_get_subtitle();
if($subtitle){
echo '<p class="subtitle">' . $subtitle . '</p>';
}
?>
<?php
the_content();//full post content
}
?>
</article>
<?php
endwhile;
endif;
paginate();
get_sidebar();
get_footer();
?>
<?php <?php
/******************************************************** //functions.php
* Do not modify unless you know what you're doing
********************************************************/
// first, a little security.
// For international users // prevent direct script access
load_theme_textdomain('bliss'); if(__FILE__ == $_SERVER['SCRIPT_FILENAME']){
die("This file cannot be executed directly");
// Define constant paths }
$op_dir = get_bloginfo('template_directory');
define('OP_LIBRARY', TEMPLATEPATH . '/library');
define('OP_INCLUDES', TEMPLATEPATH . '/includes'); # Begin Options #
define('OP_WIDGETS', TEMPLATEPATH . '/widgets');
define('OP_FUNCTIONS', OP_LIBRARY . '/functions'); /*
define('OP_SETTINGS', OP_LIBRARY . '/settings'); theme options panel via the Options Framework
define('OP_CSS', $op_dir . '/library/css'); courtesy of Devin Price : http://wptheming.com/options-framework-theme/
define('OP_JS', $op_dir . '/library/js'); */
define( 'OPTIONS_FRAMEWORK_DIRECTORY', get_template_directory_uri() . '/options/' );
// Include required files require_once dirname( __FILE__ ) . '/options/options-framework.php';
require_once(OP_FUNCTIONS . '/filters.php');
require_once(OP_FUNCTIONS . '/functions.php'); /*
require_once(OP_FUNCTIONS . '/get-the-image.php'); *
require_once(OP_FUNCTIONS . '/get-the-video.php'); * Show / hide the slideshow option when a checkbox is clicked.
require_once(OP_FUNCTIONS . '/hooks.php'); *
require_once(OP_FUNCTIONS . '/media.php'); *
require_once(OP_FUNCTIONS . '/template-functions.php'); */
require_once(OP_FUNCTIONS . '/widgets.php');
function bliss_toggle_slideshow_options() { ?>
// Theme settings
if(is_admin()) require_once(OP_SETTINGS . '/theme-settings.php'); <script type="text/javascript">
jQuery(document).ready(function() {
// Return theme settings variable if not admin
if(!is_admin()) $settings = get_option('bliss_theme_settings'); // slideshow 1
jQuery('#bliss_slideshow1_showhidden').click(function() {
jQuery('.bliss-slideshow-1').fadeToggle(400);
});
if (jQuery('#bliss_slideshow1_showhidden:checked').val() !== undefined) {
jQuery('.bliss-slideshow-1').show();
}
// slideshow 2
jQuery('#bliss_slideshow2_showhidden').click(function() {
jQuery('.bliss-slideshow-2').fadeToggle(400);
});
if (jQuery('#bliss_slideshow2_showhidden:checked').val() !== undefined) {
jQuery('.bliss-slideshow-2').show();
}
// slideshow 3
jQuery('#bliss_slideshow3_showhidden').click(function() {
jQuery('.bliss-slideshow-3').fadeToggle(400);
});
if (jQuery('#bliss_slideshow3_showhidden:checked').val() !== undefined) {
jQuery('.bliss-slideshow-3').show();
}
});
</script>
<?php
}
add_action( 'optionsframework_custom_scripts', 'bliss_toggle_slideshow_options' );
# END OPTIONS #
# Theme Styles #
function bliss_style_links(){
$modernizr_url = get_template_directory_uri() . "/js/modernizr-2.6.1.min.js";
wp_enqueue_script('modernizr', $modernizr_url, array(), '2.6.1', false);
// disallowed by theme review: get_template_directory_uri() . "/style.css";
// required: use get_stylesheet_uri()
$main_stylesheet = get_stylesheet_uri();
wp_enqueue_style( 'bliss_style', $main_stylesheet, false );
// as of version 0.1.1 the font url is now a relative protocol.
$font_url = '//fonts.googleapis.com/css?family=Merriweather:700italic';
wp_enqueue_style( 'Merriweather', $font_url, false);
// version 0.1.4 adds icons by Font Awesome
$icon_url = get_template_directory_uri() . '/css/font-awesome.min.css';
wp_enqueue_style( 'font-awesome', $icon_url, false);
}
add_action( 'wp_enqueue_scripts', 'bliss_style_links', 2 );
/* default value for $content_width, required by ThemeCheck. */
// it turns out, intended use of $content_width global is NOT the same
// as intended use of: (int) of_get_option('bliss_max_width')
// if not overriden by a plugin, must be set equal to the rendered content area of the theme.
// required: define content_width global via after_setup_theme callback
function bliss_global_width(){
// Note: this variable will not accurately reflect the size of the display area on a mobile device screen.
global $content_width;
if ( ! isset( $content_width ) ){
// Default for $content_width is the width of the content area on a page with a single sidebar at the theme's default container width.
$content_width = 735;
// but that's not necessarily accurate for the current page, is it.
// The size of the content area will depend on the user settings.
// retrieving those settings requires an extra database call.
// TODO: set global vars for all user settings, to reduce the number of database lookups required.
$width = (int) esc_attr(of_get_option('bliss_max_width', '1024'));
if($width === 0){
// 100% width display.
// size of content area can only be determined by JavaScript.
// use the default setting from above, and do nothing here.
}else{
// determine if this page has sidebars in the first place
if(is_front_page() || is_page_template('page-full-width.php')){
/*
style.css line 1155 says:
#main{padding:2.9%;}
2.9 * 2 = 5.8%
100-5.8 = 94.2
*/
$content_width = $width * 0.942;
}else{
// check sidebar status.
$sidebars = bliss_get_sidebar_selection();
switch($sidebars){
// "left" and "right" both get the same treatment.
case 'left':
case 'right':
/*
see stylesheet (eg .hasRightNav #main on line 1210)
the use of a single sidebar reduces the width of the content area by 22.45%
5.8 + 22.45 = 28.25
100 - 28.25 = 71.75
*/
$content_width = $width * 0.7175;
break;
case 'both':
// 22.45 * 2 = 44.9
// 44.9 + 5.8 = 50.7
// 100 - 50.7 = 49.3
$content_width = $width * 0.493;
break;
case 'none':
// same as the full width layouts above
$content_width = $width * 0.942;
break;
default:
// use the default, set above.
// do nothing.
break;
}
}
}
}
}
add_action('after_setup_theme', 'bliss_global_width');
function bliss_user_customizations(){
// user-specified width setting goes AFTER the theme's primary stylesheet.
$width = (int) esc_attr(of_get_option('bliss_max_width', '1024'));
if($width && is_int($width) && $width != 0){
$breakpoint = $width -1;
printf('
<style type="text/css">
#bliss_container{width:%dpx;}
@media screen and (max-width:%dpx){
#bliss_container{
width:90%%;
margin:35px 5%%;
}
}
</style>', $width, $breakpoint);
}else{
if(isset($width) && $width === 0){
echo '<style type="text/css">
#bliss_container{
width:100%;
margin-left:0;
margin-right:0;
}
@media only screen and (max-width:1023px){
#bliss_container{
width:100%;
margin:35px 0;
}
}
</style>';
}
}
$header_background = get_header_image();
// feature support for custom-header image.
if($header_background && $header_background != ''){
printf('
<style type="text/css">
.site-header{
background:transparent url("%s") center center no-repeat;
background-size:cover;
}
</style>
', esc_url($header_background));
}
}
add_action('wp_head', 'bliss_user_customizations', 100);// a low priority so these styles will be called last.
/* color scheme selection via theme options */
function bliss_color_scheme($classes){
// get the user-selected color scheme. Defaults to light grey.
// other options: blue, green, or maroon.
$color = esc_attr(of_get_option('bliss_colors', 'light'));
if($color){
// add the color as a class name to the $classes array
$classes[] = $color;
}
return $classes;
}
add_filter('body_class', 'bliss_color_scheme');
function bliss_font_in_footer(){
/*
We put the Google Fonts font in the footer and call it late in the stack, to give it time to load before applying the typeface to the content.
*/
echo '
<style type="text/css">
h1,h2,h3{font-family: "Merriweather", serif;font-style:italic;font-weight:700}
</style>
';
}
add_action('wp_footer', 'bliss_font_in_footer', 100);
# end theme styles #
# theme functions #
// per http://codex.wordpress.org/Theme_Development#Untrusted_Data
// define a custom function for cleaning titles, when they are output within an html attribute.
// BUT functions defined in the global scope must be prefixed with the unique theme name!
// Thanks to nitkr for pointing this out.
function bliss_clean_title_link(){
//http://codex.wordpress.org/Function_Reference/the_title_attribute
printf( '<a href="%s" title="%s">%s</a>', get_permalink(), the_title_attribute( 'echo=0' ), get_the_title() );
}
// as per http://codex.wordpress.org/Function_Reference/wp_title#Covering_Homepage
function bliss_homepage_title($title){
if( empty( $title ) && ( is_home() || is_front_page() ) ) {
return esc_attr( get_bloginfo( 'name' ) . ' | ' . get_bloginfo( 'description' ) );
}
return $title;
}
add_filter( 'wp_title', 'bliss_homepage_title', 9);// call early, so it can be overridden by plugins
// per theme review:
// these calls to add_editor_style and add_theme_support
// MUST be hooked to after_setup_theme
function bliss_add_editor_styles() {
/* Editor styles, recommended by ThemeCheck. */
// http://codex.wordpress.org/Function_Reference/add_editor_style
add_editor_style( 'css/admin.css' );
/* theme support, as recommended by ThemeCheck: */
add_theme_support('post-thumbnails');
add_theme_support('custom-header');
add_theme_support('custom-background');
add_theme_support('title-tag');// since WordPress 4.1
/* theme support, as REQUIRED by ThemeCheck */
add_theme_support('automatic-feed-links');
// theme support for html5, introduced in bliss v.1.0.1
add_theme_support( 'html5', array( 'comment-list', 'comment-form', 'search-form', 'gallery', 'caption', 'widgets' ) );
// theme support for WooCommerce, as of Bliss version 1.0.6
add_theme_support('woocommerce');
}
add_action( 'after_setup_theme', 'bliss_add_editor_styles' );
function bliss_collapsing_nav_menu(){
$path = get_template_directory_uri() . '/js/collapsing-nav-menu.js';
wp_enqueue_script('collapsing_nav', $path, array(), '1', true);
}
add_action('wp_enqueue_scripts', 'bliss_collapsing_nav_menu');
// next, we include formatting.php
// which is concerned with menus, sidebars, and the "Read More" link.
require_once('includes/formatting.php');
// custom meta boxes.
require_once('includes/metaboxes.php');
// Sliders to go with those meta boxes.
require_once('includes/slideshows.php');
// pagination.
require_once('includes/pagination.php');
/* breadcrumbs */
require_once('includes/breadcrumbs.php');
?> ?>
\ No newline at end of file
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <?php
<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>> //header.php
//using the wordpress language_attributes function instead of hard-coding lang="en" for i18n...
?>
<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" <?php language_attributes(); ?>> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" <?php language_attributes(); ?>> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" <?php language_attributes(); ?>> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" <?php language_attributes(); ?>> <!--<![endif]-->
<head> <head>
<title><?php op_document_title(); ?></title> <meta charset="<?php bloginfo( 'charset' ); ?>">
<?php
$bliss_display_name = esc_attr(get_bloginfo('name'));
?>
<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" /> <meta name="viewport" content="width=device-width,initial-scale=1">
<?php op_head(); // Theme head hook ?> <link rel="profile" href="http://gmpg.org/xfn/11" />
<?php wp_head(); // WordPress head hook ?> <link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>">
<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" /> <!-- begin wp_head -->
<?php
wp_head();
?>
<!-- end wp_head -->
</head> </head>
<body> <body <?php body_class(); ?>>
<div id="body-container">
<a href="#contentLink" class="visuallyhidden">Skip navigation</a>
<div id="bliss_container" class="shadow <?php
// a future release will upgrade to object-oriented programming, to arrest the propagation of global variables.
global $bliss_corner_style;
$bliss_corner_style = of_get_option('bliss_corner_style', 'square');
if($bliss_corner_style == 'rounded'){
_e( ' rounded', 'bliss');
}
?>">
<header class="site-header clearfix <?php
// header navigation menu style.
$bliss_header_nav_style = of_get_option('bliss_header_nav_style', 'full_width');//full_width
if($bliss_header_nav_style == 'full_width'){
_e(' no-button-nav', 'bliss');
}
?>">
<h1 class="logo">
<a href="<?php
echo home_url('/');//appends a trailing slash
?>" title="<?php printf( '%s : %s', esc_attr( get_bloginfo( 'name' ) ), esc_attr( get_bloginfo('description') ) ); ?>">
<?php
// logo to display here, if you have one.
$logo = of_get_option('bliss_logo');
if($logo){
printf('<img src="%s" alt="%s" />', esc_url($logo), $bliss_display_name);
}else{
//otherwise:
printf('<span class="logotext">%s</span>', $bliss_display_name);
}
?>
</a>
</h1>
<!-- optional tagline display. -->
<?php
$site_slogan = of_get_option('bliss_slogan');
if($site_slogan){
$site_slogan = esc_html($site_slogan);
}else{
$site_slogan = esc_html(get_bloginfo('description'));
}
printf('
<h2 class="site-slogan">
%s
</h2>', $site_slogan);
?>
<?php
// the search form.
get_search_form();//you could move this to the sidebar, but you'd have to modify the CSS to prevent it from overflowing.
if($bliss_header_nav_style == 'button'){
<?php op_before_header(); ?> // the button-style nav menu is within the header element.
<div id="header"> ?>
<<?php echo op_header_tag(); ?> id="site-title">
<a href="<?php bloginfo('url'); ?>" title="<?php bloginfo('name'); ?>"><span><?php bloginfo('name'); ?></span></a>
</<?php echo op_header_tag(); ?>>
<<?php echo op_desc_tag(); ?> id="site-description"> <!-- primary navigation menu. -->
<?php bloginfo('description'); ?>
</<?php echo op_desc_tag(); ?>> <div id="headerNavWrap" class="bliss-header-nav">
<?php
wp_nav_menu(array(
'theme_location' => 'header-nav',
'container' => 'nav',
'container_id' => 'headerNav'
));
?>
</div>
</header>
<?php
}else{
// the full-width style nav menu is below the header element.
?>
</header>
<div id="headerNavWrap" class="bliss-header-nav bliss-full-wrap">
<?php
wp_nav_menu(array(
'theme_location' => 'header-nav',
'container' => 'nav',
'container_id' => 'headerNav',
'container_class' => 'clearfix bliss-full-width-nav'
));
?>
</div> </div>
<?php op_after_header(); ?> <?php
}
// display the slideshow, if one has been attached to the current page.
bliss_slideshow();
?>
<div id="wrapper">
<div id="bliss_main" role="main">
<a id="contentLink" class="visuallyhidden">&nbsp;</a>
\ No newline at end of file
<div id="container">
<div id="<?php echo op_page_id(); ?>" class="<?php echo op_page_class(); ?>">
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment