Užitečné ... uzitecne.mpelikan.com

 

Komentáře ve Wordpressu na hlavní stránce

Wordpress, původně blogovací systém, se dá použít k různým účelům. Třeba jako znalostní báze. V tomto případě je vhodné mít zobrazené komentáře přímo na hlavní stránce (protože komentáře jsou k tématu, navíc je přidávají jen registovaní uživatelé), na stránkách archivu (kategorií) i ve výsledcích vyhledávání.

Řešením by mělo být prosté přidání funkce comments_template() do příslušné šablony. Ale ouha, nefunguje to.

Co s tím?

Po několika hodinách googlování jsem narazil na řešení. Je publikováno na stránkách wanderingstar.net.

Funkce comments_template() je definována v souboru \wp-includes\comment-template.php. Hned na začátku je podmínka, která omezuje použití této funkce jen na jednotlivé příspěvky.

Je proto nutné ji upravit, třeba takto:

 1: function comments_template( $file = '/comments.php' ) {
 2: 	global $wp_query, $withcomments, $post, $wpdb, $id, $comment, $user_login, $user_ID, $user_identity;
 3: 
 4: 	if ( ! (is_single() || is_page() || $withcomments || is_archive() || is_home() || is_search() ) )
 5: 		return;
 6: 
 7: 	$req = get_option('require_name_email');
 8: 	$commenter = wp_get_current_commenter();
 9: 	extract($commenter, EXTR_SKIP);
10: 
11: 	// TODO: Use API instead of SELECTs.
12: 	if ( $user_ID) {
13: 		$comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = '$post->ID' AND (comment_approved = '1' OR ( user_id = '$user_ID' AND comment_approved = '0' ) )  ORDER BY comment_date");
14: 	} else if ( empty($comment_author) ) { 
15: 		$comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = '$post->ID' AND comment_approved = '1' ORDER BY comment_date");
16: 	} else {
17: 		$author_db = $wpdb->escape($comment_author);
18: 		$email_db  = $wpdb->escape($comment_author_email);
19: 		$comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = '$post->ID' AND ( comment_approved = '1' OR ( comment_author = '$author_db' AND comment_author_email = '$email_db' AND comment_approved = '0' ) ) ORDER BY comment_date");
20: 	}
21: 
22: 	// keep $comments for legacy's sake (remember $table*? ;) )
23: 	$comments = $wp_query->comments = apply_filters( 'comments_array', $comments, $post->ID );
24: 	$wp_query->comment_count = count($wp_query->comments);
25: 
26: 	define('COMMENTS_TEMPLATE', true);
27: 	$include = apply_filters('comments_template', TEMPLATEPATH . $file );
28: 	if ( file_exists( $include ) )
29: 		require( $include );
30: 	else
31: 		require( ABSPATH . 'wp-content/themes/default/comments.php');
32: }

Hlavní změna je v podmínce na čtvrém řádku, kde kromě původních podmínek is_single(), is_page() a $withcomments jsem vlastně umožnil, aby funkce byla dostupna i v archivech, při vyhledávání a na hlavní stránce (is_archive(), is_search() a is_home()).

Zbývá doplnit do šablon (archive.php, home.php, search.php) funkci, která zavolá šablonu comments_template(). Podívejte se třeba na moji šablonu archive.php:

 1: <?php get_header(); ?>
 2: 
 3: <div id="content">
 4: 
 5: <div id="contentleft">
 6: 	<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
 7: 	<h1><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h1>
 8: 	<p><?php the_time('j.F.Y'); ?><br />
 9: 	Zařazeno pod: <?php the_category(', ') ?> | <?php comments_popup_link('Přidej komentář', '1 komentář', '% komentářů'); ?></p>
10: 	<?php the_content(__('Read more'));?>
11:   
12:   <?php comments_template(); // Get wp-comments.php template ?>
13:   <hr class="cleaner odstupDole" />
14:   
15: 	<?php endwhile; else: ?>
16: 
17: 	<p><?php _e('Vašemu zadání neodpovídá žádný příspěvek.'); ?></p><?php endif; ?>
18: 	<?php posts_nav_link(' &#8212; ', __('&laquo; novější příspěvky'), __('starší příspěvky &raquo;')); ?>
19: 	</div>
20: 
21: <div id="contentright">
22: 	<h2>Nejnovější</h2>
23: 	<ul><?php get_archives('postbypost', 10); ?></ul><br />
24: 	
25: 	<h2>Katergorie</h2>
26: 	<ul class="list-cats"><?php wp_list_cats('sort_column=name'); ?></ul><br />
27: 
28: 	<h2>Archiv</h2>
29: 	 <h3>Posledních 12 měsíců</h3>
30: 	<ul><?php wp_get_archives('type=monthly&limit=12'); ?></ul>
31: 	 <h3>Kompletní archiv</h3>
32: 	<ul><?php wp_get_archives('type=yearly'); ?></ul>
33: 	</div>
34: 
35: </div>
36: </div>
37: 
38: <!-- The main column ends  -->
39: 
40: <?php get_footer(); ?>

Nahoru ↑

Přidáno: 9. července 2008


© 2005-11 Michal Pelikán, http://uzitecne.mpelikan.com/komentare-wordpress.html | Tvorba www stránek | Vytisknout