<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[BuddyPress][14009] trunk/docs/user: Documentation: explain the `bp-custom.php` file to advanced users</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { white-space: pre-line; overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="http://buddypress.trac.wordpress.org/changeset/14009">14009</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"http://buddypress.trac.wordpress.org/changeset/14009","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>imath</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2024-08-19 19:58:18 +0000 (Mon, 19 Aug 2024)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Documentation: explain the `bp-custom.php` file to advanced users

Closes https://github.com/buddypress/buddypress/pull/363</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkdocsuseradvancedREADMEmd">trunk/docs/user/advanced/README.md</a></li>
<li><a href="#trunkdocsusermanifestjson">trunk/docs/user/manifest.json</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkdocsuseradvancedfunctionalitiesmd">trunk/docs/user/advanced/functionalities.md</a></li>
<li><a href="#trunkdocsuserassetsbpcustomtadapng">trunk/docs/user/assets/bp-custom-tada.png</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkdocsuseradvancedREADMEmd"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/docs/user/advanced/README.md</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/docs/user/advanced/README.md        2024-08-19 19:37:13 UTC (rev 14008)
+++ trunk/docs/user/advanced/README.md  2024-08-19 19:58:18 UTC (rev 14009)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,4 +1,5 @@
</span><span class="cx" style="display: block; padding: 0 10px"> # Advanced BuddyPress customizations
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-- Customizing functionalities
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+- Customizing templates
+- [Customizing functionalities](functionalities.md)
</ins><span class="cx" style="display: block; padding: 0 10px"> - [Customizing texts](texts.md)
</span></span></pre></div>
<a id="trunkdocsuseradvancedfunctionalitiesmd"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/docs/user/advanced/functionalities.md</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/docs/user/advanced/functionalities.md                               (rev 0)
+++ trunk/docs/user/advanced/functionalities.md 2024-08-19 19:58:18 UTC (rev 14009)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,43 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+# Customizing functionalities
+
+As BuddyPress is a WordPress plugin using a lot WordPress [hooks](https://developer.wordpress.org/plugins/hooks/), it's pretty easy to adjust BP behavior to include your tiny customizations (You may include them into a plugin when it becomes too heavy!).
+
+You may have heard you can add custom code into the `functions.php` file of your [active theme](https://developer.wordpress.org/themes/basics/theme-functions/) (1) or about adding this custom code into a file you drop inside the [Must Use (MU) plugins directory](https://developer.wordpress.org/advanced-administration/plugins/mu-plugins/) (eg: `/wp-content/mu-plugins/custom-code.php`) of your WordPress site (2). Of course these 2 ways will work to hook your custom code to BuddyPress [actions](https://developer.wordpress.org/plugins/hooks/actions/) or [filters](https://developer.wordpress.org/plugins/hooks/filters/). But both ways can be problematic:
+
+1. When using the `functions.php` file of your active theme: your BuddyPress custom code will only fire when this theme is active. When you switch your site to another theme, you'll need to copy/paste this code into the new activated theme.
+2. If using a file inside the MU Plugins directory will make your BuddyPress custom code load no matter what theme is active, you'll need to check BuddyPress is active as soon as you use a BuddyPress function outside of the context of one of the many BuddyPress hooks the plugin is offering (which is also the case about the `functions.php` file of your active theme btw!).
+
+## bp-custom.php
+
+To take no risks and be sure that your BuddyPress custom code is only loaded when BuddyPress is active and early enough in the WordPress loading process, we strongly advise you to use the `bp-custom.php` file instead of previous ways.
+
+`bp-custom.php` is a file that resides in your WordPress `plugins` folder where you can add a bunch of custom code hacks and modifications to BuddyPress. It does not exist by default. If you don’t have a file located at `/wp-content/plugins/bp-custom.php`, go ahead and create a blank file with the following:
+
+```php
+<?php
+/**
+ * Here resides my awesome BuddyPress functionality customizations!
+ *
+ * Using this file is making sure the custom code is loaded when
+ * BuddyPress is activated and ready to power the community area
+ * of my WordPress site.
+ */  
+
+// Exit if accessed directly.
+if ( ! defined( 'ABSPATH' ) ) {
+       exit;
+}
+```
+
+Next, save the file as `bp-custom.php` and verify that this file is located at `/wp-content/plugins/`. When you'll need to add some customizations to BuddyPress, you'll be able to use this file! If you want to test it, here's a custom hook you can have fun with:
+
+```php
+function say_hi_just_before_the_members_list() {
+       printf( '<p>%s</p>', esc_html__( 'Howdy Buddy!' ) );
+}
+add_action( 'bp_before_directory_members_page', 'say_hi_just_before_the_members_list' );
+```
+
+Going to your Members directory, you should get:
+
+![Tada](../assets/bp-custom-tada.png)
</ins></span></pre></div>
<a id="trunkdocsuserassetsbpcustomtadapng"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/docs/user/assets/bp-custom-tada.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx" style="display: block; padding: 0 10px">Index: trunk/docs/user/assets/bp-custom-tada.png
</span><span class="cx" style="display: block; padding: 0 10px">===================================================================
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">--- trunk/docs/user/assets/bp-custom-tada.png    2024-08-19 19:37:13 UTC (rev 14008)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+++ trunk/docs/user/assets/bp-custom-tada.png     2024-08-19 19:58:18 UTC (rev 14009)
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/docs/user/assets/bp-custom-tada.png
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:mime-type</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+image/png
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunkdocsusermanifestjson"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/docs/user/manifest.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/docs/user/manifest.json     2024-08-19 19:37:13 UTC (rev 14008)
+++ trunk/docs/user/manifest.json       2024-08-19 19:58:18 UTC (rev 14009)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -162,6 +162,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">                "parent": null
</span><span class="cx" style="display: block; padding: 0 10px">        },
</span><span class="cx" style="display: block; padding: 0 10px">        {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                "title": "Customizing functionalities",
+               "slug": "advanced-functionalities",
+               "markdown_source": "../user/advanced/functionalities.md",
+               "parent": null
+       },
+       {
</ins><span class="cx" style="display: block; padding: 0 10px">                 "title": "BuddyPress Components",
</span><span class="cx" style="display: block; padding: 0 10px">                "slug": "components",
</span><span class="cx" style="display: block; padding: 0 10px">                "markdown_source": "../user/components/README.md",
</span></span></pre>
</div>
</div>

</body>
</html>