Статьи

Разработка тем BuddyPress — Часть 1: API и циклы BuddyPress

В прошлом месяце мы рассмотрели основы BuddyPress и то, как вы можете использовать их для расширения социальных сетей в ваших проектах. Ответ был отличным, и многие попросили обучающие темы. Итак, в этой серии из трех частей мы объясним некоторые основные элементы API-интерфейса BuddyPress и распакуем, как создать собственную дочернюю тему, которая выдержит обновления как BuddyPress, так и WordPress .


Поскольку все больше и больше клиентов ищут социальные сети, мы изучили основы BuddyPress и влияние, которое он может оказать на ваши проекты. Теперь мы хотим погрузиться в разработку дочерних тем, настроенных в соответствии с вашими потребностями, которые будут обновлять BuddyPress и WordPress. Недавно я искал в репозитории тем совместимые с BuddyPress темы и получил 19 потрясающих результатов! Излишне говорить, что это рынок, который может использовать некоторые разработки. Хотя существуют плагины, которые могут сделать ваши темы совместимыми с BuddyPress, я всегда поддерживаю понимание того, как сделать что-то самостоятельно, и не полагаться полностью на плагины. Кроме того, создание базовой дочерней темы — это простой процесс, который стоит изучить, если вы планируете разрабатывать с BuddyPress.

В этом руководстве я расскажу вам о некоторых основных элементах API BuddyPress и основных шагах по созданию настраиваемой дочерней темы BuddyPress. К концу этого урока вы сможете понять:

  • Как использовать теги шаблонов BuddyPress
  • Как распознать и настроить петли BuddyPress
  • Как использовать условные обозначения BuddyPress в ваших темах
  • Как создать и редактировать базовую дочернюю тему BuddyPress

Этот учебник заложит основу для следующих двух частей, которые будут содержать более углубленные приемы при работе с конкретными элементами в BuddyPress, такими как группы и форумы.


Если вы работали с WordPress, то знаете, как важно понимать, как работать с его конкретными функциями, действиями, хуками и фильтрами. Вы также поняли, что когда вы лучше понимаете эти вещи, ваши проекты развиваются быстрее, и вы можете более полно погрузиться в настройку тем и плагинов. С BuddyPress нет ничего другого.

Сначала я хочу рассказать вам о некоторых ключевых элементах API-интерфейса BuddyPress: теги шаблонов, циклы и условные выражения. Я надеюсь, что, изучая эти элементы и затем создавая дочернюю тему, вы сможете взять написанное здесь и применить его для создания собственных пользовательских дочерних тем BuddyPress.

Для начала давайте взглянем на функции BuddyPress, которые являются ключевыми для разработки темы — шаблоны тегов. Кодекс BuddyPress имеет список этих здесь, а также для вашей справки. Эти теги шаблонов жизненно необходимы для индивидуальной настройки ваших тем, и, как предложил Дэн Дэвис в своей недавней статье wp.tutsplus, некоторые из них должны быть у вас при быстром наборе, если вы планируете много заниматься разработкой тем в BuddyPress. Некоторые из них точно такие же, как теги шаблонов в WordPress, что также должно сэкономить вам время, если у вас есть опыт разработки шаблонов в WordPress.

Вот краткий список некоторых шаблонных тегов от верхнего до нижнего колонтитула для использования в разработке вашей темы:

  • get_header () — тот же тег шаблона, что и WordPress. Это включает файл header.php вашей темы.
  • bp_get_loggedin_user_nav () — отображает ссылки навигации по сайту для зарегистрированных пользователей. Он также добавляет «текущий выбранный» класс к просматриваемому элементу навигации, так что вы можете создать собственный CSS для изменения отображения этого элемента списка.
  • Эти шаблонные теги — это те же теги, которые используются для форматирования и отображения контента в WordPress. Они также работают в том же цикле WordPress. Чтобы увидеть пример этого в действии, откройте тему bp-default и откройте index.php. Строки 15-61 дают отличный пример цикла WordPress, работающего в BuddyPress.

  • содержимое()
  • the_excerpt
  • the_tags ()
  • the_category ()
  • Чтобы увидеть эти теги в действии, откройте members / member-loop.php и members / single.php в bp-default.

  • bp_loggedin_user_avatar () — отображает текущий вошедший в систему аватар пользователя.
  • bp_loggedin_user_domain ()отображает текущий зарегистрированный URL пользователя.
  • bp_member_permalinkотображает URL страницы профиля пользователя.
  • bp_member_avatar — отображает аватар участника. Это можно использовать в цикле-члене для создания глобального списка пользователей.
  • bp_get_user_firstname ()
  • bp_group_member_joined_since ()
  • Чтобы увидеть эти теги в действии, откройте groups / groups-loop.php и groups / single.php в bp-default.

  • bp_group_permalink ()отображает ссылку на домашнюю страницу определенной группы.
  • bp_group_avatar () — отображает аватар группы.
  • bp_group_description_excerpt () — отображает описание группы, как указано администратором группы.
  • bp_get_group_name ()
  • bp_sitewide_activity_feed_link () — повторяет ссылку на RSS-канал активности сайта.
  • bp_directory_groups_search_form () — отображает форму поиска, которая будет искать во всех общедоступных группах и их активности.
  • bp_directory_forums_search_form () — отображает форму поиска, которая позволяет осуществлять поиск по содержанию форума.
  • bp_directory_members_search_form () — отображает форму поиска, которая позволяет осуществлять поиск на основе содержимого и информации участника.
  • locate_template () — используется для включения таких шаблонов, как боковая панель и формы поиска. Для включения боковой панели это выглядит так:
    1
    <?php locate_template( array( ‘sidebar.php’ ), true ) ;?>

    Вы также можете использовать этот тег шаблона для отображения шаблонов форм поиска. Для этого в действии не ищите ничего, кроме файла index.php bp-default.

  • bp_groups_pagination_count ()
  • bp_groups_pagination_links ()
  • bp_members_pagination_count ()
  • bp_members_pagination_links ()
  • bp_activity_pagination_count ()
  • bp_activity_pagination_links ()
  • В дополнение к этому, существуют другие теги шаблона нумерации страниц для разных типов контента. Просто замените слово «группы» в приведенных выше тегах шаблона словами: форум, блоги, group_members или сообщения, чтобы включить ссылки или счет для того цикла, который вы используете. Эти петли более подробно рассматриваются ниже.

  • get_footer ()

Как я уже упоминал выше, вы можете использовать цикл WordPress по умолчанию в своих темах для отображения сообщений и публикации мета-содержимого. BuddyPress также содержит свои собственные циклы, каждый из которых отвечает за отображение специфичных для BuddyPress типов контента. BuddyPress включает в себя циклы для: групп, участников, потока активности, тем форума, блогов, участников группы, личных сообщений и данных профиля. Хотя каждый из них выглядит очень похоже на стандартный цикл WordPress, каждый из них имеет свои специфические переменные, которые также позволяют большую настройку.

Обязательно погрузитесь в файлы темы bp-default, чтобы лучше понять циклы и их конкретное использование. Каждый из типов контента будет иметь папку, в которой находится определенный файл цикла.

Давайте рассмотрим обзор каждого из них и некоторые конкретные способы настройки их отображения.

Цикл групп используется для отображения списка групп сайтов. Цикл выглядит так:

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
     
    <?php if ( bp_has_groups() ) : ?>
  
    <div class=»pagination»>
  
        <div class=»pag-count» id=»group-dir-count»>
            <?php bp_groups_pagination_count() ?>
        </div>
  
        <div class=»pagination-links» id=»group-dir-pag»>
            <?php bp_groups_pagination_links() ?>
        </div>
  
    </div>
  
    <ul id=»groups-list» class=»item-list»>
    <?php while ( bp_groups() ) : bp_the_group();
  
        <li>
            <div class=»item-avatar»>
                <a href=»<?php bp_group_permalink() ?>»><?php bp_group_avatar( ‘type=thumb&width=50&height=50’ ) ?></a>
            </div>
  
            <div class=»item»>
                <div class=»item-title»><a href=»<?php bp_group_permalink() ?>»><?php bp_group_name() ?></a></div>
                <div class=»item-meta»><span class=»activity»><?php printf( __( ‘active %s ago’, ‘buddypress’ ), bp_get_group_last_active() ) ?>
  
                <div class=»item-desc»><?php bp_group_description_excerpt() ?></div>
  
                <?php do_action( ‘bp_directory_groups_item’ ) ?>
            </div>
  
            <div class=»action»>
                <?php bp_group_join_button() ?>
  
                <div class=»meta»>
                    <?php bp_group_type() ?> / <?php bp_group_member_count() ?>
                </div>
  
                <?php do_action( ‘bp_directory_groups_actions’ ) ?>
            </div>
  
            <div class=»clear»></div>
        </li>
  
    <?php endwhile;
    </ul>
  
    <?php do_action( ‘bp_after_groups_loop’ ) ?>
  
<?php else: ?>
  
    <div id=»message» class=»info»>
        <p><?php _e( ‘There were no groups found.’, ‘buddypress’ ) ?></p>
    </div>
  
<?php endif;

Следующие параметры являются наиболее полезными при настройке цикла групп:

  • type — по умолчанию это установлено как активное , но также может принимать следующие: новые, популярные, случайные, алфавитные, большинство форумов, большинство форумов.
  • per_page — по умолчанию цикл BuddyPress отображает 10 групп на странице, но, введя новый номер, вы можете изменить это.
  • user_id — указав идентификатор пользователя, будут показаны только те группы, в которые входит пользователь. Например, для отображения только тех групп, частью которых является текущий вошедший в систему пользователь, код будет выглядеть так:

Давайте рассмотрим пример цикла, настроенного с использованием вышеуказанных параметров. Сразу после открывающей скобки введите следующее:

1
2
3
4
5
6
7
8
         
$args = array(
     ‘type’ => ‘popular’,
     ‘max’ => 5,
     ‘user_id’ => $user_id
    );
     
if ( bp_has_groups ( $args ) ) { …

Поскольку мы используем несколько аргументов, я установил переменную с именем args, которая может обрабатывать массив. Затем я устанавливаю тип популярный, максимальный на страницу — 5, а user_id — текущий зарегистрированный идентификатор пользователя. После этого отобразятся 5 самых популярных групп, в которые входит текущий участник, а затем разбиты на остальные.

Цикл members используется для отображения списка текущих членов. Стандартный цикл членов выглядит следующим образом:

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
     
    <?php if ( bp_has_members() ) : ?>
  
    <div class=»pagination»>
  
        <div class=»pag-count» id=»member-dir-count»>
            <?php bp_members_pagination_count() ?>
        </div>
  
        <div class=»pagination-links» id=»member-dir-pag»>
            <?php bp_members_pagination_links() ?>
        </div>
  
    </div>
  
    <?php do_action( ‘bp_before_directory_members_list’ ) ?>
  
    <ul id=»members-list» class=»item-list»>
    <?php while ( bp_members() ) : bp_the_member();
  
        <li>
            <div class=»item-avatar»>
                <a href=»<?php bp_member_permalink() ?>»><?php bp_member_avatar() ?></a>
            </div>
  
            <div class=»item»>
                <div class=»item-title»>
                    <a href=»<?php bp_member_permalink() ?>»><?php bp_member_name() ?></a>
                    <?php if ( bp_get_member_latest_update() ) : ?>
                        <span class=»update»> — <?php bp_member_latest_update( ‘length=10’ ) ?>
                    <?php endif;
                </div>
                <div class=»item-meta»><span class=»activity»><?php bp_member_last_active() ?>
  
                <?php do_action( ‘bp_directory_members_item’ ) ?>
  
                <?php
                 /***
                  * If you want to show specific profile fields here you can,
                  * but it’ll add an extra query for each member in the loop
                  * (only one regadless of the number of fields you show):
                  *
                  * bp_member_profile_data( ‘field=the field name’ );
                  */
                ?>
            </div>
  
            <div class=»action»>
                <?php do_action( ‘bp_directory_members_actions’ ) ?>
            </div>
  
            <div class=»clear»></div>
        </li>
  
    <?php endwhile;
    </ul>
  
    <?php do_action( ‘bp_after_directory_members_list’ ) ?>
  
    <?php bp_member_hidden_fields() ?>
  
<?php else: ?>
  
    <div id=»message» class=»info»>
        <p><?php _e( «Sorry, no members were found.», ‘buddypress’ ) ?></p>
    </div>
  
<?php endif;

Чтобы углубиться, давайте немного разберем этот код. Первая и последняя строки имеют жизненно важное значение и говорят BuddyPress отображать только остальную часть нашего кода, если есть присутствующие участники, чтобы показать.

1
2
3
4
5
6
<?php if ( bp_has_members() ) : ?>
 
 
<?php endif;

Далее у нас есть теги шаблонов для нумерации. Существуют также теги шаблонов для нумерации других типов контента, таких как группы и блоги. Они написаны выше для вашей справки.

01
02
03
04
05
06
07
08
09
10
11
12
<div class=»pagination»>
 
    <div class=»pag-count» id=»member-dir-count»>
        <?php bp_members_pagination_count() ?>
    </div>
 
    <div class=»pagination-links» id=»member-dir-pag»>
        <?php bp_members_pagination_links() ?>
    </div>
 
</div>

Как видите, каждый цикл может быть разбит на части, раскрывающие больше информации о шаблонных тегах и их использовании. Только в этом цикле мы видим теги шаблона: bp_member_profile_data , bp_member_permalink , bp_member_avata r и bp_member_latest_update .

Аргумент bp_has_members () имеет несколько параметров, которые можно настроить для изменения отображаемого списка членов. Наиболее полезными являются:

  • тип — возвращает активных пользователей по умолчанию. Другие аргументы: новейшие, популярные, онлайн, алфавитные, случайные.
  • на страницу
  • Максимум
  • user_id — когда он указан, он возвращает только тех пользователей, которые являются друзьями с указанным номером пользователя.

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
     
    <?php if ( bp_has_activities() ) : ?>
  
    <div class=»pagination»>
        <div class=»pag-count»><?php bp_activity_pagination_count() ?></div>
        <div class=»pagination-links»><?php bp_activity_pagination_links() ?></div>
    </div>
  
    <ul id=»activity-stream» class=»activity-list item-list»>
  
    <?php while ( bp_activities() ) : bp_the_activity();
  
        <li class=»<?php bp_activity_css_class() ?>» id=»activity-<?php bp_activity_id() ?>»>
  
            <div class=»activity-avatar»>
                <a href=»<?php bp_activity_user_link() ?>»>
                    <?php bp_activity_avatar( ‘type=full&width=100&height=100’ ) ?>
                </a>
            </div>
  
            <div class=»activity-content»>
  
                <div class=»activity-header»>
                    <?php bp_activity_action() ?>
                </div>
  
                <?php if ( bp_get_activity_content_body() ) : ?>
                    <div class=»activity-inner»>
                        <?php bp_activity_content_body() ?>
                    </div>
                <?php endif;
  
                <?php do_action( ‘bp_activity_entry_content’ ) ?>
  
            </div>
        </li>
  
    <?php endwhile;
  
    </ul>
  
<?php else : ?>
    <div id=»message» class=»info»>
        <p><?php _e( ‘Sorry, there was no activity found. Please try a different filter.’, ‘buddypress’ ) ?></p>
    </div>
<?php endif;

Полезные параметры для цикла активности потока:

  • display_comments — когда установлено значение «true», это будет отображать комментарии к активности.
  • per_page — опять же, это устанавливает, сколько действий нужно показать перед разбиением на страницы BuddyPress.

Существуют и другие полезные советы по фильтрации активности в сети и добавлению поддержки комментирования на странице цикла потока активности в кодексе BuddyPress.

Цикл тем на форуме используется для отображения списка тем на форумах, кто опубликовал последнюю по этой теме и сколько всего сообщений в теме, помимо прочего. Цикл выглядит так:

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
     
    <?php if ( bp_has_forum_topics() ) : ?>
  
    <div class=»pagination»>
  
        <div id=»post-count» class=»pag-count»>
            <?php bp_forum_pagination_count() ?>
        </div>
  
        <div class=»pagination-links» id=»topic-pag»>
            <?php bp_forum_pagination() ?>
        </div>
  
    </div>
  
    <table class=»forum»>
  
        <tr>
            <th id=»th-title»><?php _e( ‘Topic Title’, ‘buddypress’ ) ?></th>
            <th id=»th-poster»><?php _e( ‘Latest Poster’, ‘buddypress’ ) ?></th>
  
            <?php if ( !bp_is_group_forum() ) : ?>
                <th id=»th-group»><?php _e( ‘Posted In Group’, ‘buddypress’ ) ?></th>
            <?php endif;
  
            <th id=»th-postcount»><?php _e( ‘Posts’, ‘buddypress’ ) ?></th>
            <th id=»th-freshness»><?php _e( ‘Freshness’, ‘buddypress’ ) ?></th>
        </tr>
  
        <?php while ( bp_forum_topics() ) : bp_the_forum_topic();
  
        <tr class=»<?php bp_the_topic_css_class() ?>»>
            <td class=»td-title»>
                <a class=»topic-title» href=»<?php bp_the_topic_permalink() ?>» title=»<?php bp_the_topic_title() ?> — <?php _e( ‘Permalink’, ‘buddypress’ ) ?>»>
                    <?php bp_the_topic_title() ?>
                </a>
            </td>
            <td class=»td-poster»>
                <a href=»<?php bp_the_topic_permalink() ?>»><?php bp_the_topic_last_poster_avatar( ‘type=thumb&width=20&height=20’ ) ?></a>
                <div class=»poster-name»><?php bp_the_topic_last_poster_name() ?></div>
            </td>
  
            <?php if ( !bp_is_group_forum() ) : ?>
                <td class=»td-group»>
                    <a href=»<?php bp_the_topic_object_permalink() ?>»><?php bp_the_topic_object_avatar( ‘type=thumb&width=20&height=20’ ) ?></a>
                    <div class=»object-name»><a href=»<?php bp_the_topic_object_permalink() ?>» title=»<?php bp_the_topic_object_name() ?>»><?php bp_the_topic_object_name() ?></a></div>
                </td>
            <?php endif;
  
            <td class=»td-postcount»>
                <?php bp_the_topic_total_posts() ?>
            </td>
            <td class=»td-freshness»>
                <?php bp_the_topic_time_since_last_post() ?>
            </td>
        </tr>
  
        <?php endwhile;
  
    </table>
  
<?php else: ?>
  
    <div id=»message» class=»info»>
        <p><?php _e( ‘Sorry, there were no forum topics found.’, ‘buddypress’ ) ?></p>
    </div>
  
<?php endif;?>

Полезные параметры для цикла тем форума:

  • type — по умолчанию цикл извлекает последние или новейшие темы, но вы можете использовать следующие аргументы: популярные, неотвеченные, теги. Если вы выбираете «теги», то вы также должны указать особые условия поиска.
  • forum_id — указав это, вы извлекаете темы форума только из указанного идентификатора форума.
  • search_terms — используется в сочетании с типом «теги» для возврата только определенных тем по ключевому слову.

Цикл блогов используется для отображения списка блогов пользователей. Цикл выглядит так:

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
     
    <?php if ( bp_has_blogs() ) : ?>
  
    <div class=»pagination»>
  
        <div class=»pag-count» id=»blog-dir-count»>
            <?php bp_blogs_pagination_count() ?>
        </div>
  
        <div class=»pagination-links» id=»blog-dir-pag»>
            <?php bp_blogs_pagination_links() ?>
        </div>
  
    </div>
  
    <ul id=»blogs-list» class=»item-list»>
    <?php while ( bp_blogs() ) : bp_the_blog();
  
        <li>
            <div class=»item-avatar»>
                <a href=»<?php bp_blog_permalink() ?>»><?php bp_blog_avatar(‘type=thumb’) ?></a>
            </div>
  
            <div class=»item»>
                <div class=»item-title»><a href=»<?php bp_blog_permalink() ?>»><?php bp_blog_name() ?></a></div>
                <div class=»item-meta»><span class=»activity»><?php bp_blog_last_active() ?>
  
                <?php do_action( ‘bp_directory_blogs_item’ ) ?>
            </div>
  
            <div class=»action»>
                <div class=»generic-button blog-button visit»>
                    <a href=»<?php bp_blog_permalink() ?>» class=»visit» title=»<?php _e( ‘Visit Blog’, ‘buddypress’ ) ?>»><?php _e( ‘Visit Blog’, ‘buddypress’ ) ?></a>
                </div>
  
                <div class=»meta»>
                    <?php bp_blog_latest_post() ?>
                </div>
  
                <?php do_action( ‘bp_directory_blogs_actions’ ) ?>
            </div>
  
            <div class=»clear»></div>
        </li>
  
    <?php endwhile;
    </ul>
  
    <?php do_action( ‘bp_after_directory_blogs_list’ ) ?>
  
    <?php bp_blog_hidden_fields() ?>
  
<?php else: ?>
  
    <div id=»message» class=»info»>
        <p><?php _e( ‘Sorry, there were no blogs found.’, ‘buddypress’ ) ?></p>
    </div>
  
<?php endif;

Полезные параметры для цикла блогов:

  • type — по умолчанию это возвращает активные блоги, но вы также можете использовать аргументы: самые новые и случайные.
  • на страницу

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

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
     
    <?php if ( bp_group_has_members() ) : ?>
  
  <div id=»member-count» class=»pag-count»>
    <?php bp_group_member_pagination_count() ?>
  </div>
  
  <div id=»member-pagination» class=»pagination-links»>
    <?php bp_group_member_pagination() ?>
  </div>
  
  <ul id=»member-list» class=»item-list»>
  <?php while ( bp_group_members() ) : bp_group_the_member();
  
    <li>
      <!— Example template tags you can use —>
      <?php bp_group_member_avatar() ?>
      <?php bp_group_member_link() ?>
      <?php bp_group_member_joined_since() ?>
    </li>
  <?php endwhile;
  </ul>
  
<?php else: ?>
  
  <div id=»message» class=»info»>
    <p>This group has no members.</p>
  </div>
  
<?php endif;?>

Цикл личных сообщений используется для отображения личных сообщений пользователю. Он также включает в себя хороший список тегов шаблона для настройки его отображения.

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
     
      
  <div class=»pagination-count»>
    <?php bp_messages_pagination_count() ?>
  </div>
  
  <div class=»pagination-links»>
    <?php bp_messages_pagination() ?>
  </div>
  
  <ul id=»message-threads»>
  <?php while ( bp_message_threads() ) : bp_message_thread();
  
    <li>
      <!— Example template tags you can use —>
      <?php bp_message_thread_id() ?>
      <?php bp_message_thread_has_unread() ?>
      <?php bp_message_thread_unread_count() ?>
      <?php bp_message_thread_avatar() ?>
      <?php bp_message_thread_from() ?>
      <?php bp_message_thread_last_post_date() ?>
      <?php bp_message_thread_view_link() ?>
      <?php bp_message_thread_subject() ?>
      <?php bp_message_thread_excerpt() ?>
      <?php bp_message_thread_delete_link() ?>
    </li>
  <?php endwhile;
  </ul>
  
<?php else: ?>
  
  <div id=»message» class=»info»>
    <p>There are no messages to display.</p>
  </div>
  
<?php endif;?>

Цикл данных профиля используется для отображения данных профиля пользователя.

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
     
    <?php if ( bp_has_profile() ) : ?>
  <?php while ( bp_profile_groups() ) : bp_the_profile_group();
  
    <ul id=»profile-groups»>
    <?php if ( bp_profile_group_has_fields() ) : ?>
  
      <li>
        <?php bp_the_profile_group_name() ?>
  
        <ul id=»profile-group-fields»>
        <?php while ( bp_profile_fields() ) : bp_the_profile_field();
  
          <?php if ( bp_field_has_data() ) : ?>
          <li>
            <?php bp_the_profile_field_name() ?>
            <?php bp_the_profile_field_value() ?>
          </li>
          <?php endif;
  
        <?php endwhile;
        </ul>
      <li>
  
    <?php endif;
    </ul>
  
  <?php endwhile;
  
<?php else: ?>
  
  <div id=»message» class=»info»>
    <p>This user does not have a profile.</p>
  </div>
  
<?php endif;?>

Хотя BuddyPress содержит множество циклов, их легко понять и настроить. Изучая их, вы также должны лучше понять, как BuddyPress использует шаблонные теги и условные выражения в своей теме по умолчанию. Теперь давайте посмотрим, как BuddyPress использует условные теги шаблонов.

Условные обозначения — отличный способ легко и быстро разрабатывать пользовательские темы, которые меняются в зависимости от определенных условий. В BuddyPress эти условия будут начинаться с: bp_is_, и они используются для отображения определенного контента на определенных страницах. Например, если бы я хотел отобразить что-то конкретное на домашних страницах группы, я бы использовал следующий условный тег шаблона:

1
2
<?php if ( bp_is_group_home() ) : ?> Show this on group home pages <?

Мой условный тег шаблона здесь bp_is_group_home () . Чтобы отобразить что-то только на домашних страницах пользователя, я бы сделал то же, что и выше, но с условным тегом шаблона: bp_is_home или bp_is_my_profile .

Чтобы получить полный список, нажмите здесь .


Теперь давайте перейдем к разговору об API — вы можете встать и потянуться на минуту, если вам нужно, — и перейти к какому-то практическому применению. Опять же, мы пытаемся заложить основу для нашей пользовательской темы, которая будет представлена ​​в частях 2 и 3, поэтому давайте теперь посмотрим на создание дочерней темы для BuddyPress. Я не могу подчеркнуть важность этого достаточно. Позвольте мне поделиться личным опытом о том, насколько важен этот момент. Недавно я сделал ошибку новичка и непосредственно отредактировал основные файлы BuddyPress, не думая об обновлениях и новых выпусках. Могу поспорить, вы можете догадаться, что случилось дальше. Это верно. Я забыл сделать резервную копию, и новый выпуск переписал всю работу, которую я вложил в него. Я был довольно расстроен и должен был провести ненужные часы, исправляя беспорядок. Итак, чтобы помочь вам избежать этого, вот как создать дочернюю тему BuddyPress, которую мы будем редактировать и работать над ней в следующих двух частях этого учебного цикла.

Сначала создайте новую папку в папке wp-content / themes / с именем cool-bp-theme. Это будет наша детская тема BuddyPress. Если вы не понимаете, что такое «дочерняя тема», просто подумайте о ней как о теме, которая по-прежнему будет работать и функционировать, как тема bp-default, расположенная в wp-content / plugins / buddypress / bp-themes / bp-default / , но позволит редактировать и настраивать и не сломается при обновлении WordPress или BuddyPress. Это делается только путем изменения файлов шаблонов, расположенных в папке нашей дочерней темы. Он даже будет использовать таблицу стилей bp-default, но позволит импортировать новые таблицы стилей или перезаписать оригинальный CSS в style.css.

После создания новой папки я создаю новый пустой файл functions.php (потому что ожидаю отредактировать некоторые функции) и новый файл style.css со следующим кодом:

01
02
03
04
05
06
07
08
09
10
     
/*
Theme Name: Cool New BuddyPress Theme
Description: Cool new theme for BuddyPress.
Version: 1.0
Author: Adam Murray
Author URI: http://twodoorscreative.com/
Template: bp-default
Tags: buddypress, two-column, light
*/

Основным элементом, который здесь отличается, является строка шаблона , где я связываю это с темой bp-default, делая ее дочерней темой. Теперь я хочу пойти дальше и импортировать стандартные таблицы стилей bp-default. Для этого под этим кодом я ввожу:

1
2
3
4
5
/* Inherit the default theme styles */
@import url( ../../plugins/buddypress/bp-themes/bp-default/_inc/css/default.css );
  
/* Inherit the default theme adminbar styles */
@import url( ../../plugins/buddypress/bp-themes/bp-default/_inc/css/adminbar.css );

Теперь у вас есть основы дочерней темы BuddyPress. Если вы перейдете в «Внешний вид» -> «Темы» на панели инструментов WordPress, вы увидите дочернюю тему, и, когда вы ее активируете, вы должны увидеть именно то, что увидите, если активируете bp-default.

Поскольку дочерняя тема активирована и активна, для редактирования шаблона мы просто делаем следующее:

  1. Дублируйте файл, который мы хотим редактировать, из темы bp-default.
  2. Переместите дублированный файл — с тем же именем файла — в нашу новую папку дочерней темы. Вы также можете скопировать старый файл в новую папку темы.
  3. Отредактируйте файл. При редактировании вы сразу заметите изменения в внешнем виде вашей темы.

Для быстрого примера того, как это сделать, давайте посмотрим на добавление пользовательского меню заголовка, которое я преподавал в учебнике BuddyPress в прошлом месяце.

  1. Скопируйте header.php в вашу новую папку темы.
  2. Откройте пустой файл functions.php, который вы создали ранее, и добавьте следующее:
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    <php
            
           //Register Custom Menu
     
           function register_bp_default_menus() {
             register_nav_menus(
               array( ‘header-menu’ => ( ‘Header Menu’ ))
             );
           }
            
           add_action( ‘init’, ‘register_bp_default_menus’ );
            
           ?>
  3. Теперь откройте header.php и замените строку 79 следующим текстом:
    1
    <?php wp_nav_menu( array( ‘theme_location’ => ‘header-menu’, ‘container’ => false, ) );
  4. Теперь откройте свой сайт и посмотрите, как был удален старый список страниц. Перейдите в Внешний вид -> Меню и создайте новое меню заголовка!

Самое приятное, что это постоянное изменение, которое не будет удалено из-за обновления!


В заключение, как я надеюсь, я уже неоднократно говорил, это основа, на которой вы можете опираться. Я надеюсь, что это руководство дало вам более глубокое понимание API BuddyPress и помогло вам лучше ознакомиться с элементами, составляющими тему BuddyPress. В следующих разделах мы подробно рассмотрим нашу текущую дочернюю тему, чтобы создать тему, которая выглядит и выглядит так, как мы хотим, с помощью шаблонных тегов, циклов и условных выражений. Делая это вместе, я надеюсь открыть для вас место, где вы сможете с комфортом создавать новые темы с помощью BuddyPress.

Спасибо за чтение, и я надеюсь, что я помог вам узнать что-то новое о тематике с BuddyPress и его API!