[ Index ]

PHP Cross Reference of BuddyPress

title

Body

[close]

/src/bp-core/ -> bp-core-options.php (source)

   1  <?php
   2  /**
   3   * BuddyPress Options.
   4   *
   5   * @package BuddyPress
   6   * @subpackage Options
   7   * @since 1.6.0
   8   */
   9  
  10  // Exit if accessed directly.
  11  defined( 'ABSPATH' ) || exit;
  12  
  13  /**
  14   * Get the default site options and their values.
  15   *
  16   * Default values should not be set by calls to `get_option()` or `get_site_option()` due to
  17   * these causing load order problems with `bp_core_clear_root_options_cache()`; see #BP7227.
  18   *
  19   * @since 1.6.0
  20   *
  21   * @return array Filtered option names and values.
  22   */
  23  function bp_get_default_options() {
  24  
  25      // Default options.
  26      $options = array (
  27  
  28          /* Components ********************************************************/
  29  
  30          'bp-deactivated-components'            => array(),
  31  
  32          /* XProfile **********************************************************/
  33  
  34          // Base profile groups name.
  35          'bp-xprofile-base-group-name'          => 'Base',
  36  
  37          // Base fullname field name.
  38          'bp-xprofile-fullname-field-name'      => 'Name',
  39  
  40          /* Blogs *************************************************************/
  41  
  42          // Used to decide if blogs need indexing.
  43          'bp-blogs-first-install'               => false,
  44  
  45          /* Settings **********************************************************/
  46  
  47          // Disable the WP to BP profile sync.
  48          'bp-disable-profile-sync'              => false,
  49  
  50          // Hide the Toolbar for logged out users.
  51          'hide-loggedout-adminbar'              => false,
  52  
  53          // Avatar uploads.
  54          'bp-disable-avatar-uploads'            => false,
  55  
  56          // Cover image uploads.
  57          'bp-disable-cover-image-uploads'       => false,
  58  
  59          // Group Profile Photos.
  60          'bp-disable-group-avatar-uploads'      => false,
  61  
  62          // Group Cover image uploads.
  63          'bp-disable-group-cover-image-uploads' => false,
  64  
  65          // Allow users to delete their own accounts.
  66          'bp-disable-account-deletion'          => false,
  67  
  68          // Allow comments on post and comment activity items.
  69          'bp-disable-blogforum-comments'        => true,
  70  
  71          // The ID for the current theme package.
  72          '_bp_theme_package_id'                 => 'nouveau',
  73  
  74          // Email unsubscribe salt.
  75          'bp-emails-unsubscribe-salt'           => '',
  76  
  77          /* Groups ************************************************************/
  78  
  79          // @todo Move this into the groups component
  80          // Restrict group creation to super admins.
  81          'bp_restrict_group_creation'           => false,
  82  
  83          /* Akismet ***********************************************************/
  84  
  85          // Users from all sites can post.
  86          '_bp_enable_akismet'                   => true,
  87  
  88          /* Activity HeartBeat ************************************************/
  89  
  90          // HeartBeat is on to refresh activities.
  91          '_bp_enable_heartbeat_refresh'         => true,
  92  
  93          /* Legacy *********************************************/
  94  
  95          // Do not register the bp-default themes directory.
  96          '_bp_retain_bp_default'                => false,
  97  
  98          // Ignore deprecated code.
  99          '_bp_ignore_deprecated_code'           => true,
 100  
 101          /* Widgets **************************************************/
 102          'widget_bp_core_login_widget'                => false,
 103          'widget_bp_core_members_widget'              => false,
 104          'widget_bp_core_whos_online_widget'          => false,
 105          'widget_bp_core_recently_active_widget'      => false,
 106          'widget_bp_groups_widget'                    => false,
 107          'widget_bp_messages_sitewide_notices_widget' => false,
 108      );
 109  
 110      /**
 111       * Filters the default options to be set upon activation.
 112       *
 113       * @since 1.6.0
 114       *
 115       * @param array $options Array of default options to set.
 116       */
 117      return apply_filters( 'bp_get_default_options', $options );
 118  }
 119  
 120  /**
 121   * Add default options when BuddyPress is first activated.
 122   *
 123   * Only called once when BuddyPress is activated.
 124   * Non-destructive, so existing settings will not be overridden.
 125   *
 126   * @since 1.6.0
 127   */
 128  function bp_add_options() {
 129  
 130      // Get the default options and values.
 131      $options = bp_get_default_options();
 132  
 133      // Add default options.
 134      foreach ( $options as $key => $value ) {
 135          bp_add_option( $key, $value );
 136      }
 137  
 138      /**
 139       * Fires after the addition of default options when BuddyPress is first activated.
 140       *
 141       * Allows previously activated plugins to append their own options.
 142       *
 143       * @since 1.6.0
 144       */
 145      do_action( 'bp_add_options' );
 146  }
 147  
 148  /**
 149   * Delete default options.
 150   *
 151   * Hooked to bp_uninstall, it is only called once when BuddyPress is uninstalled.
 152   * This is destructive, so existing settings will be destroyed.
 153   *
 154   * Currently unused.
 155   *
 156   * @since 1.6.0
 157   */
 158  function bp_delete_options() {
 159  
 160      // Get the default options and values.
 161      $options = bp_get_default_options();
 162  
 163      // Add default options.
 164      foreach ( array_keys( $options ) as $key ) {
 165          delete_option( $key );
 166      }
 167  
 168      /**
 169       * Fires after the deletion of default options when BuddyPress is first deactivated.
 170       *
 171       * Allows previously activated plugins to append their own options.
 172       *
 173       * @since 1.6.0
 174       */
 175      do_action( 'bp_delete_options' );
 176  }
 177  
 178  /**
 179   * Add filters to each BP option, allowing them to be overloaded from inside the $bp->options array.
 180   *
 181   * @since 1.6.0
 182   */
 183  function bp_setup_option_filters() {
 184  
 185      // Get the default options and values.
 186      $options = bp_get_default_options();
 187  
 188      // Add filters to each BuddyPress option.
 189      foreach ( array_keys( $options ) as $key ) {
 190          add_filter( 'pre_option_' . $key, 'bp_pre_get_option' );
 191      }
 192  
 193      /**
 194       * Fires after the addition of filters to each BuddyPress option.
 195       *
 196       * Allows previously activated plugins to append their own options.
 197       *
 198       * @since 1.6.0
 199       */
 200      do_action( 'bp_setup_option_filters' );
 201  }
 202  
 203  /**
 204   * Filter default options and allow them to be overloaded from inside the $bp->options array.
 205   *
 206   * @since 1.6.0
 207   *
 208   * @param bool $value Optional. Default value false.
 209   * @return mixed False if not overloaded, mixed if set.
 210   */
 211  function bp_pre_get_option( $value = false ) {
 212      $bp = buddypress();
 213  
 214      // Remove the filter prefix.
 215      $option = str_replace( 'pre_option_', '', current_filter() );
 216  
 217      // Check the options global for preset value.
 218      if ( ! empty( $bp->options[ $option ] ) ) {
 219          $value = $bp->options[ $option ];
 220      }
 221  
 222      // Always return a value, even if false.
 223      return $value;
 224  }
 225  
 226  /**
 227   * Retrieve an option.
 228   *
 229   * This is a wrapper for {@link get_blog_option()}, which in turn stores settings data
 230   * (such as bp-pages) on the appropriate blog, given your current setup.
 231   *
 232   * The 'bp_get_option' filter is primarily for backward-compatibility.
 233   *
 234   * @since 1.5.0
 235   *
 236   * @param string $option_name The option to be retrieved.
 237   * @param string $default     Optional. Default value to be returned if the option
 238   *                            isn't set. See {@link get_blog_option()}.
 239   * @return mixed The value for the option.
 240   */
 241  function bp_get_option( $option_name, $default = '' ) {
 242      $value = get_blog_option( bp_get_root_blog_id(), $option_name, $default );
 243  
 244      /**
 245       * Filters the option value for the requested option.
 246       *
 247       * @since 1.5.0
 248       *
 249       * @param mixed $value The value for the option.
 250       */
 251      return apply_filters( 'bp_get_option', $value );
 252  }
 253  
 254  /**
 255   * Add an option.
 256   *
 257   * This is a wrapper for {@link add_blog_option()}, which in turn stores
 258   * settings data on the appropriate blog, given your current setup.
 259   *
 260   * @since 2.0.0
 261   *
 262   * @param string $option_name The option key to be set.
 263   * @param mixed  $value       The value to be set.
 264   * @return bool True on success, false on failure.
 265   */
 266  function bp_add_option( $option_name, $value ) {
 267      return add_blog_option( bp_get_root_blog_id(), $option_name, $value );
 268  }
 269  
 270  /**
 271   * Save an option.
 272   *
 273   * This is a wrapper for {@link update_blog_option()}, which in turn stores
 274   * settings data (such as bp-pages) on the appropriate blog, given your current
 275   * setup.
 276   *
 277   * @since 1.5.0
 278   *
 279   * @param string $option_name The option key to be set.
 280   * @param mixed  $value       The value to be set.
 281   * @return bool True on success, false on failure.
 282   */
 283  function bp_update_option( $option_name, $value ) {
 284      return update_blog_option( bp_get_root_blog_id(), $option_name, $value );
 285  }
 286  
 287  /**
 288   * Delete an option.
 289   *
 290   * This is a wrapper for {@link delete_blog_option()}, which in turn deletes
 291   * settings data (such as bp-pages) on the appropriate blog, given your current
 292   * setup.
 293   *
 294   * @since 1.5.0
 295   *
 296   * @param string $option_name The option key to be deleted.
 297   * @return bool True on success, false on failure.
 298   */
 299  function bp_delete_option( $option_name ) {
 300      return delete_blog_option( bp_get_root_blog_id(), $option_name );
 301  }
 302  
 303  /**
 304   * Copy BP options from a single site to multisite config.
 305   *
 306   * Run when switching from single to multisite and we need to copy blog options
 307   * to site options.
 308   *
 309   * This function is no longer used.
 310   *
 311   * @since 1.2.4
 312   * @deprecated 1.6.0
 313   *
 314   * @param array $keys Array of site options.
 315   * @return bool
 316   */
 317  function bp_core_activate_site_options( $keys = array() ) {
 318  
 319      if ( !empty( $keys ) && is_array( $keys ) ) {
 320          $bp = buddypress();
 321  
 322          $errors = false;
 323  
 324          foreach ( $keys as $key => $default ) {
 325              if ( empty( $bp->site_options[ $key ] ) ) {
 326                  $bp->site_options[ $key ] = bp_get_option( $key, $default );
 327  
 328                  if ( !bp_update_option( $key, $bp->site_options[ $key ] ) ) {
 329                      $errors = true;
 330                  }
 331              }
 332          }
 333  
 334          if ( empty( $errors ) ) {
 335              return true;
 336          }
 337      }
 338  
 339      return false;
 340  }
 341  
 342  /**
 343   * Fetch global BP options.
 344   *
 345   * BuddyPress uses common options to store configuration settings. Many of these
 346   * settings are needed at run time. Instead of fetching them all and adding many
 347   * initial queries to each page load, let's fetch them all in one go.
 348   *
 349   * @since 1.5.0
 350   *
 351   * @todo Use settings API and audit these methods.
 352   *
 353   * @return array $root_blog_options_meta List of options.
 354   */
 355  function bp_core_get_root_options() {
 356      global $wpdb;
 357  
 358      // Get all the BuddyPress settings, and a few useful WP ones too.
 359      $root_blog_options                   = bp_get_default_options();
 360      $root_blog_options['registration']   = '0';
 361      $root_blog_options['avatar_default'] = 'mysteryman';
 362      $root_blog_option_keys               = array_keys( $root_blog_options );
 363  
 364      // Do some magic to get all the root blog options in 1 swoop
 365      // Check cache first - We cache here instead of using the standard WP
 366      // settings cache because the current blog may not be the root blog,
 367      // and it's not practical to access the cache across blogs.
 368      $root_blog_options_meta = wp_cache_get( 'root_blog_options', 'bp' );
 369  
 370      if ( false === $root_blog_options_meta ) {
 371          $blog_options_keys      = "'" . join( "', '", (array) $root_blog_option_keys ) . "'";
 372          $blog_options_table        = bp_is_multiblog_mode() ? $wpdb->options : $wpdb->get_blog_prefix( bp_get_root_blog_id() ) . 'options';
 373          $blog_options_query     = "SELECT option_name AS name, option_value AS value FROM {$blog_options_table} WHERE option_name IN ( {$blog_options_keys} )";
 374          $root_blog_options_meta = $wpdb->get_results( $blog_options_query );
 375  
 376          // On Multisite installations, some options must always be fetched from sitemeta.
 377          if ( is_multisite() ) {
 378  
 379              /**
 380               * Filters multisite options retrieved from sitemeta.
 381               *
 382               * @since 1.5.0
 383               *
 384               * @param array $value Array of multisite options from sitemeta table.
 385               */
 386              $network_options = apply_filters( 'bp_core_network_options', array(
 387                  'tags_blog_id'       => '0',
 388                  'sitewide_tags_blog' => '',
 389                  'registration'       => '0',
 390                  'fileupload_maxk'    => '1500'
 391              ) );
 392  
 393              $current_site           = get_current_site();
 394              $network_option_keys    = array_keys( $network_options );
 395              $sitemeta_options_keys  = "'" . join( "', '", (array) $network_option_keys ) . "'";
 396              $sitemeta_options_query = $wpdb->prepare( "SELECT meta_key AS name, meta_value AS value FROM {$wpdb->sitemeta} WHERE meta_key IN ( {$sitemeta_options_keys} ) AND site_id = %d", $current_site->id );
 397              $network_options_meta   = $wpdb->get_results( $sitemeta_options_query );
 398  
 399              // Sitemeta comes second in the merge, so that network 'registration' value wins.
 400              $root_blog_options_meta = array_merge( $root_blog_options_meta, $network_options_meta );
 401          }
 402  
 403          // Loop through our results and make them usable.
 404          foreach ( $root_blog_options_meta as $root_blog_option ) {
 405              $root_blog_options[$root_blog_option->name] = $root_blog_option->value;
 406          }
 407  
 408          // Copy the options no the return val.
 409          $root_blog_options_meta = $root_blog_options;
 410  
 411          // Clean up our temporary copy.
 412          unset( $root_blog_options );
 413  
 414          wp_cache_set( 'root_blog_options', $root_blog_options_meta, 'bp' );
 415      }
 416  
 417      /**
 418       * Filters the global BP options.
 419       *
 420       * @since 1.5.0
 421       *
 422       * @param array $root_blog_options_meta Array of global BP options.
 423       */
 424      return apply_filters( 'bp_core_get_root_options', $root_blog_options_meta );
 425  }
 426  
 427  /**
 428   * Get a root option.
 429   *
 430   * "Root options" are those that apply across an entire installation, and are fetched only a single
 431   * time during a pageload and stored in `buddypress()->site_options` to prevent future lookups.
 432   * See {@see bp_core_get_root_options()}.
 433   *
 434   * @since 2.3.0
 435   *
 436   * @param string $option Name of the option key.
 437   * @return mixed Value, if found.
 438   */
 439  function bp_core_get_root_option( $option ) {
 440      $bp = buddypress();
 441  
 442      if ( ! isset( $bp->site_options ) ) {
 443          $bp->site_options = bp_core_get_root_options();
 444      }
 445  
 446      $value = '';
 447      if ( isset( $bp->site_options[ $option ] ) ) {
 448          $value = $bp->site_options[ $option ];
 449      }
 450  
 451      return $value;
 452  }
 453  
 454  /** Active? *******************************************************************/
 455  
 456  /**
 457   * Is profile syncing disabled?
 458   *
 459   * @since 1.6.0
 460   *
 461   * @param bool $default Optional. Fallback value if not found in the database.
 462   *                      Default: true.
 463   * @return bool True if profile sync is enabled, otherwise false.
 464   */
 465  function bp_disable_profile_sync( $default = false ) {
 466  
 467      /**
 468       * Filters whether or not profile syncing is disabled.
 469       *
 470       * @since 1.6.0
 471       *
 472       * @param bool $value Whether or not syncing is disabled.
 473       */
 474      return (bool) apply_filters( 'bp_disable_profile_sync', (bool) bp_get_option( 'bp-disable-profile-sync', $default ) );
 475  }
 476  
 477  /**
 478   * Is the Toolbar hidden for logged out users?
 479   *
 480   * @since 1.6.0
 481   *
 482   * @param bool $default Optional. Fallback value if not found in the database.
 483   *                      Default: true.
 484   * @return bool True if the admin bar should be hidden for logged-out users,
 485   *              otherwise false.
 486   */
 487  function bp_hide_loggedout_adminbar( $default = true ) {
 488  
 489      /**
 490       * Filters whether or not the toolbar is hidden for logged out users.
 491       *
 492       * @since 1.6.0
 493       *
 494       * @param bool $value Whether or not the toolbar is hidden.
 495       */
 496      return (bool) apply_filters( 'bp_hide_loggedout_adminbar', (bool) bp_get_option( 'hide-loggedout-adminbar', $default ) );
 497  }
 498  
 499  /**
 500   * Are members able to upload their own avatars?
 501   *
 502   * @since 1.6.0
 503   *
 504   * @param bool $default Optional. Fallback value if not found in the database.
 505   *                      Default: true.
 506   * @return bool True if avatar uploads are disabled, otherwise false.
 507   */
 508  function bp_disable_avatar_uploads( $default = true ) {
 509  
 510      /**
 511       * Filters whether or not members are able to upload their own avatars.
 512       *
 513       * @since 1.6.0
 514       *
 515       * @param bool $value Whether or not members are able to upload their own avatars.
 516       */
 517      return (bool) apply_filters( 'bp_disable_avatar_uploads', (bool) bp_get_option( 'bp-disable-avatar-uploads', $default ) );
 518  }
 519  
 520  /**
 521   * Are members able to upload their own cover images?
 522   *
 523   * @since 2.4.0
 524   *
 525   * @param bool $default Optional. Fallback value if not found in the database.
 526   *                      Default: false.
 527   * @return bool True if cover image uploads are disabled, otherwise false.
 528   */
 529  function bp_disable_cover_image_uploads( $default = false ) {
 530  
 531      /**
 532       * Filters whether or not members are able to upload their own cover images.
 533       *
 534       * @since 2.4.0
 535       *
 536       * @param bool $value Whether or not members are able to upload their own cover images.
 537       */
 538      return (bool) apply_filters( 'bp_disable_cover_image_uploads', (bool) bp_get_option( 'bp-disable-cover-image-uploads', $default ) );
 539  }
 540  
 541  /**
 542   * Are group avatars disabled?
 543   *
 544   * For backward compatibility, this option falls back on the value of 'bp-disable-avatar-uploads' when no value is
 545   * found in the database.
 546   *
 547   * @since 2.3.0
 548   *
 549   * @param bool|null $default Optional. Fallback value if not found in the database.
 550   *                           Defaults to the value of `bp_disable_avatar_uploads()`.
 551   * @return bool True if group avatar uploads are disabled, otherwise false.
 552   */
 553  function bp_disable_group_avatar_uploads( $default = null ) {
 554      $disabled = bp_get_option( 'bp-disable-group-avatar-uploads', '' );
 555  
 556      if ( '' === $disabled ) {
 557          if ( is_null( $default ) ) {
 558              $disabled = bp_disable_avatar_uploads();
 559          } else {
 560              $disabled = $default;
 561          }
 562      }
 563  
 564      /**
 565       * Filters whether or not members are able to upload group avatars.
 566       *
 567       * @since 2.3.0
 568       *
 569       * @param bool $disabled Whether or not members are able to upload their groups avatars.
 570       * @param bool $default  Default value passed to the function.
 571       */
 572      return (bool) apply_filters( 'bp_disable_group_avatar_uploads', $disabled, $default );
 573  }
 574  
 575  /**
 576   * Are group cover images disabled?
 577   *
 578   * @since 2.4.0
 579   *
 580   * @param bool $default Optional. Fallback value if not found in the database.
 581   *                      Default: false.
 582   * @return bool True if group cover image uploads are disabled, otherwise false.
 583   */
 584  function bp_disable_group_cover_image_uploads( $default = false ) {
 585  
 586      /**
 587       * Filters whether or not members are able to upload group cover images.
 588       *
 589       * @since 2.4.0
 590       *
 591       * @param bool $value Whether or not members are able to upload thier groups cover images.
 592       */
 593      return (bool) apply_filters( 'bp_disable_group_cover_image_uploads', (bool) bp_get_option( 'bp-disable-group-cover-image-uploads', $default ) );
 594  }
 595  
 596  /**
 597   * Are members able to delete their own accounts?
 598   *
 599   * @since 1.6.0
 600   *
 601   * @param bool $default Optional. Fallback value if not found in the database.
 602   *                      Default: true.
 603   * @return bool True if users are able to delete their own accounts, otherwise
 604   *              false.
 605   */
 606  function bp_disable_account_deletion( $default = false ) {
 607  
 608      /**
 609       * Filters whether or not members are able to delete their own accounts.
 610       *
 611       * @since 1.6.0
 612       *
 613       * @param bool $value Whether or not members are able to delete their own accounts.
 614       */
 615      return apply_filters( 'bp_disable_account_deletion', (bool) bp_get_option( 'bp-disable-account-deletion', $default ) );
 616  }
 617  
 618  /**
 619   * Are post/comment activity stream comments disabled?
 620   *
 621   * @since 1.6.0
 622   *
 623   * @todo split and move into blog and forum components.
 624   *
 625   * @param bool $default Optional. Fallback value if not found in the database.
 626   *                      Default: false.
 627   * @return bool True if activity comments are disabled for blog and forum
 628   *              items, otherwise false.
 629   */
 630  function bp_disable_blogforum_comments( $default = false ) {
 631  
 632      /**
 633       * Filters whether or not blog and forum activity stream comments are disabled.
 634       *
 635       * @since 1.6.0
 636       *
 637       * @param bool $value Whether or not blog and forum activity stream comments are disabled.
 638       */
 639      return (bool) apply_filters( 'bp_disable_blogforum_comments', (bool) bp_get_option( 'bp-disable-blogforum-comments', $default ) );
 640  }
 641  
 642  /**
 643   * Is group creation turned off?
 644   *
 645   * @since 1.6.0
 646   *
 647   * @todo Move into groups component.
 648   *
 649   * @param bool $default Optional. Fallback value if not found in the database.
 650   *                      Default: true.
 651   * @return bool True if group creation is restricted, otherwise false.
 652   */
 653  function bp_restrict_group_creation( $default = true ) {
 654  
 655      /**
 656       * Filters whether or not group creation is turned off.
 657       *
 658       * @since 1.6.0
 659       *
 660       * @param bool $value Whether or not group creation is turned off.
 661       */
 662      return (bool) apply_filters( 'bp_restrict_group_creation', (bool) bp_get_option( 'bp_restrict_group_creation', $default ) );
 663  }
 664  
 665  /**
 666   * Check whether Akismet is enabled.
 667   *
 668   * @since 1.6.0
 669   *
 670   * @param bool $default Optional. Fallback value if not found in the database.
 671   *                      Default: true.
 672   * @return bool True if Akismet is enabled, otherwise false.
 673   */
 674  function bp_is_akismet_active( $default = true ) {
 675  
 676      /**
 677       * Filters whether or not Akismet is enabled.
 678       *
 679       * @since 1.6.0
 680       *
 681       * @param bool $value Whether or not Akismet is enabled.
 682       */
 683      return (bool) apply_filters( 'bp_is_akismet_active', (bool) bp_get_option( '_bp_enable_akismet', $default ) );
 684  }
 685  
 686  /**
 687   * Check whether Activity Heartbeat refresh is enabled.
 688   *
 689   * @since 2.0.0
 690   *
 691   * @param bool $default Optional. Fallback value if not found in the database.
 692   *                      Default: true.
 693   * @return bool True if Heartbeat refresh is enabled, otherwise false.
 694   */
 695  function bp_is_activity_heartbeat_active( $default = true ) {
 696  
 697      /**
 698       * Filters whether or not Activity Heartbeat refresh is enabled.
 699       *
 700       * @since 2.0.0
 701       *
 702       * @param bool $value Whether or not Activity Heartbeat refresh is enabled.
 703       */
 704      return (bool) apply_filters( 'bp_is_activity_heartbeat_active', (bool) bp_get_option( '_bp_enable_heartbeat_refresh', $default ) );
 705  }
 706  
 707  /**
 708   * Get the current theme package ID.
 709   *
 710   * @since 1.7.0
 711   *
 712   * @param string $default Optional. Fallback value if not found in the database.
 713   *                        Default: 'legacy'.
 714   * @return string ID of the theme package.
 715   */
 716  function bp_get_theme_package_id( $default = 'legacy' ) {
 717  
 718      /**
 719       * Filters the current theme package ID.
 720       *
 721       * @since 1.7.0
 722       *
 723       * @param string $value The current theme package ID.
 724       */
 725      return apply_filters( 'bp_get_theme_package_id', bp_get_option( '_bp_theme_package_id', $default ) );
 726  }


Generated: Thu Nov 21 01:00:57 2024 Cross-referenced by PHPXref 0.7.1