В прошлом месяце мы рассмотрели основы BuddyPress и то, как вы можете использовать их для расширения социальных сетей в ваших проектах. Ответ был отличным, и многие попросили обучающие темы. Итак, в этой серии из трех частей мы объясним некоторые основные элементы API-интерфейса BuddyPress и распакуем, как создать собственную дочернюю тему, которая выдержит обновления как BuddyPress, так и WordPress .
Поскольку все больше и больше клиентов ищут социальные сети, мы изучили основы BuddyPress и влияние, которое он может оказать на ваши проекты. Теперь мы хотим погрузиться в разработку дочерних тем, настроенных в соответствии с вашими потребностями, которые будут обновлять BuddyPress и WordPress. Недавно я искал в репозитории тем совместимые с BuddyPress темы и получил 19 потрясающих результатов! Излишне говорить, что это рынок, который может использовать некоторые разработки. Хотя существуют плагины, которые могут сделать ваши темы совместимыми с BuddyPress, я всегда поддерживаю понимание того, как сделать что-то самостоятельно, и не полагаться полностью на плагины. Кроме того, создание базовой дочерней темы — это простой процесс, который стоит изучить, если вы планируете разрабатывать с BuddyPress.
Что мы будем делать
В этом руководстве я расскажу вам о некоторых основных элементах API BuddyPress и основных шагах по созданию настраиваемой дочерней темы BuddyPress. К концу этого урока вы сможете понять:
- Как использовать теги шаблонов BuddyPress
- Как распознать и настроить петли BuddyPress
- Как использовать условные обозначения BuddyPress в ваших темах
- Как создать и редактировать базовую дочернюю тему BuddyPress
Этот учебник заложит основу для следующих двух частей, которые будут содержать более углубленные приемы при работе с конкретными элементами в BuddyPress, такими как группы и форумы.
Начиная с BuddyPress API
Если вы работали с WordPress, то знаете, как важно понимать, как работать с его конкретными функциями, действиями, хуками и фильтрами. Вы также поняли, что когда вы лучше понимаете эти вещи, ваши проекты развиваются быстрее, и вы можете более полно погрузиться в настройку тем и плагинов. С BuddyPress нет ничего другого.
Сначала я хочу рассказать вам о некоторых ключевых элементах API-интерфейса BuddyPress: теги шаблонов, циклы и условные выражения. Я надеюсь, что, изучая эти элементы и затем создавая дочернюю тему, вы сможете взять написанное здесь и применить его для создания собственных пользовательских дочерних тем BuddyPress.
Работа с тегами шаблонов BuddyPress
Для начала давайте взглянем на функции BuddyPress, которые являются ключевыми для разработки темы — шаблоны тегов. Кодекс BuddyPress имеет список этих здесь, а также для вашей справки. Эти теги шаблонов жизненно необходимы для индивидуальной настройки ваших тем, и, как предложил Дэн Дэвис в своей недавней статье wp.tutsplus, некоторые из них должны быть у вас при быстром наборе, если вы планируете много заниматься разработкой тем в BuddyPress. Некоторые из них точно такие же, как теги шаблонов в WordPress, что также должно сэкономить вам время, если у вас есть опыт разработки шаблонов в WordPress.
Вот краткий список некоторых шаблонных тегов от верхнего до нижнего колонтитула для использования в разработке вашей темы:
- get_header () — тот же тег шаблона, что и WordPress. Это включает файл header.php вашей темы.
- bp_get_loggedin_user_nav () — отображает ссылки навигации по сайту для зарегистрированных пользователей. Он также добавляет «текущий выбранный» класс к просматриваемому элементу навигации, так что вы можете создать собственный CSS для изменения отображения этого элемента списка.
- содержимое()
- the_excerpt
- the_tags ()
- the_category ()
- 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 ()
- 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 ()
- get_footer ()
Заголовок и навигация
Пост и форматирование контента
Эти шаблонные теги — это те же теги, которые используются для форматирования и отображения контента в WordPress. Они также работают в том же цикле WordPress. Чтобы увидеть пример этого в действии, откройте тему bp-default и откройте index.php. Строки 15-61 дают отличный пример цикла WordPress, работающего в BuddyPress.
Информация о пользователе и участнике
Чтобы увидеть эти теги в действии, откройте members / member-loop.php и members / single.php в bp-default.
группы
Чтобы увидеть эти теги в действии, откройте groups / groups-loop.php и groups / single.php в bp-default.
Мероприятия
Формы поиска
Включает
пагинация
В дополнение к этому, существуют другие теги шаблона нумерации страниц для разных типов контента. Просто замените слово «группы» в приведенных выше тегах шаблона словами: форум, блоги, group_members или сообщения, чтобы включить ссылки или счет для того цикла, который вы используете. Эти петли более подробно рассматриваются ниже.
нижний колонтитул
Работа с BuddyPress Loops
Как я уже упоминал выше, вы можете использовать цикл WordPress по умолчанию в своих темах для отображения сообщений и публикации мета-содержимого. BuddyPress также содержит свои собственные циклы, каждый из которых отвечает за отображение специфичных для BuddyPress типов контента. BuddyPress включает в себя циклы для: групп, участников, потока активности, тем форума, блогов, участников группы, личных сообщений и данных профиля. Хотя каждый из них выглядит очень похоже на стандартный цикл WordPress, каждый из них имеет свои специфические переменные, которые также позволяют большую настройку.
Обязательно погрузитесь в файлы темы bp-default, чтобы лучше понять циклы и их конкретное использование. Каждый из типов контента будет иметь папку, в которой находится определенный файл цикла.
Давайте рассмотрим обзор каждого из них и некоторые конкретные способы настройки их отображения.
Группы Loop
Цикл групп используется для отображения списка групп сайтов. Цикл выглядит так:
| 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.
Форум Темы Loop
Цикл тем на форуме используется для отображения списка тем на форумах, кто опубликовал последнюю по этой теме и сколько всего сообщений в теме, помимо прочего. Цикл выглядит так:
| 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 — используется в сочетании с типом «теги» для возврата только определенных тем по ключевому слову.
Blogs Loop
Цикл блогов используется для отображения списка блогов пользователей. Цикл выглядит так:
| 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 — по умолчанию это возвращает активные блоги, но вы также можете использовать аргументы: самые новые и случайные.
- на страницу
Члены группы Loop
Этот цикл используется для отображения членов определенной группы.
| 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;?> | 
Личные сообщения Loop
Цикл личных сообщений используется для отображения личных сообщений пользователю. Он также включает в себя хороший список тегов шаблона для настройки его отображения.
| 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 .
Чтобы получить полный список, нажмите здесь .
Создание детской темы BuddyPress
Теперь давайте перейдем к разговору об 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.
Дублировать, перемещать и редактировать
Поскольку дочерняя тема активирована и активна, для редактирования шаблона мы просто делаем следующее:
- Дублируйте файл, который мы хотим редактировать, из темы bp-default.
- Переместите дублированный файл — с тем же именем файла — в нашу новую папку дочерней темы. Вы также можете скопировать старый файл в новую папку темы.
- Отредактируйте файл. При редактировании вы сразу заметите изменения в внешнем виде вашей темы.
Для быстрого примера того, как это сделать, давайте посмотрим на добавление пользовательского меню заголовка, которое я преподавал в учебнике BuddyPress в прошлом месяце.
- Скопируйте header.php в вашу новую папку темы.
-   Откройте пустой файл functions.php, который вы создали ранее, и добавьте следующее:
01020304050607080910111213<php//Register Custom Menufunction register_bp_default_menus() {register_nav_menus(array( ‘header-menu’ => ( ‘Header Menu’ )));}add_action( ‘init’, ‘register_bp_default_menus’ );?>
-   Теперь откройте header.php и замените строку 79 следующим текстом:
1<?php wp_nav_menu( array( ‘theme_location’ => ‘header-menu’, ‘container’ => false, ) );
- Теперь откройте свой сайт и посмотрите, как был удален старый список страниц. Перейдите в Внешний вид -> Меню и создайте новое меню заголовка!
Самое приятное, что это постоянное изменение, которое не будет удалено из-за обновления!
Вывод
В заключение, как я надеюсь, я уже неоднократно говорил, это основа, на которой вы можете опираться. Я надеюсь, что это руководство дало вам более глубокое понимание API BuddyPress и помогло вам лучше ознакомиться с элементами, составляющими тему BuddyPress. В следующих разделах мы подробно рассмотрим нашу текущую дочернюю тему, чтобы создать тему, которая выглядит и выглядит так, как мы хотим, с помощью шаблонных тегов, циклов и условных выражений. Делая это вместе, я надеюсь открыть для вас место, где вы сможете с комфортом создавать новые темы с помощью BuddyPress.
Спасибо за чтение, и я надеюсь, что я помог вам узнать что-то новое о тематике с BuddyPress и его API!



