Статьи

Создание пользовательского цикла «Посты, которые я прокомментировал»

Иногда разработчику WordPress могут понадобиться пользовательские циклы, которые не могут быть созданы стандартными циклами, такими как категория, автор, индекс, дата, архив, таксономия и т. Д. Одним из них являются « посты, которые я прокомментировал ». На сайтах вопросов и ответов это означает «вопросы, на которые я отвечал», поэтому это может понадобиться многим разработчикам. На основе этого урока мы можем создать другие пользовательские циклы. Давайте создадим этот раздел.


Перейдите в папку вашей темы и создайте файл myanswers.php , затем скопируйте и вставьте туда следующий код:

1
2
3
4
5
6
7
8
<?php /* Template Name: myanswers */ ?>
<?php
get_header();
<?php
get_template_part( ‘loop’, ‘myanswers’ );
?>
<?php get_sidebar();
<?php get_footer();

Мы только что создали файл шаблона под названием myanswers. Он будет использоваться для отображения нашего пользовательского цикла.


Оставайтесь в папке вашей темы и создайте второй файл с именем loop-myanswers.php. И вставьте следующий код в этот файл:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php
if($wp_query->query_vars[‘paged’]==0){$wp_query->query_vars[‘paged’]=1;}
$querystr = «
    SELECT $wpdb->posts.*
    FROM $wpdb->posts inner join $wpdb->comments on $wpdb->posts.ID=$wpdb->comments.comment_post_ID
    WHERE $wpdb->posts.post_status=’publish’ and $wpdb->comments.user_id=».wp_get_current_user()->ID.»
    GROUP BY $wpdb->posts.ID
    ORDER BY $wpdb->posts.post_date DESC «;
 
$lim_per_page=» limit «.($wp_query->query_vars[«posts_per_page»]*($wp_query->query_vars[‘paged’]-1)).»,».$wp_query->query_vars[«posts_per_page»];
 
$query_for_count = $wpdb->get_results($querystr, OBJECT);
$wp_query->max_num_pages=ceil($wpdb->num_rows/$wp_query->query_vars[«posts_per_page»]);
$querystr=$querystr.$lim_per_page;
$pageposts = $wpdb->get_results($querystr, OBJECT);
 ?>
 
<?php if ($pageposts): ?>
 <?php global $post;
 ?>
  
 <?php foreach ($pageposts as $post): ?>
 <?php setup_postdata($post);
  
<?php
/// THIS PART IS LOOP FROM TWENTYTEN, YOU CAN CHANGE IT HOWEVER YOU WANT BEGIN
?>
<div id=»post-<?php the_ID(); ?>» <?php post_class();
<h2 class=»entry-title»><a href=»<?php the_permalink(); ?>» title=»<?php printf( esc_attr__( ‘Permalink to %s’, ‘twentyten’ ),
the_title_attribute( ‘echo=0’ ) );
 
            <div class=»entry-meta»>
                <?php twentyten_posted_on();
            </div><!— .entry-meta —>
 
    <?php if ( is_archive() || is_search() ) : // Only display excerpts for archives and search.
            <div class=»entry-summary»>
                <?php the_excerpt();
            </div><!— .entry-summary —>
    <?php else : ?>
            <div class=»entry-content»>
                <?php the_content( __( ‘Continue reading <span class=»meta-nav»>→
                <?php wp_link_pages( array( ‘before’ => ‘<div class=»page-link»>’ . __( ‘Pages:’, ‘twentyten’ ), ‘after’ => ‘</div>’ ) );
            </div><!— .entry-content —>
    <?php endif;
 
            <div class=»entry-utility»>
                <?php if ( count( get_the_category() ) ) : ?>
                    <span class=»cat-links»>
                        <?php printf( __( ‘<span class=»%1$s»>Posted in
                    
                    <span class=»meta-sep»>|
                <?php endif;
                <?php
                    $tags_list = get_the_tag_list( », ‘, ‘ );
                    if ( $tags_list ):
                ?>
                    <span class=»tag-links»>
                        <?php printf( __( ‘<span class=»%1$s»>Tagged
                    
                    <span class=»meta-sep»>|
                <?php endif;
                <span class=»comments-link»><?php comments_popup_link( __( ‘Leave a comment’, ‘twentyten’ ), __( ‘1 Comment’, ‘twentyten’ ), __( ‘% Comments’, ‘twentyten’ ) );
                <?php edit_post_link( __( ‘Edit’, ‘twentyten’ ), ‘<span class=»meta-sep»>|
            </div><!— .entry-utility —>
        </div><!— #post-## —>
 
 <?php endforeach;
/// THIS PART IS LOOP FROM TWENTYTEN, YOU CAN CHANGE IT HOWEVER YOU WANT END
?>
 <?php else : ?>
    <h2 class=»center»>Not Found</h2>
    <p class=»center»>Sorry, but you are looking for something that isn’t here.</p>
    <?php include (TEMPLATEPATH . «/search.php»);
 <?php endif;
  
 <?php
echo $wp_query->max_num_pages;
 if ( $wp_query->max_num_pages > 1 ) : ?>
                <div id=»nav-below» class=»navigation»>
                    <div class=»nav-previous»><?php next_posts_link( __( ‘<span class=»meta-nav»>←
                    <div class=»nav-next»><?php previous_posts_link( __( ‘Next<span class=»meta-nav»>→
                </div><!— #nav-below —>
<?php endif;

Этот файл предназначен для генерации нашего пользовательского цикла в файле шаблона.


Откройте файл функций вашей темы (functions.php), добавьте эту функцию и примените фильтр к этому файлу:

01
02
03
04
05
06
07
08
09
10
11
12
13
add_filter(‘query_vars’, ‘parameter_queryvars’ );
function parameter_queryvars( $qvars )
{
/* Plugin Name: Parameter
Plugin URI: http://webopius.com/
Description: A plugin to allow parameters to be passed in the URL and recognized by WordPress
Author: Adam Boyse
Version: 1.0
Author URI: http://www.webopius.com/
*/
$qvars[] = ‘paged’;
return $qvars;
}

Эта пара функций и фильтра предназначена для получения идентификатора страницы, который необходим для построения нумерации страниц на сайтах с постоянными ссылками.


Наконец, перейдите на свою панель инструментов, создайте новую страницу из Pages-> Add new и назовите ее «myanswers», по умолчанию ее слаг будет myanswers. Перед публикацией выберите шаблон для этой страницы. В виджете шаблона вы увидите выпадающий список, который содержит опцию myanswers. Выберите это.

После выбора опции myanswers нажмите кнопку «Опубликовать».


Теперь вы можете использовать URL-адрес yoursite.com/myanswers в качестве страницы, которая отображает цикл сообщений, которые вы прокомментировали. И, конечно, не только вы, каждый зарегистрированный пользователь может увидеть своего.