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.
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(' — ', __('« novější příspěvky'), __('starší příspěvky »')); ?> 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(); ?>
Přidáno: 9. července 2008
© 2005-08 Michal Pelikán, http://uzitecne.mpelikan.com/komentare-wordpress.html