Иногда разработчику WordPress могут понадобиться пользовательские циклы, которые не могут быть созданы стандартными циклами, такими как категория, автор, индекс, дата, архив, таксономия и т. Д. Одним из них являются « посты, которые я прокомментировал ». На сайтах вопросов и ответов это означает «вопросы, на которые я отвечал», поэтому это может понадобиться многим разработчикам. На основе этого урока мы можем создать другие пользовательские циклы. Давайте создадим этот раздел.
Шаг 1
Перейдите в папку вашей темы и создайте файл 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. Он будет использоваться для отображения нашего пользовательского цикла.
Шаг 2
Оставайтесь в папке вашей темы и создайте второй файл с именем 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;
|
Этот файл предназначен для генерации нашего пользовательского цикла в файле шаблона.
Шаг 3
Откройте файл функций вашей темы (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;
}
|
Эта пара функций и фильтра предназначена для получения идентификатора страницы, который необходим для построения нумерации страниц на сайтах с постоянными ссылками.
Шаг 4
Наконец, перейдите на свою панель инструментов, создайте новую страницу из Pages-> Add new и назовите ее «myanswers», по умолчанию ее слаг будет myanswers. Перед публикацией выберите шаблон для этой страницы. В виджете шаблона вы увидите выпадающий список, который содержит опцию myanswers. Выберите это.
После выбора опции myanswers нажмите кнопку «Опубликовать».
Выполнено!
Теперь вы можете использовать URL-адрес yoursite.com/myanswers в качестве страницы, которая отображает цикл сообщений, которые вы прокомментировали. И, конечно, не только вы, каждый зарегистрированный пользователь может увидеть своего.