[ Index ]

PHP Cross Reference of BBPress

title

Body

[close]

/src/includes/core/ -> template-functions.php (source)

   1  <?php
   2  
   3  /**
   4   * bbPress Template Functions
   5   *
   6   * This file contains functions necessary to mirror the WordPress core template
   7   * loading process. Many of those functions are not filterable, and even then
   8   * would not be robust enough to predict where bbPress templates might exist.
   9   *
  10   * @package bbPress
  11   * @subpackage TemplateFunctions
  12   */
  13  
  14  // Exit if accessed directly
  15  defined( 'ABSPATH' ) || exit;
  16  
  17  /**
  18   * Adds bbPress theme support to any active WordPress theme
  19   *
  20   * @since 2.0.0 bbPress (r3032)
  21   *
  22   * @param string $slug
  23   * @param string $name Optional. Default null
  24   */
  25  function bbp_get_template_part( $slug, $name = null ) {
  26  
  27      // Execute code for this part
  28      do_action( 'get_template_part_' . $slug, $slug, $name );
  29  
  30      // Setup possible parts
  31      $templates = array();
  32      if ( isset( $name ) ) {
  33          $templates[] = $slug . '-' . $name . '.php';
  34      }
  35      $templates[] = $slug . '.php';
  36  
  37      // Allow template parst to be filtered
  38      $templates = apply_filters( 'bbp_get_template_part', $templates, $slug, $name );
  39  
  40      // Return the part that is found
  41      return bbp_locate_template( $templates, true, false );
  42  }
  43  
  44  /**
  45   * Retrieve the name of the highest priority template file that exists.
  46   *
  47   * Searches in the child theme before parent theme so that themes which
  48   * inherit from a parent theme can just overload one file. If the template is
  49   * not found in either of those, it looks in the theme-compat folder last.
  50   *
  51   * @since 2.1.0 bbPress (r3618)
  52   *
  53   * @param string|array $template_names Template file(s) to search for, in order.
  54   * @param bool $load If true the template file will be loaded if it is found.
  55   * @param bool $require_once Whether to require_once or require. Default true.
  56   *                            Has no effect if $load is false.
  57   * @return string The template filename if one is located.
  58   */
  59  function bbp_locate_template( $template_names, $load = false, $require_once = true ) {
  60  
  61      // No file found yet
  62      $located            = false;
  63      $template_locations = bbp_get_template_stack();
  64  
  65      // Try to find a template file
  66      foreach ( (array) $template_names as $template_name ) {
  67  
  68          // Continue if template is empty
  69          if ( empty( $template_name ) ) {
  70              continue;
  71          }
  72  
  73          // Trim off any slashes from the template name
  74          $template_name  = ltrim( $template_name, '/' );
  75  
  76          // Loop through template stack
  77          foreach ( (array) $template_locations as $template_location ) {
  78  
  79              // Continue if $template_location is empty
  80              if ( empty( $template_location ) ) {
  81                  continue;
  82              }
  83  
  84              // Check child theme first
  85              if ( file_exists( trailingslashit( $template_location ) . $template_name ) ) {
  86                  $located = trailingslashit( $template_location ) . $template_name;
  87                  break 2;
  88              }
  89          }
  90      }
  91  
  92      /**
  93       * This action exists only to follow the standard bbPress coding convention,
  94       * and should not be used to short-circuit any part of the template locator.
  95       *
  96       * If you want to override a specific template part, please either filter
  97       * 'bbp_get_template_part' or add a new location to the template stack.
  98       */
  99      do_action( 'bbp_locate_template', $located, $template_name, $template_names, $template_locations, $load, $require_once );
 100  
 101      // Maybe load the template if one was located
 102      if ( ( defined( 'WP_USE_THEMES' ) && WP_USE_THEMES ) && ( true === $load ) && ! empty( $located ) ) {
 103          load_template( $located, $require_once );
 104      }
 105  
 106      return $located;
 107  }
 108  
 109  /**
 110   * Locate an enqueueable file on the server. Used before being enqueued.
 111   *
 112   * If SCRIPT_DEBUG is set and the file includes a .min suffix, this function
 113   * will automatically attempt to locate a non-minified version of that file.
 114   *
 115   * If SCRIPT_DEBUG is not set and the file exclude a .min suffix, this function
 116   * will automatically attempt to locate a minified version of that file.
 117   *
 118   * See: https://bbpress.trac.wordpress.org/ticket/3218
 119   *
 120   * @since 2.6.0
 121   *
 122   * @param string $file
 123   *
 124   * @return boolean
 125   */
 126  function bbp_locate_enqueueable( $file = '' ) {
 127  
 128      // Bail if no file to locate
 129      if ( empty( $file ) ) {
 130          return false;
 131      }
 132  
 133      // Add file to files array
 134      $files = array( $file );
 135  
 136      // Get the file variant (minified or not, but opposite of $file)
 137      $file_is_min  = ( false !== strpos( $file, '.min' ) );
 138      $file_variant = ( false === $file_is_min )
 139          ? str_replace( array( '.css', '.js' ), array( '.min.css', '.min.js' ), $file )
 140          : str_replace( '.min', '', $file );
 141  
 142      // Are we debugging?
 143      $script_debug = bbp_doing_script_debug();
 144  
 145      // Debugging, so prefer unminified files
 146      if ( true === $script_debug ) {
 147          if ( true === $file_is_min ) {
 148              array_unshift( $files, $file_variant );
 149          } else {
 150              array_push( $files, $file_variant );
 151          }
 152  
 153      // Not debugging, so prefer minified files
 154      } elseif ( false === $script_debug ) {
 155          if ( true === $file_is_min ) {
 156              array_push( $files, $file_variant );
 157          } else {
 158              array_unshift( $files, $file_variant );
 159          }
 160      }
 161  
 162      // Return first found file location in the stack
 163      return bbp_locate_template( $files, false, false );
 164  }
 165  
 166  /**
 167   * Convert an enqueueable file path to a URL
 168   *
 169   * @since 2.6.0
 170   * @param string $file
 171   *
 172   * @return string
 173   */
 174  function bbp_urlize_enqueueable( $file = '' ) {
 175  
 176      // Get DIR and URL
 177      $content_dir = constant( 'WP_CONTENT_DIR' );
 178      $content_url = content_url();
 179  
 180      // IIS (Windows) here
 181      // Replace back slashes with forward slash
 182      if ( false !== strpos( $file, '\\' ) ) {
 183          $file        = str_replace( '\\', '/', $file        );
 184          $content_dir = str_replace( '\\', '/', $content_dir );
 185      }
 186  
 187      // Return path to file relative to site URL
 188      return str_replace( $content_dir, $content_url, $file );
 189  }
 190  
 191  /**
 192   * Enqueue a script from the highest priority location in the template stack.
 193   *
 194   * Registers the style if file provided (does NOT overwrite) and enqueues.
 195   *
 196   * @since 2.5.0 bbPress (r5180)
 197   *
 198   * @param string      $handle Name of the stylesheet.
 199   * @param string|bool $file   Relative path to stylesheet. Example: '/css/mystyle.css'.
 200   * @param array       $deps   An array of registered style handles this stylesheet depends on. Default empty array.
 201   * @param string|bool $ver    String specifying the stylesheet version number, if it has one. This parameter is used
 202   *                            to ensure that the correct version is sent to the client regardless of caching, and so
 203   *                            should be included if a version number is available and makes sense for the stylesheet.
 204   * @param string      $media  Optional. The media for which this stylesheet has been defined.
 205   *                            Default 'all'. Accepts 'all', 'aural', 'braille', 'handheld', 'projection', 'print',
 206   *                            'screen', 'tty', or 'tv'.
 207   *
 208   * @return mixed The style filename if one is located. False if not.
 209   */
 210  function bbp_enqueue_style( $handle = '', $file = '', $deps = array(), $ver = false, $media = 'all' ) {
 211  
 212      // Attempt to locate an enqueueable
 213      $located = bbp_locate_enqueueable( $file );
 214  
 215      // Enqueue if located
 216      if ( ! empty( $located ) ) {
 217  
 218          // Make sure there is always a version
 219          if ( empty( $ver ) ) {
 220              $ver = bbp_get_asset_version();
 221          }
 222  
 223          // Make path to file relative to site URL
 224          $located = bbp_urlize_enqueueable( $located );
 225  
 226          // Register the style
 227          wp_register_style( $handle, $located, $deps, $ver, $media );
 228  
 229          // Enqueue the style
 230          wp_enqueue_style( $handle );
 231      }
 232  
 233      return $located;
 234  }
 235  
 236  /**
 237   * Enqueue a script from the highest priority location in the template stack.
 238   *
 239   * Registers the style if file provided (does NOT overwrite) and enqueues.
 240   *
 241   * @since 2.5.0 bbPress (r5180)
 242   *
 243   * @param string      $handle    Name of the script.
 244   * @param string|bool $file      Relative path to the script. Example: '/js/myscript.js'.
 245   * @param array       $deps      An array of registered handles this script depends on. Default empty array.
 246   * @param string|bool $ver       Optional. String specifying the script version number, if it has one. This parameter
 247   *                               is used to ensure that the correct version is sent to the client regardless of caching,
 248   *                               and so should be included if a version number is available and makes sense for the script.
 249   * @param bool        $in_footer Optional. Whether to enqueue the script before </head> or before </body>.
 250   *                               Default 'false'. Accepts 'false' or 'true'.
 251   *
 252   * @return mixed The script filename if one is located. False if not.
 253   */
 254  function bbp_enqueue_script( $handle = '', $file = '', $deps = array(), $ver = false, $in_footer = false ) {
 255  
 256      // Attempt to locate an enqueueable
 257      $located = bbp_locate_enqueueable( $file );
 258  
 259      // Enqueue if located
 260      if ( ! empty( $located ) ) {
 261  
 262          // Make sure there is always a version
 263          if ( empty( $ver ) ) {
 264              $ver = bbp_get_asset_version();
 265          }
 266  
 267          // Make path to file relative to site URL
 268          $located = bbp_urlize_enqueueable( $located );
 269  
 270          // Register the style
 271          wp_register_script( $handle, $located, $deps, $ver, $in_footer );
 272  
 273          // Enqueue the style
 274          wp_enqueue_script( $handle );
 275      }
 276  
 277      return $located;
 278  }
 279  
 280  /**
 281   * This is really cool. This function registers a new template stack location,
 282   * using WordPress's built in filters API.
 283   *
 284   * This allows for templates to live in places beyond just the parent/child
 285   * relationship, to allow for custom template locations. Used in conjunction
 286   * with bbp_locate_template(), this allows for easy template overrides.
 287   *
 288   * @since 2.2.0 bbPress (r4323)
 289   *
 290   * @param string $location_callback Callback function that returns the
 291   * @param int $priority
 292   */
 293  function bbp_register_template_stack( $location_callback = '', $priority = 10 ) {
 294  
 295      // Bail if no location, or function/method is not callable
 296      if ( empty( $location_callback ) || ! is_callable( $location_callback ) ) {
 297          return false;
 298      }
 299  
 300      // Add location callback to template stack
 301      return add_filter( 'bbp_template_stack', $location_callback, (int) $priority );
 302  }
 303  
 304  /**
 305   * Deregisters a previously registered template stack location.
 306   *
 307   * @since 2.3.0 bbPress (r4652)
 308   *
 309   * @param string $location_callback Callback function that returns the
 310   * @param int $priority
 311   * @return bool Whether stack was removed
 312   */
 313  function bbp_deregister_template_stack( $location_callback = '', $priority = 10 ) {
 314  
 315      // Bail if no location, or function/method is not callable
 316      if ( empty( $location_callback ) || ! is_callable( $location_callback ) ) {
 317          return false;
 318      }
 319  
 320      // Remove location callback to template stack
 321      return remove_filter( 'bbp_template_stack', $location_callback, (int) $priority );
 322  }
 323  
 324  /**
 325   * Call the functions added to the 'bbp_template_stack' filter hook, and return
 326   * an array of the template locations.
 327   *
 328   * @since 2.2.0 bbPress (r4323)
 329   * @since 2.6.0 bbPress (r5944) Added support for `WP_Hook`
 330   *
 331   * @global array $wp_filter Stores all of the filters
 332   * @global array $merged_filters Merges the filter hooks using this function.
 333   * @global array $wp_current_filter stores the list of current filters with the current one last
 334   *
 335   * @return array The filtered value after all hooked functions are applied to it.
 336   */
 337  function bbp_get_template_stack() {
 338      global $wp_filter, $merged_filters, $wp_current_filter;
 339  
 340      // Setup some default variables
 341      $tag  = 'bbp_template_stack';
 342      $args = $stack = array();
 343  
 344      // Add 'bbp_template_stack' to the current filter array
 345      $wp_current_filter[] = $tag;
 346  
 347      // Bail if no stack setup
 348      if ( empty( $wp_filter[ $tag ] ) ) {
 349          return array();
 350      }
 351  
 352      // Check if WP_Hook class exists, see #WP17817
 353      if ( class_exists( 'WP_Hook' ) ) {
 354          $filter = $wp_filter[ $tag ]->callbacks;
 355      } else {
 356          $filter = &$wp_filter[ $tag ];
 357  
 358          // Sort
 359          if ( ! isset( $merged_filters[ $tag ] ) ) {
 360              ksort( $filter );
 361              $merged_filters[ $tag ] = true;
 362          }
 363      }
 364  
 365      // Ensure we're always at the beginning of the filter array
 366      reset( $filter );
 367  
 368      // Loop through 'bbp_template_stack' filters, and call callback functions
 369      do {
 370          foreach ( (array) current( $filter ) as $the_ ) {
 371              if ( ! is_null( $the_['function'] ) ) {
 372                  $args[1] = $stack;
 373                  $stack[] = call_user_func_array( $the_['function'], array_slice( $args, 1, (int) $the_['accepted_args'] ) );
 374              }
 375          }
 376      } while ( next( $filter ) !== false );
 377  
 378      // Remove 'bbp_template_stack' from the current filter array
 379      array_pop( $wp_current_filter );
 380  
 381      // Remove empties and duplicates
 382      $stack = array_unique( array_filter( $stack ) );
 383  
 384      // Filter & return
 385      return (array) apply_filters( 'bbp_get_template_stack', $stack );
 386  }
 387  
 388  /**
 389   * Get a template part in an output buffer, and return it
 390   *
 391   * @since 2.4.0 bbPress (r5043)
 392   *
 393   * @param string $slug
 394   * @param string $name
 395   * @return string
 396   */
 397  function bbp_buffer_template_part( $slug, $name = null, $echo = true ) {
 398      ob_start();
 399  
 400      bbp_get_template_part( $slug, $name );
 401  
 402      // Get the output buffer contents
 403      $output = ob_get_clean();
 404  
 405      // Echo or return the output buffer contents
 406      if ( true === $echo ) {
 407          echo $output;
 408      } else {
 409          return $output;
 410      }
 411  }
 412  
 413  /**
 414   * Retrieve path to a template
 415   *
 416   * Used to quickly retrieve the path of a template without including the file
 417   * extension. It will also check the parent theme and theme-compat theme with
 418   * the use of {@link bbp_locate_template()}. Allows for more generic template
 419   * locations without the use of the other get_*_template() functions.
 420   *
 421   * @since 2.1.0 bbPress (r3629)
 422   *
 423   * @param string $type Filename without extension.
 424   * @param array $templates An optional list of template candidates
 425   * @return string Full path to file.
 426   */
 427  function bbp_get_query_template( $type, $templates = array() ) {
 428      $type = preg_replace( '|[^a-z0-9-]+|', '', $type );
 429  
 430      // Fallback template
 431      if ( empty( $templates ) ) {
 432          $templates = array( "{$type}.php" );
 433      }
 434  
 435      // Filter possible templates
 436      $templates = apply_filters( "bbp_get_{$type}_template", $templates );
 437  
 438      // Stash the possible templates for this query, for later use
 439      bbp_set_theme_compat_templates( $templates );
 440  
 441      // Try to locate a template in the stack
 442      $template = bbp_locate_template( $templates );
 443  
 444      // Stash the located template for this query, for later use
 445      bbp_set_theme_compat_template( $template );
 446  
 447      // Filter & return
 448      return apply_filters( "bbp_{$type}_template", $template, $templates );
 449  }
 450  
 451  /**
 452   * Get the possible subdirectories to check for templates in
 453   *
 454   * @since 2.1.0 bbPress (r3738)
 455   *
 456   * @param array $templates Templates we are looking for
 457   * @return array Possible subdirectories to look in
 458   */
 459  function bbp_get_template_locations( $templates = array() ) {
 460      $locations = array(
 461          'bbpress',
 462          'forums',
 463          ''
 464      );
 465  
 466      // Filter & return
 467      return apply_filters( 'bbp_get_template_locations', $locations, $templates );
 468  }
 469  
 470  /**
 471   * Add template locations to template files being searched for
 472   *
 473   * @since 2.1.0 bbPress (r3738)
 474   *
 475   * @param array $stacks
 476   * @return array()
 477   */
 478  function bbp_add_template_stack_locations( $stacks = array() ) {
 479      $retval = array();
 480  
 481      // Get alternate locations
 482      $locations = bbp_get_template_locations();
 483  
 484      // Loop through locations and stacks and combine
 485      foreach ( (array) $stacks as $stack ) {
 486          foreach ( (array) $locations as $custom_location ) {
 487              $retval[] = untrailingslashit( trailingslashit( $stack ) . $custom_location );
 488          }
 489      }
 490  
 491      // Filter & return
 492      return (array) apply_filters( 'bbp_add_template_stack_locations', array_unique( $retval ), $stacks );
 493  }
 494  
 495  /**
 496   * Add checks for bbPress conditions to parse_query action
 497   *
 498   * If it's a user page, WP_Query::bbp_is_single_user is set to true.
 499   *
 500   * If it's a user edit page, WP_Query::bbp_is_single_user_edit is set to true
 501   * and the the 'wp-admin/includes/user.php' file is included.
 502   *
 503   * In addition, on user/user edit pages, WP_Query::home is set to false & query
 504   * vars 'bbp_user_id' with the displayed user id is added.
 505   *
 506   * In 2.6.0, the 'author_name' variable is no longer set when viewing a single
 507   * user, because of is_author() weirdness. If this removal causes problems, it
 508   * may come back in a future release.
 509   *
 510   * If it's a forum edit, WP_Query::bbp_is_forum_edit is set to true
 511   * If it's a topic edit, WP_Query::bbp_is_topic_edit is set to true
 512   * If it's a reply edit, WP_Query::bbp_is_reply_edit is set to true.
 513   *
 514   * If it's a view page, WP_Query::bbp_is_view is set to true
 515   * If it's a search page, WP_Query::bbp_is_search is set to true
 516   *
 517   * @since 2.0.0 bbPress (r2688)
 518   *
 519   * @param WP_Query $posts_query
 520   */
 521  function bbp_parse_query( $posts_query ) {
 522  
 523      // Bail if $posts_query is not the main loop
 524      if ( ! $posts_query->is_main_query() ) {
 525          return;
 526      }
 527  
 528      // Bail if filters are suppressed on this query
 529      if ( true === $posts_query->get( 'suppress_filters' ) ) {
 530          return;
 531      }
 532  
 533      // Bail if in admin
 534      if ( is_admin() ) {
 535          return;
 536      }
 537  
 538      // Get query variables (default to null if not set)
 539      $bbp_view  = $posts_query->get( bbp_get_view_rewrite_id(),   null );
 540      $bbp_user  = $posts_query->get( bbp_get_user_rewrite_id(),   null );
 541      $is_edit   = $posts_query->get( bbp_get_edit_rewrite_id(),   null );
 542      $is_search = $posts_query->get( bbp_get_search_rewrite_id(), null );
 543  
 544      // It is a user page - We'll also check if it is user edit
 545      if ( ! is_null( $bbp_user ) ) {
 546  
 547          /** Find User *********************************************************/
 548  
 549          // Setup the default user variable
 550          $the_user = false;
 551  
 552          // If using pretty permalinks, always use slug
 553          if ( get_option( 'permalink_structure' ) ) {
 554              $the_user = get_user_by( 'slug', $bbp_user );
 555  
 556          // If not using pretty permalinks, always use numeric ID
 557          } elseif ( is_numeric( $bbp_user ) ) {
 558              $the_user = get_user_by( 'id', $bbp_user );
 559          }
 560  
 561          // 404 and bail if user does not have a profile
 562          if ( empty( $the_user->ID ) || ! bbp_user_has_profile( $the_user->ID ) ) {
 563              $posts_query->bbp_is_404 = true;
 564              return;
 565          }
 566  
 567          /** User Exists *******************************************************/
 568  
 569          $is_favs        = $posts_query->get( bbp_get_user_favorites_rewrite_id()     );
 570          $is_subs        = $posts_query->get( bbp_get_user_subscriptions_rewrite_id() );
 571          $is_topics      = $posts_query->get( bbp_get_user_topics_rewrite_id()        );
 572          $is_replies     = $posts_query->get( bbp_get_user_replies_rewrite_id()       );
 573          $is_engagements = $posts_query->get( bbp_get_user_engagements_rewrite_id()   );
 574  
 575          // View or edit?
 576          if ( ! is_null( $is_edit ) ) {
 577  
 578              // We are editing a profile
 579              $posts_query->bbp_is_single_user_edit = true;
 580  
 581              // Load the core WordPress contact methods
 582              if ( ! function_exists( '_wp_get_user_contactmethods' ) ) {
 583                  require_once ABSPATH . 'wp-includes/registration.php';
 584              }
 585  
 586              // Load the edit_user functions
 587              if ( ! function_exists( 'edit_user' ) ) {
 588                  require_once ABSPATH . 'wp-admin/includes/user.php';
 589              }
 590  
 591              // Load the grant/revoke super admin functions
 592              if ( is_multisite() && ! function_exists( 'revoke_super_admin' ) ) {
 593                  require_once ABSPATH . 'wp-admin/includes/ms.php';
 594              }
 595  
 596              // Editing a user
 597              $posts_query->bbp_is_edit = true;
 598  
 599          // User favorites
 600          } elseif ( ! empty( $is_favs ) ) {
 601              $posts_query->bbp_is_single_user_favs = true;
 602  
 603          // User subscriptions
 604          } elseif ( ! empty( $is_subs ) ) {
 605              $posts_query->bbp_is_single_user_subs = true;
 606  
 607          // User topics
 608          } elseif ( ! empty( $is_topics ) ) {
 609              $posts_query->bbp_is_single_user_topics = true;
 610  
 611          // User topics
 612          } elseif ( ! empty( $is_replies ) ) {
 613              $posts_query->bbp_is_single_user_replies = true;
 614  
 615          // User engagements
 616          } elseif ( ! empty( $is_engagements ) ) {
 617              $posts_query->bbp_is_single_user_engagements = true;
 618  
 619          // User profile
 620          } else {
 621              $posts_query->bbp_is_single_user_profile = true;
 622          }
 623  
 624          // Make sure 404 is not set
 625          $posts_query->is_404  = false;
 626  
 627          // Correct is_home variable
 628          $posts_query->is_home = false;
 629  
 630          // Looking at a single user
 631          $posts_query->bbp_is_single_user = true;
 632  
 633          // User found so don't 404 yet
 634          $posts_query->bbp_is_404 = false;
 635  
 636          // User is looking at their own profile
 637          if ( bbp_get_current_user_id() === $the_user->ID ) {
 638              $posts_query->bbp_is_single_user_home = true;
 639          }
 640  
 641          // Set bbp_user_id for future reference
 642          $posts_query->set( 'bbp_user_id', $the_user->ID );
 643  
 644          // Set the displayed user global to this user
 645          bbpress()->displayed_user = $the_user;
 646  
 647      // View Page
 648      } elseif ( ! is_null( $bbp_view ) ) {
 649  
 650          // Check if the view exists by checking if there are query args are set
 651          $view_args = bbp_get_view_query_args( $bbp_view );
 652  
 653          // Bail if view args are empty
 654          if ( empty( $view_args ) ) {
 655              $posts_query->bbp_is_404 = true;
 656              return;
 657          }
 658  
 659          // Correct is_home variable
 660          $posts_query->is_home     = false;
 661  
 662          // We are in a custom topic view
 663          $posts_query->bbp_is_view = true;
 664  
 665          // No 404 because views are all (currently) public
 666          $posts_query->bbp_is_404 = false;
 667  
 668      // Search Page
 669      } elseif ( ! is_null( $is_search ) ) {
 670  
 671          // Check if there are search query args set
 672          $search_terms = bbp_get_search_terms();
 673          if ( ! empty( $search_terms ) ) {
 674              $posts_query->bbp_search_terms = $search_terms;
 675          }
 676  
 677          // Correct is_home variable
 678          $posts_query->is_home = false;
 679  
 680          // We are in a search query
 681          $posts_query->bbp_is_search = true;
 682  
 683          // No 404 because search is always public
 684          $posts_query->bbp_is_404 = false;
 685  
 686      // Forum/Topic/Reply Edit Page
 687      } elseif ( ! is_null( $is_edit ) ) {
 688  
 689          // Get the post type from the main query loop
 690          $post_type = $posts_query->get( 'post_type' );
 691  
 692          // Check which post_type we are editing, if any
 693          if ( ! empty( $post_type ) ) {
 694              switch ( $post_type ) {
 695  
 696                  // We are editing a forum
 697                  case bbp_get_forum_post_type() :
 698                      $posts_query->bbp_is_forum_edit  = true;
 699                      $posts_query->bbp_is_edit        = true;
 700                      $posts_query->bbp_is_404         = false;
 701                      break;
 702  
 703                  // We are editing a topic
 704                  case bbp_get_topic_post_type() :
 705                      $posts_query->bbp_is_topic_edit  = true;
 706                      $posts_query->bbp_is_edit        = true;
 707                      $posts_query->bbp_is_404         = false;
 708                      break;
 709  
 710                  // We are editing a reply
 711                  case bbp_get_reply_post_type() :
 712                      $posts_query->bbp_is_reply_edit  = true;
 713                      $posts_query->bbp_is_edit        = true;
 714                      $posts_query->bbp_is_404         = false;
 715                      break;
 716              }
 717  
 718          // We are editing a topic tag
 719          } elseif ( bbp_is_topic_tag() ) {
 720              $posts_query->bbp_is_topic_tag_edit = true;
 721              $posts_query->bbp_is_edit           = true;
 722              $posts_query->bbp_is_404            = false;
 723          }
 724  
 725          // We save post revisions on our own
 726          remove_action( 'pre_post_update', 'wp_save_post_revision' );
 727  
 728      // Topic tag page
 729      } elseif ( bbp_is_topic_tag() ) {
 730          $posts_query->set( 'bbp_topic_tag',  get_query_var( 'term' )   );
 731          $posts_query->set( 'post_type',      bbp_get_topic_post_type() );
 732          $posts_query->set( 'posts_per_page', bbp_get_topics_per_page() );
 733  
 734      // Do topics on forums root
 735      } elseif ( is_post_type_archive( bbp_get_post_types( array( 'has_archive' => true ) ) ) && ( 'topics' === bbp_show_on_root() ) ) {
 736          $posts_query->bbp_show_topics_on_root = true;
 737      }
 738  }


Generated: Tue Mar 19 01:01:02 2024 Cross-referenced by PHPXref 0.7.1