[ Index ] |
PHP Cross Reference of BBPress |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * bbPress Forum Template Tags 5 * 6 * @package bbPress 7 * @subpackage TemplateTags 8 */ 9 10 // Exit if accessed directly 11 defined( 'ABSPATH' ) || exit; 12 13 /** Post Type *****************************************************************/ 14 15 /** 16 * Output the unique id of the custom post type for forums 17 * 18 * @since 2.0.0 bbPress (r2857) 19 */ 20 function bbp_forum_post_type() { 21 echo bbp_get_forum_post_type(); 22 } 23 /** 24 * Return the unique id of the custom post type for forums 25 * 26 * @since 2.0.0 bbPress (r2857) 27 * 28 * @return string The unique forum post type id 29 */ 30 function bbp_get_forum_post_type() { 31 32 // Filter & return 33 return apply_filters( 'bbp_get_forum_post_type', bbpress()->forum_post_type ); 34 } 35 36 37 /** 38 * Return array of labels used by the forum post type 39 * 40 * @since 2.5.0 bbPress (r5129) 41 * 42 * @return array 43 */ 44 function bbp_get_forum_post_type_labels() { 45 46 // Filter & return 47 return (array) apply_filters( 'bbp_get_forum_post_type_labels', array( 48 'name' => esc_attr__( 'Forums', 'bbpress' ), 49 'menu_name' => esc_attr__( 'Forums', 'bbpress' ), 50 'singular_name' => esc_attr__( 'Forum', 'bbpress' ), 51 'all_items' => esc_attr__( 'All Forums', 'bbpress' ), 52 'add_new' => esc_attr__( 'Add New', 'bbpress' ), 53 'add_new_item' => esc_attr__( 'Create New Forum', 'bbpress' ), 54 'edit' => esc_attr__( 'Edit', 'bbpress' ), 55 'edit_item' => esc_attr__( 'Edit Forum', 'bbpress' ), 56 'new_item' => esc_attr__( 'New Forum', 'bbpress' ), 57 'view' => esc_attr__( 'View Forum', 'bbpress' ), 58 'view_item' => esc_attr__( 'View Forum', 'bbpress' ), 59 'view_items' => esc_attr__( 'View Forums', 'bbpress' ), 60 'search_items' => esc_attr__( 'Search Forums', 'bbpress' ), 61 'not_found' => esc_attr__( 'No forums found', 'bbpress' ), 62 'not_found_in_trash' => esc_attr__( 'No forums found in Trash', 'bbpress' ), 63 'filter_items_list' => esc_attr__( 'Filter forums list', 'bbpress' ), 64 'items_list' => esc_attr__( 'Forums list', 'bbpress' ), 65 'items_list_navigation' => esc_attr__( 'Forums list navigation', 'bbpress' ), 66 'parent_item_colon' => esc_attr__( 'Parent Forum:', 'bbpress' ), 67 'archives' => esc_attr__( 'Forums', 'bbpress' ), 68 'attributes' => esc_attr__( 'Forum Attributes', 'bbpress' ), 69 'insert_into_item' => esc_attr__( 'Insert into forum', 'bbpress' ), 70 'uploaded_to_this_item' => esc_attr__( 'Uploaded to this forum', 'bbpress' ), 71 'featured_image' => esc_attr__( 'Forum Image', 'bbpress' ), 72 'set_featured_image' => esc_attr__( 'Set forum image', 'bbpress' ), 73 'remove_featured_image' => esc_attr__( 'Remove forum image', 'bbpress' ), 74 'use_featured_image' => esc_attr__( 'Use as forum image', 'bbpress' ), 75 'item_published' => esc_attr__( 'Forum published.', 'bbpress' ), 76 'item_published_privately' => esc_attr__( 'Forum published privately.', 'bbpress' ), 77 'item_reverted_to_draft' => esc_attr__( 'Forum reverted to draft.', 'bbpress' ), 78 'item_scheduled' => esc_attr__( 'Forum scheduled.', 'bbpress' ), 79 'item_updated' => esc_attr__( 'Forum updated.', 'bbpress' ) 80 ) ); 81 } 82 83 /** 84 * Return array of forum post type rewrite settings 85 * 86 * @since 2.5.0 bbPress (r5129) 87 * 88 * @return array 89 */ 90 function bbp_get_forum_post_type_rewrite() { 91 92 // Filter & return 93 return (array) apply_filters( 'bbp_get_forum_post_type_rewrite', array( 94 'slug' => bbp_get_forum_slug(), 95 'with_front' => false 96 ) ); 97 } 98 99 /** 100 * Return array of features the forum post type supports 101 * 102 * @since 2.5.0 bbPress (r5129) 103 * 104 * @return array 105 */ 106 function bbp_get_forum_post_type_supports() { 107 108 // Filter & return 109 return (array) apply_filters( 'bbp_get_forum_post_type_supports', array( 110 'title', 111 'editor', 112 'revisions' 113 ) ); 114 } 115 116 /** Forum Loop ****************************************************************/ 117 118 /** 119 * The main forum loop. 120 * 121 * WordPress makes this easy for us. 122 * 123 * @since 2.0.0 bbPress (r2464) 124 * 125 * @param array $args All the arguments supported by {@link WP_Query} 126 * 127 * @return object Multidimensional array of forum information 128 */ 129 function bbp_has_forums( $args = array() ) { 130 131 // Forum archive only shows root 132 if ( bbp_is_forum_archive() ) { 133 $default_post_parent = 0; 134 135 // User subscriptions shows any 136 } elseif ( bbp_is_subscriptions() ) { 137 $default_post_parent = 'any'; 138 139 // Could be anything, so look for possible parent ID 140 } else { 141 $default_post_parent = bbp_get_forum_id(); 142 } 143 144 $default_forum_search = bbp_sanitize_search_request( 'fs' ); 145 146 // Default argument array 147 $default = array( 148 'post_type' => bbp_get_forum_post_type(), 149 'post_parent' => $default_post_parent, 150 'post_status' => bbp_get_public_status_id(), 151 'posts_per_page' => get_option( '_bbp_forums_per_page', 50 ), 152 'orderby' => 'menu_order title', 153 'order' => 'ASC', 154 'no_found_rows' => true, 155 'ignore_sticky_posts' => true, 156 157 // Conditionally prime the cache for last active posts 158 'update_post_family_cache' => true 159 ); 160 161 // Only add 's' arg if searching for forums 162 // See https://bbpress.trac.wordpress.org/ticket/2607 163 if ( ! empty( $default_forum_search ) ) { 164 $default['s'] = $default_forum_search; 165 } 166 167 // Parse arguments with default forum query for most circumstances 168 $r = bbp_parse_args( $args, $default, 'has_forums' ); 169 170 // Run the query 171 $bbp = bbpress(); 172 $bbp->forum_query = new WP_Query( $r ); 173 174 // Maybe prime last active posts 175 if ( ! empty( $r['update_post_family_cache'] ) ) { 176 bbp_update_post_family_caches( $bbp->forum_query->posts ); 177 } 178 179 // Filter & return 180 return apply_filters( 'bbp_has_forums', $bbp->forum_query->have_posts(), $bbp->forum_query ); 181 } 182 183 /** 184 * Whether there are more forums available in the loop 185 * 186 * @since 2.0.0 bbPress (r2464) 187 * 188 * @return object Forum information 189 */ 190 function bbp_forums() { 191 192 // Put into variable to check against next 193 $have_posts = bbpress()->forum_query->have_posts(); 194 195 // Reset the post data when finished 196 if ( empty( $have_posts ) ) { 197 wp_reset_postdata(); 198 } 199 200 return $have_posts; 201 } 202 203 /** 204 * Loads up the current forum in the loop 205 * 206 * @since 2.0.0 bbPress (r2464) 207 * 208 * @return object Forum information 209 */ 210 function bbp_the_forum() { 211 return bbpress()->forum_query->the_post(); 212 } 213 214 /** Forum *********************************************************************/ 215 216 /** 217 * Output forum id 218 * 219 * @since 2.0.0 bbPress (r2464) 220 * 221 * @param $forum_id Optional. Used to check emptiness 222 */ 223 function bbp_forum_id( $forum_id = 0 ) { 224 echo bbp_get_forum_id( $forum_id ); 225 } 226 /** 227 * Return the forum id 228 * 229 * @since 2.0.0 bbPress (r2464) 230 * 231 * @param $forum_id Optional. Used to check emptiness 232 * @return int The forum id 233 */ 234 function bbp_get_forum_id( $forum_id = 0 ) { 235 $bbp = bbpress(); 236 $wp_query = bbp_get_wp_query(); 237 238 // Easy empty checking 239 if ( ! empty( $forum_id ) && is_numeric( $forum_id ) ) { 240 $bbp_forum_id = $forum_id; 241 242 // Currently inside a forum loop 243 } elseif ( ! empty( $bbp->forum_query->in_the_loop ) && isset( $bbp->forum_query->post->ID ) ) { 244 $bbp_forum_id = $bbp->forum_query->post->ID; 245 246 // Currently inside a search loop 247 } elseif ( ! empty( $bbp->search_query->in_the_loop ) && isset( $bbp->search_query->post->ID ) && bbp_is_forum( $bbp->search_query->post->ID ) ) { 248 $bbp_forum_id = $bbp->search_query->post->ID; 249 250 // Currently viewing a forum 251 } elseif ( ( bbp_is_single_forum() || bbp_is_forum_edit() ) && ! empty( $bbp->current_forum_id ) ) { 252 $bbp_forum_id = $bbp->current_forum_id; 253 254 // Currently viewing a forum 255 } elseif ( ( bbp_is_single_forum() || bbp_is_forum_edit() ) && isset( $wp_query->post->ID ) ) { 256 $bbp_forum_id = $wp_query->post->ID; 257 258 // Currently viewing a topic 259 } elseif ( bbp_is_single_topic() ) { 260 $bbp_forum_id = bbp_get_topic_forum_id(); 261 262 // Fallback 263 } else { 264 $bbp_forum_id = 0; 265 } 266 267 // Filter & return 268 return (int) apply_filters( 'bbp_get_forum_id', (int) $bbp_forum_id, $forum_id ); 269 } 270 271 /** 272 * Gets a forum 273 * 274 * @since 2.0.0 bbPress (r2787) 275 * 276 * @param int|object $forum forum id or forum object 277 * @param string $output Optional. OBJECT, ARRAY_A, or ARRAY_N. Default = OBJECT 278 * @param string $filter Optional Sanitation filter. See {@link sanitize_post()} 279 * 280 * @return mixed Null if error or forum (in specified form) if success 281 */ 282 function bbp_get_forum( $forum, $output = OBJECT, $filter = 'raw' ) { 283 284 // Maybe get ID from empty or int 285 if ( empty( $forum ) || is_numeric( $forum ) ) { 286 $forum = bbp_get_forum_id( $forum ); 287 } 288 289 // Bail if no post object 290 $forum = get_post( $forum, OBJECT, $filter ); 291 if ( empty( $forum ) ) { 292 return $forum; 293 } 294 295 // Bail if not correct post type 296 if ( $forum->post_type !== bbp_get_forum_post_type() ) { 297 return null; 298 } 299 300 // Default return value is OBJECT 301 $retval = $forum; 302 303 // Array A 304 if ( $output === ARRAY_A ) { 305 $retval = get_object_vars( $forum ); 306 307 // Array N 308 } elseif ( $output === ARRAY_N ) { 309 $retval = array_values( get_object_vars( $forum ) ); 310 } 311 312 // Filter & return 313 return apply_filters( 'bbp_get_forum', $retval, $forum, $output, $filter ); 314 } 315 316 /** 317 * Output the link to the forum 318 * 319 * @since 2.0.0 bbPress (r2464) 320 * 321 * @param int $forum_id Optional. Forum id 322 * @param string $redirect_to Optional. Pass a redirect value for use with 323 * shortcodes and other fun things. 324 */ 325 function bbp_forum_permalink( $forum_id = 0, $redirect_to = '' ) { 326 echo esc_url( bbp_get_forum_permalink( $forum_id, $redirect_to ) ); 327 } 328 /** 329 * Return the link to the forum 330 * 331 * @since 2.0.0 bbPress (r2464) 332 * 333 * @param int $forum_id Optional. Forum id 334 * @param string $redirect_to Optional. Pass a redirect value for use with 335 * shortcodes and other fun things. 336 * 337 * @return string Permanent link to forum 338 */ 339 function bbp_get_forum_permalink( $forum_id = 0, $redirect_to = '' ) { 340 $forum_id = bbp_get_forum_id( $forum_id ); 341 342 // Use the redirect address 343 if ( ! empty( $redirect_to ) ) { 344 $forum_permalink = esc_url_raw( $redirect_to ); 345 346 // Use the topic permalink 347 } else { 348 $forum_permalink = get_permalink( $forum_id ); 349 } 350 351 // Filter & return 352 return apply_filters( 'bbp_get_forum_permalink', $forum_permalink, $forum_id ); 353 } 354 355 /** 356 * Output the title of the forum 357 * 358 * @since 2.0.0 bbPress (r2464) 359 * 360 * @param int $forum_id Optional. Forum id 361 */ 362 function bbp_forum_title( $forum_id = 0 ) { 363 echo bbp_get_forum_title( $forum_id ); 364 } 365 /** 366 * Return the title of the forum 367 * 368 * @since 2.0.0 bbPress (r2464) 369 * 370 * @param int $forum_id Optional. Forum id 371 * @return string Title of forum 372 */ 373 function bbp_get_forum_title( $forum_id = 0 ) { 374 $forum_id = bbp_get_forum_id( $forum_id ); 375 $title = get_the_title( $forum_id ); 376 377 // Filter & return 378 return apply_filters( 'bbp_get_forum_title', $title, $forum_id ); 379 } 380 381 /** 382 * Output the forum archive title 383 * 384 * @since 2.0.0 bbPress (r3249) 385 * 386 * @param string $title Default text to use as title 387 */ 388 function bbp_forum_archive_title( $title = '' ) { 389 echo bbp_get_forum_archive_title( $title ); 390 } 391 /** 392 * Return the forum archive title 393 * 394 * @since 2.0.0 bbPress (r3249) 395 * 396 * @param string $title Default text to use as title 397 * 398 * @return string The forum archive title 399 */ 400 function bbp_get_forum_archive_title( $title = '' ) { 401 402 // If no title was passed 403 if ( empty( $title ) ) { 404 405 // Set root text to page title 406 $page = bbp_get_page_by_path( bbp_get_root_slug() ); 407 if ( ! empty( $page ) ) { 408 $title = get_the_title( $page->ID ); 409 410 // Default to forum post type name label 411 } else { 412 $fto = get_post_type_object( bbp_get_forum_post_type() ); 413 $title = $fto->labels->name; 414 } 415 } 416 417 // Filter & return 418 return apply_filters( 'bbp_get_forum_archive_title', $title ); 419 } 420 421 /** 422 * Output the content of the forum 423 * 424 * @since 2.0.0 bbPress (r2780) 425 * 426 * @param int $forum_id Optional. Topic id 427 */ 428 function bbp_forum_content( $forum_id = 0 ) { 429 echo bbp_get_forum_content( $forum_id ); 430 } 431 /** 432 * Return the content of the forum 433 * 434 * @since 2.0.0 bbPress (r2780) 435 * 436 * @param int $forum_id Optional. Topic id 437 * 438 * @return string Content of the forum 439 */ 440 function bbp_get_forum_content( $forum_id = 0 ) { 441 $forum_id = bbp_get_forum_id( $forum_id ); 442 443 // Check if password is required 444 if ( post_password_required( $forum_id ) ) { 445 return get_the_password_form(); 446 } 447 448 $content = get_post_field( 'post_content', $forum_id ); 449 450 // Filter & return 451 return apply_filters( 'bbp_get_forum_content', $content, $forum_id ); 452 } 453 454 /** 455 * Allow forum rows to have administrative actions 456 * 457 * @since 2.1.0 bbPress (r3653) 458 * 459 * @todo Links and filter 460 */ 461 function bbp_forum_row_actions() { 462 do_action( 'bbp_forum_row_actions' ); 463 } 464 465 /** 466 * Output the forums last active ID 467 * 468 * @since 2.0.0 bbPress (r2860) 469 * 470 * @param int $forum_id Optional. Forum id 471 */ 472 function bbp_forum_last_active_id( $forum_id = 0 ) { 473 echo bbp_get_forum_last_active_id( $forum_id ); 474 } 475 /** 476 * Return the forums last active ID 477 * 478 * @since 2.0.0 bbPress (r2860) 479 * 480 * @param int $forum_id Optional. Forum id 481 * the last active id and forum id 482 * @return int Forum's last active id 483 */ 484 function bbp_get_forum_last_active_id( $forum_id = 0 ) { 485 $forum_id = bbp_get_forum_id( $forum_id ); 486 $active_id = (int) get_post_meta( $forum_id, '_bbp_last_active_id', true ); 487 488 // Filter & return 489 return (int) apply_filters( 'bbp_get_forum_last_active_id', $active_id, $forum_id ); 490 } 491 492 /** 493 * Output the forums last update date/time (aka freshness) 494 * 495 * @since 2.0.0 bbPress (r2464) 496 * 497 * @param int $forum_id Optional. Forum id 498 */ 499 function bbp_forum_last_active_time( $forum_id = 0 ) { 500 echo bbp_get_forum_last_active_time( $forum_id ); 501 } 502 /** 503 * Return the forums last update date/time (aka freshness) 504 * 505 * @since 2.0.0 bbPress (r2464) 506 * 507 * @param int $forum_id Optional. Forum id 508 * @return string Forum last update date/time (freshness) 509 */ 510 function bbp_get_forum_last_active_time( $forum_id = 0 ) { 511 512 // Verify forum and get last active meta 513 $forum_id = bbp_get_forum_id( $forum_id ); 514 $last_active = get_post_meta( $forum_id, '_bbp_last_active_time', true ); 515 516 if ( empty( $last_active ) ) { 517 $reply_id = bbp_get_forum_last_reply_id( $forum_id ); 518 if ( ! empty( $reply_id ) ) { 519 $last_active = get_post_field( 'post_date', $reply_id ); 520 } else { 521 $topic_id = bbp_get_forum_last_topic_id( $forum_id ); 522 if ( ! empty( $topic_id ) ) { 523 $last_active = bbp_get_topic_last_active_time( $topic_id ); 524 } 525 } 526 } 527 528 $active_time = ! empty( $last_active ) ? bbp_get_time_since( bbp_convert_date( $last_active ) ) : ''; 529 530 // Filter & return 531 return apply_filters( 'bbp_get_forum_last_active', $active_time, $forum_id ); 532 } 533 534 /** 535 * Output link to the most recent activity inside a forum. 536 * 537 * Outputs a complete link with attributes and content. 538 * 539 * @since 2.0.0 bbPress (r2625) 540 * 541 * @param int $forum_id Optional. Forum id 542 */ 543 function bbp_forum_freshness_link( $forum_id = 0) { 544 echo bbp_get_forum_freshness_link( $forum_id ); 545 } 546 /** 547 * Returns link to the most recent activity inside a forum. 548 * 549 * Returns a complete link with attributes and content. 550 * 551 * @since 2.0.0 bbPress (r2625) 552 * 553 * @param int $forum_id Optional. Forum id 554 */ 555 function bbp_get_forum_freshness_link( $forum_id = 0 ) { 556 $forum_id = bbp_get_forum_id( $forum_id ); 557 $active_id = bbp_get_forum_last_active_id( $forum_id ); 558 $link_url = $title = ''; 559 560 if ( empty( $active_id ) ) { 561 $active_id = bbp_get_forum_last_reply_id( $forum_id ); 562 } 563 564 if ( empty( $active_id ) ) { 565 $active_id = bbp_get_forum_last_topic_id( $forum_id ); 566 } 567 568 if ( bbp_is_topic( $active_id ) ) { 569 $link_url = bbp_get_forum_last_topic_permalink( $forum_id ); 570 $title = bbp_get_forum_last_topic_title( $forum_id ); 571 } elseif ( bbp_is_reply( $active_id ) ) { 572 $link_url = bbp_get_forum_last_reply_url( $forum_id ); 573 $title = bbp_get_forum_last_reply_title( $forum_id ); 574 } 575 576 $time_since = bbp_get_forum_last_active_time( $forum_id ); 577 578 if ( ! empty( $time_since ) && ! empty( $link_url ) ) { 579 $anchor = '<a href="' . esc_url( $link_url ) . '" title="' . esc_attr( $title ) . '">' . esc_html( $time_since ) . '</a>'; 580 } else { 581 $anchor = esc_html__( 'No Topics', 'bbpress' ); 582 } 583 584 // Filter & return 585 return apply_filters( 'bbp_get_forum_freshness_link', $anchor, $forum_id, $time_since, $link_url, $title, $active_id ); 586 } 587 588 /** 589 * Output parent ID of a forum, if exists 590 * 591 * @since 2.1.0 bbPress (r3675) 592 * 593 * @param int $forum_id Forum ID 594 */ 595 function bbp_forum_parent_id( $forum_id = 0 ) { 596 echo bbp_get_forum_parent_id( $forum_id ); 597 } 598 /** 599 * Return ID of forum parent, if exists 600 * 601 * @since 2.1.0 bbPress (r3675) 602 * 603 * @param int $forum_id Optional. Forum id 604 * @return int Forum parent 605 */ 606 function bbp_get_forum_parent_id( $forum_id = 0 ) { 607 $forum_id = bbp_get_forum_id( $forum_id ); 608 $parent_id = (int) get_post_field( 'post_parent', $forum_id ); 609 610 // Meta-data fallback 611 if ( empty( $parent_id ) ) { 612 $parent_id = (int) get_post_meta( $forum_id, '_bbp_forum_id', true ); 613 } 614 615 // Filter 616 if ( ! empty( $parent_id ) ) { 617 $parent_id = (int) bbp_get_forum_id( $parent_id ); 618 } 619 620 // Filter & return 621 return (int) apply_filters( 'bbp_get_forum_parent_id', $parent_id, $forum_id ); 622 } 623 624 /** 625 * Return array of parent forums 626 * 627 * @since 2.0.0 bbPress (r2625) 628 * 629 * @param int $forum_id Optional. Forum id 630 * @return array Forum ancestors 631 */ 632 function bbp_get_forum_ancestors( $forum_id = 0 ) { 633 $forum_id = bbp_get_forum_id( $forum_id ); 634 $ancestors = array(); 635 $forum = bbp_get_forum( $forum_id ); 636 637 if ( ! empty( $forum ) ) { 638 while ( 0 !== (int) $forum->post_parent ) { 639 $ancestors[] = $forum->post_parent; 640 $forum = bbp_get_forum( $forum->post_parent ); 641 } 642 } 643 644 // Filter & return 645 return apply_filters( 'bbp_get_forum_ancestors', $ancestors, $forum_id ); 646 } 647 648 /** 649 * Return subforums of given forum 650 * 651 * @since 2.0.0 bbPress (r2747) 652 * 653 * @param array $args All the arguments supported by {@link WP_Query} 654 * @return mixed false if none, array of subs if yes 655 */ 656 function bbp_forum_get_subforums( $args = array() ) { 657 658 // Default return value 659 $retval = array(); 660 661 // Use passed integer as post_parent 662 if ( is_numeric( $args ) && ! empty( $args ) ) { 663 $args = array( 'post_parent' => bbp_get_forum_id( $args ) ); 664 } 665 666 // Parse arguments against default values 667 $r = bbp_parse_args( $args, array( 668 'post_parent' => 0, 669 'post_type' => bbp_get_forum_post_type(), 670 'posts_per_page' => get_option( '_bbp_forums_per_page', 50 ), 671 'orderby' => 'menu_order title', 672 'order' => 'ASC', 673 'ignore_sticky_posts' => true, 674 'no_found_rows' => true 675 ), 'forum_get_subforums' ); 676 677 // Ensure post_parent is properly set 678 $r['post_parent'] = bbp_get_forum_id( $r['post_parent'] ); 679 680 // Query if post_parent has subforums 681 if ( ! empty( $r['post_parent'] ) && bbp_get_forum_subforum_count( $r['post_parent'], true ) ) { 682 $get_posts = new WP_Query(); 683 $retval = $get_posts->query( $r ); 684 } 685 686 // Filter & return 687 return (array) apply_filters( 'bbp_forum_get_subforums', $retval, $r, $args ); 688 } 689 690 /** 691 * Output a list of forums (can be used to list subforums) 692 * 693 * @since 2.0.0 bbPress (r2708) 694 * 695 * @param array $args The function supports these args: 696 * - before: To put before the output. Defaults to '<ul class="bbp-forums-list">' 697 * - after: To put after the output. Defaults to '</ul>' 698 * - link_before: To put before every link. Defaults to '<li class="bbp-forum">' 699 * - link_after: To put after every link. Defaults to '</li>' 700 * - sep: Separator. Defaults to ''. Make sure your markup is valid! 701 * - count_before: String before each count Defaults to ' (' 702 * - count_after: String before each count Defaults to ')' 703 * - count_sep: Count separator. Defaults to ', ' 704 * - forum_id: Forum id. Defaults to '' 705 * - show_topic_count - To show forum topic count or not. Defaults to true 706 * - show_reply_count - To show forum reply count or not. Defaults to true 707 */ 708 function bbp_list_forums( $args = array() ) { 709 710 // Parse arguments against default values 711 $r = bbp_parse_args( $args, array( 712 'before' => '<ul class="bbp-forums-list">', 713 'after' => '</ul>', 714 'link_before' => '<li class="bbp-forum css-sep">', 715 'link_after' => '</li>', 716 'sep' => '', 717 'count_before' => ' (', 718 'count_after' => ')', 719 'count_sep' => ', ', 720 'forum_id' => bbp_get_forum_id(), 721 'show_topic_count' => true, 722 'show_reply_count' => true, 723 'echo' => true, 724 725 // Retired, use 'sep' instead 726 'separator' => false 727 ), 'list_forums' ); 728 729 /** 730 * Necessary for backwards compatibility 731 * @see https://bbpress.trac.wordpress.org/ticket/2900 732 */ 733 if ( ! empty( $r['separator'] ) ) { 734 $r['sep'] = $r['separator']; 735 } 736 737 // Default values 738 $links = array(); 739 $output = ''; 740 741 // Query for subforums 742 $sub_forums = ! empty( $r['forum_id'] ) 743 ? bbp_forum_get_subforums( $r['forum_id'] ) 744 : array(); 745 746 // Loop through forums and create a list 747 if ( ! empty( $sub_forums ) ) { 748 foreach ( $sub_forums as $sub_forum ) { 749 750 // Get forum details 751 $count = array(); 752 $permalink = bbp_get_forum_permalink( $sub_forum->ID ); 753 $title = bbp_get_forum_title( $sub_forum->ID ); 754 755 // Show topic count 756 if ( ! empty( $r['show_topic_count'] ) && ! bbp_is_forum_category( $sub_forum->ID ) ) { 757 $count['topic'] = bbp_get_forum_topic_count( $sub_forum->ID ); 758 } 759 760 // Show reply count 761 if ( ! empty( $r['show_reply_count'] ) && ! bbp_is_forum_category( $sub_forum->ID ) ) { 762 $count['reply'] = bbp_get_forum_reply_count( $sub_forum->ID ); 763 } 764 765 // Counts to show 766 $counts = ! empty( $count ) 767 ? $r['count_before'] . implode( $r['count_sep'], $count ) . $r['count_after'] 768 : ''; 769 770 // Subforum classes 771 $subforum_classes = array( 'bbp-forum-link' ); 772 $subforum_classes = apply_filters( 'bbp_list_forums_subforum_classes', $subforum_classes, $sub_forum->ID ); 773 774 // This could use bbp_get_forum_class() eventually... 775 $subforum_classes_attr = 'class="' . implode( ' ', array_map( 'sanitize_html_class', $subforum_classes ) ) . '"'; 776 777 // Build this sub forums link 778 $links[] = $r['link_before'] . '<a href="' . esc_url( $permalink ) . '" ' . $subforum_classes_attr . '>' . $title . $counts . '</a>' . $r['link_after']; 779 } 780 781 // Maybe wrap output 782 $output = ! empty( $links ) 783 ? $r['before'] . implode( $r['sep'], $links ) . $r['after'] 784 : ''; 785 } 786 787 // Filter output 788 $the_list = apply_filters( 'bbp_list_forums', $output, $r, $args ); 789 790 // Echo or return the forums list 791 if ( ! empty( $r['echo'] ) ) { 792 echo $the_list; 793 } else { 794 return $the_list; 795 } 796 } 797 798 /** Forum Subscriptions *******************************************************/ 799 800 /** 801 * Output the forum subscription link 802 * 803 * @since 2.5.0 bbPress (r5156) 804 * @since 2.6.0 bbPress (r6308) Add 'redirect_to' support 805 */ 806 function bbp_forum_subscription_link( $args = array() ) { 807 echo bbp_get_forum_subscription_link( $args ); 808 } 809 810 /** 811 * Get the forum subscription link 812 * 813 * A custom wrapper for bbp_get_user_subscribe_link() 814 * 815 * @since 2.5.0 bbPress (r5156) 816 * @since 2.6.0 bbPress (r6308) Add 'redirect_to' support 817 */ 818 function bbp_get_forum_subscription_link( $args = array() ) { 819 820 // Defaults 821 $retval = false; 822 $redirect_to = bbp_is_subscriptions() 823 ? bbp_get_subscriptions_permalink() 824 : ''; 825 826 // Parse the arguments 827 $r = bbp_parse_args( $args, array( 828 'user_id' => bbp_get_current_user_id(), 829 'object_id' => bbp_get_forum_id(), 830 'object_type' => 'post', 831 'before' => '', 832 'after' => '', 833 'subscribe' => esc_html__( 'Subscribe', 'bbpress' ), 834 'unsubscribe' => esc_html__( 'Unsubscribe', 'bbpress' ), 835 'redirect_to' => $redirect_to 836 ), 'get_forum_subscribe_link' ); 837 838 // No link for categories until we support subscription hierarchy 839 // @see https://bbpress.trac.wordpress.org/ticket/2475 840 if ( ! bbp_is_forum_category() ) { 841 $retval = bbp_get_user_subscribe_link( $r ); 842 } 843 844 // Filter & return 845 return apply_filters( 'bbp_get_forum_subscribe_link', $retval, $r, $args ); 846 } 847 848 /** Forum Last Topic **********************************************************/ 849 850 /** 851 * Output the forum's last topic id 852 * 853 * @since 2.0.0 bbPress (r2464) 854 * 855 * @param int $forum_id Optional. Forum id 856 */ 857 function bbp_forum_last_topic_id( $forum_id = 0 ) { 858 echo bbp_get_forum_last_topic_id( $forum_id ); 859 } 860 /** 861 * Return the forum's last topic id 862 * 863 * @since 2.0.0 bbPress (r2464) 864 * 865 * @param int $forum_id Optional. Forum id 866 * @return int Forum's last topic id 867 */ 868 function bbp_get_forum_last_topic_id( $forum_id = 0 ) { 869 $forum_id = bbp_get_forum_id( $forum_id ); 870 $topic_id = (int) get_post_meta( $forum_id, '_bbp_last_topic_id', true ); 871 872 // Filter & return 873 return (int) apply_filters( 'bbp_get_forum_last_topic_id', $topic_id, $forum_id ); 874 } 875 876 /** 877 * Output the title of the last topic inside a forum 878 * 879 * @since 2.0.0 bbPress (r2625) 880 * 881 * @param int $forum_id Optional. Forum id 882 */ 883 function bbp_forum_last_topic_title( $forum_id = 0 ) { 884 echo bbp_get_forum_last_topic_title( $forum_id ); 885 } 886 /** 887 * Return the title of the last topic inside a forum 888 * 889 * @since 2.0.0 bbPress (r2625) 890 * 891 * @param int $forum_id Optional. Forum id 892 * @return string Forum's last topic's title 893 */ 894 function bbp_get_forum_last_topic_title( $forum_id = 0 ) { 895 $forum_id = bbp_get_forum_id( $forum_id ); 896 $topic_id = bbp_get_forum_last_topic_id( $forum_id ); 897 $title = ! empty( $topic_id ) ? bbp_get_topic_title( $topic_id ) : ''; 898 899 // Filter & return 900 return apply_filters( 'bbp_get_forum_last_topic_title', $title, $forum_id ); 901 } 902 903 /** 904 * Output the link to the last topic in a forum 905 * 906 * @since 2.0.0 bbPress (r2464) 907 * 908 * @param int $forum_id Optional. Forum id 909 */ 910 function bbp_forum_last_topic_permalink( $forum_id = 0 ) { 911 echo esc_url( bbp_get_forum_last_topic_permalink( $forum_id ) ); 912 } 913 /** 914 * Return the link to the last topic in a forum 915 * 916 * @since 2.0.0 bbPress (r2464) 917 * 918 * @param int $forum_id Optional. Forum id 919 * @return string Permanent link to topic 920 */ 921 function bbp_get_forum_last_topic_permalink( $forum_id = 0 ) { 922 $forum_id = bbp_get_forum_id( $forum_id ); 923 $topic_id = bbp_get_forum_last_topic_id( $forum_id ); 924 $link = bbp_get_topic_permalink( $topic_id ); 925 926 // Filter & return 927 return apply_filters( 'bbp_get_forum_last_topic_permalink', $link, $forum_id, $topic_id ); 928 } 929 930 /** 931 * Return the author ID of the last topic of a forum 932 * 933 * @since 2.0.0 bbPress (r2625) 934 * 935 * @param int $forum_id Optional. Forum id 936 * @return int Forum's last topic's author id 937 */ 938 function bbp_get_forum_last_topic_author_id( $forum_id = 0 ) { 939 $forum_id = bbp_get_forum_id( $forum_id ); 940 $topic_id = bbp_get_forum_last_topic_id( $forum_id ); 941 $author_id = bbp_get_topic_author_id( $topic_id ); 942 943 // Filter & return 944 return (int) apply_filters( 'bbp_get_forum_last_topic_author_id', (int) $author_id, $forum_id, $topic_id ); 945 } 946 947 /** 948 * Output link to author of last topic of forum 949 * 950 * @since 2.0.0 bbPress (r2625) 951 * 952 * @param int $forum_id Optional. Forum id 953 */ 954 function bbp_forum_last_topic_author_link( $forum_id = 0 ) { 955 echo bbp_get_forum_last_topic_author_link( $forum_id ); 956 } 957 /** 958 * Return link to author of last topic of forum 959 * 960 * @since 2.0.0 bbPress (r2625) 961 * 962 * @param int $forum_id Optional. Forum id 963 * @return string Forum's last topic's author link 964 */ 965 function bbp_get_forum_last_topic_author_link( $forum_id = 0 ) { 966 $forum_id = bbp_get_forum_id( $forum_id ); 967 $author_id = bbp_get_forum_last_topic_author_id( $forum_id ); 968 $author_link = bbp_get_user_profile_link( $author_id ); 969 970 // Filter & return 971 return apply_filters( 'bbp_get_forum_last_topic_author_link', $author_link, $forum_id ); 972 } 973 974 /** Forum Last Reply **********************************************************/ 975 976 /** 977 * Output the forums last reply id 978 * 979 * @since 2.0.0 bbPress (r2464) 980 * 981 * @param int $forum_id Optional. Forum id 982 */ 983 function bbp_forum_last_reply_id( $forum_id = 0 ) { 984 echo bbp_get_forum_last_reply_id( $forum_id ); 985 } 986 /** 987 * Return the forums last reply id 988 * 989 * @since 2.0.0 bbPress (r2464) 990 * 991 * @param int $forum_id Optional. Forum id 992 * @return int Forum's last reply id 993 */ 994 function bbp_get_forum_last_reply_id( $forum_id = 0 ) { 995 $forum_id = bbp_get_forum_id( $forum_id ); 996 $reply_id = (int) get_post_meta( $forum_id, '_bbp_last_reply_id', true ); 997 998 // Filter & return 999 return (int) apply_filters( 'bbp_get_forum_last_reply_id', $reply_id, $forum_id ); 1000 } 1001 1002 /** 1003 * Output the title of the last reply inside a forum 1004 * 1005 * @param int $forum_id Optional. Forum id 1006 */ 1007 function bbp_forum_last_reply_title( $forum_id = 0 ) { 1008 echo bbp_get_forum_last_reply_title( $forum_id ); 1009 } 1010 /** 1011 * Return the title of the last reply inside a forum 1012 * 1013 * @param int $forum_id Optional. Forum id 1014 * @return string 1015 */ 1016 function bbp_get_forum_last_reply_title( $forum_id = 0 ) { 1017 $forum_id = bbp_get_forum_id( $forum_id ); 1018 $reply_id = bbp_get_forum_last_reply_id( $forum_id ); 1019 $title = bbp_get_reply_title( $reply_id ); 1020 1021 // Filter & return 1022 return apply_filters( 'bbp_get_forum_last_reply_title', $title, $forum_id, $reply_id ); 1023 } 1024 1025 /** 1026 * Output the link to the last reply in a forum 1027 * 1028 * @since 2.0.0 bbPress (r2464) 1029 * 1030 * @param int $forum_id Optional. Forum id 1031 */ 1032 function bbp_forum_last_reply_permalink( $forum_id = 0 ) { 1033 echo esc_url( bbp_get_forum_last_reply_permalink( $forum_id ) ); 1034 } 1035 /** 1036 * Return the link to the last reply in a forum 1037 * 1038 * @since 2.0.0 bbPress (r2464) 1039 * 1040 * @param int $forum_id Optional. Forum id 1041 * 1042 * @return string Permanent link to the forum's last reply 1043 */ 1044 function bbp_get_forum_last_reply_permalink( $forum_id = 0 ) { 1045 $forum_id = bbp_get_forum_id( $forum_id ); 1046 $reply_id = bbp_get_forum_last_reply_id( $forum_id ); 1047 $link = bbp_get_reply_permalink( $reply_id ); 1048 1049 // Filter & return 1050 return apply_filters( 'bbp_get_forum_last_reply_permalink', $link, $forum_id, $reply_id ); 1051 } 1052 1053 /** 1054 * Output the url to the last reply in a forum 1055 * 1056 * @since 2.0.0 bbPress (r2683) 1057 * 1058 * @param int $forum_id Optional. Forum id 1059 */ 1060 function bbp_forum_last_reply_url( $forum_id = 0 ) { 1061 echo esc_url( bbp_get_forum_last_reply_url( $forum_id ) ); 1062 } 1063 /** 1064 * Return the url to the last reply in a forum 1065 * 1066 * @since 2.0.0 bbPress (r2683) 1067 * 1068 * @param int $forum_id Optional. Forum id 1069 * @return string Paginated URL to latest reply 1070 */ 1071 function bbp_get_forum_last_reply_url( $forum_id = 0 ) { 1072 $forum_id = bbp_get_forum_id( $forum_id ); 1073 1074 // If forum has replies, get the last reply and use its url 1075 $reply_id = bbp_get_forum_last_reply_id( $forum_id ); 1076 if ( ! empty( $reply_id ) ) { 1077 $reply_url = bbp_get_reply_url( $reply_id ); 1078 1079 // No replies, so look for topics and use last permalink 1080 } else { 1081 $reply_url = bbp_get_forum_last_topic_permalink( $forum_id ); 1082 1083 // No topics either, so set $reply_url as empty string 1084 if ( empty( $reply_url ) ) { 1085 $reply_url = ''; 1086 } 1087 } 1088 1089 // Filter & return 1090 return apply_filters( 'bbp_get_forum_last_reply_url', $reply_url, $forum_id, $reply_id ); 1091 } 1092 1093 /** 1094 * Output author ID of last reply of forum 1095 * 1096 * @since 2.0.0 bbPress (r2625) 1097 * 1098 * @param int $forum_id Optional. Forum id 1099 */ 1100 function bbp_forum_last_reply_author_id( $forum_id = 0 ) { 1101 echo bbp_get_forum_last_reply_author_id( $forum_id ); 1102 } 1103 /** 1104 * Return author ID of last reply of forum 1105 * 1106 * @since 2.0.0 bbPress (r2625) 1107 * 1108 * @param int $forum_id Optional. Forum id 1109 * @return int Forum's last reply author id 1110 */ 1111 function bbp_get_forum_last_reply_author_id( $forum_id = 0 ) { 1112 $forum_id = bbp_get_forum_id( $forum_id ); 1113 $reply_id = bbp_get_forum_last_reply_id( $forum_id ); 1114 $author_id = bbp_get_reply_author_id( $reply_id ); 1115 1116 // Filter & return 1117 return apply_filters( 'bbp_get_forum_last_reply_author_id', $author_id, $forum_id, $reply_id ); 1118 } 1119 1120 /** 1121 * Output link to author of last reply of forum 1122 * 1123 * @since 2.0.0 bbPress (r2625) 1124 * 1125 * @param int $forum_id Optional. Forum id 1126 */ 1127 function bbp_forum_last_reply_author_link( $forum_id = 0 ) { 1128 echo bbp_get_forum_last_reply_author_link( $forum_id ); 1129 } 1130 /** 1131 * Return link to author of last reply of forum 1132 * 1133 * @since 2.0.0 bbPress (r2625) 1134 * 1135 * @param int $forum_id Optional. Forum id 1136 * @return string Link to author of last reply of forum 1137 */ 1138 function bbp_get_forum_last_reply_author_link( $forum_id = 0 ) { 1139 $forum_id = bbp_get_forum_id( $forum_id ); 1140 $author_id = bbp_get_forum_last_reply_author_id( $forum_id ); 1141 $author_link = bbp_get_user_profile_link( $author_id ); 1142 1143 // Filter & return 1144 return apply_filters( 'bbp_get_forum_last_reply_author_link', $author_link, $forum_id, $author_id ); 1145 } 1146 1147 /** Forum Counts **************************************************************/ 1148 1149 /** 1150 * Output the topics link of the forum 1151 * 1152 * @since 2.0.0 bbPress (r2883) 1153 * 1154 * @param int $forum_id Optional. Topic id 1155 */ 1156 function bbp_forum_topics_link( $forum_id = 0 ) { 1157 echo bbp_get_forum_topics_link( $forum_id ); 1158 } 1159 1160 /** 1161 * Return the topics link of the forum 1162 * 1163 * @since 2.0.0 bbPress (r2883) 1164 * 1165 * @param int $forum_id Optional. Topic id 1166 */ 1167 function bbp_get_forum_topics_link( $forum_id = 0 ) { 1168 $forum_id = bbp_get_forum_id( $forum_id ); 1169 $link = bbp_get_forum_permalink( $forum_id ); 1170 $topics = sprintf( _n( '%s topic', '%s topics', bbp_get_forum_topic_count( $forum_id, true, true ), 'bbpress' ), bbp_get_forum_topic_count( $forum_id, true, false ) ); 1171 1172 // First link never has view=all 1173 $retval = bbp_get_view_all( 'edit_others_topics' ) 1174 ? "<a href='" . esc_url( bbp_remove_view_all( $link ) ) . "'>" . esc_html( $topics ) . '</a>' 1175 : esc_html( $topics ); 1176 1177 // Get deleted topics 1178 $deleted_int = bbp_get_forum_topic_count_hidden( $forum_id, false, true ); 1179 1180 // This forum has hidden topics 1181 if ( ! empty( $deleted_int ) && current_user_can( 'edit_others_topics' ) ) { 1182 1183 // Hidden text 1184 $deleted_num = bbp_get_forum_topic_count_hidden( $forum_id, false, false ); 1185 $extra = ' ' . sprintf( _n( '(+%s hidden)', '(+%s hidden)', $deleted_int, 'bbpress' ), $deleted_num ); 1186 1187 // Hidden link 1188 $retval .= ! bbp_get_view_all( 'edit_others_topics' ) 1189 ? " <a href='" . esc_url( bbp_add_view_all( $link, true ) ) . "'>" . esc_html( $extra ) . '</a>' 1190 : " {$extra}"; 1191 } 1192 1193 // Filter & return 1194 return apply_filters( 'bbp_get_forum_topics_link', $retval, $forum_id ); 1195 } 1196 1197 /** 1198 * Output total sub-forum count of a forum 1199 * 1200 * @since 2.0.0 bbPress (r2464) 1201 * 1202 * @param int $forum_id Optional. Forum id to check 1203 * @param boolean $integer Optional. Whether or not to format the result 1204 */ 1205 function bbp_forum_subforum_count( $forum_id = 0, $integer = false ) { 1206 echo bbp_get_forum_subforum_count( $forum_id, $integer ); 1207 } 1208 /** 1209 * Return total subforum count of a forum 1210 * 1211 * @since 2.0.0 bbPress (r2464) 1212 * 1213 * @param int $forum_id Optional. Forum id 1214 * @param boolean $integer Optional. Whether or not to format the result 1215 * @return int Forum's subforum count 1216 */ 1217 function bbp_get_forum_subforum_count( $forum_id = 0, $integer = false ) { 1218 $forum_id = bbp_get_forum_id( $forum_id ); 1219 $forum_count = (int) get_post_meta( $forum_id, '_bbp_forum_subforum_count', true ); 1220 $filter = ( true === $integer ) 1221 ? 'bbp_get_forum_subforum_count_int' 1222 : 'bbp_get_forum_subforum_count'; 1223 1224 return apply_filters( $filter, $forum_count, $forum_id ); 1225 } 1226 1227 /** 1228 * Output total topic count of a forum 1229 * 1230 * @since 2.0.0 bbPress (r2464) 1231 * 1232 * @param int $forum_id Optional. Forum id 1233 * @param bool $total_count Optional. To get the total count or normal count? 1234 * @param boolean $integer Optional. Whether or not to format the result 1235 */ 1236 function bbp_forum_topic_count( $forum_id = 0, $total_count = true, $integer = false ) { 1237 echo bbp_get_forum_topic_count( $forum_id, $total_count, $integer ); 1238 } 1239 /** 1240 * Return total topic count of a forum 1241 * 1242 * @since 2.0.0 bbPress (r2464) 1243 * 1244 * @param int $forum_id Optional. Forum id 1245 * @param bool $total_count Optional. To get the total count or normal 1246 * count? Defaults to total. 1247 * @param boolean $integer Optional. Whether or not to format the result 1248 * @return int Forum topic count 1249 */ 1250 function bbp_get_forum_topic_count( $forum_id = 0, $total_count = true, $integer = false ) { 1251 $forum_id = bbp_get_forum_id( $forum_id ); 1252 $meta_key = empty( $total_count ) ? '_bbp_topic_count' : '_bbp_total_topic_count'; 1253 $topics = (int) get_post_meta( $forum_id, $meta_key, true ); 1254 $filter = ( true === $integer ) 1255 ? 'bbp_get_forum_topic_count_int' 1256 : 'bbp_get_forum_topic_count'; 1257 1258 return apply_filters( $filter, $topics, $forum_id ); 1259 } 1260 1261 /** 1262 * Output total reply count of a forum 1263 * 1264 * @since 2.0.0 bbPress (r2464) 1265 * 1266 * @param int $forum_id Optional. Forum id 1267 * @param bool $total_count Optional. To get the total count or normal count? 1268 * @param boolean $integer Optional. Whether or not to format the result 1269 */ 1270 function bbp_forum_reply_count( $forum_id = 0, $total_count = true, $integer = false ) { 1271 echo bbp_get_forum_reply_count( $forum_id, $total_count, $integer ); 1272 } 1273 /** 1274 * Return total post count of a forum 1275 * 1276 * @since 2.0.0 bbPress (r2464) 1277 * 1278 * @param int $forum_id Optional. Forum id 1279 * @param bool $total_count Optional. To get the total count or normal 1280 * count? 1281 * @param boolean $integer Optional. Whether or not to format the result 1282 * @return int Forum reply count 1283 */ 1284 function bbp_get_forum_reply_count( $forum_id = 0, $total_count = true, $integer = false ) { 1285 $forum_id = bbp_get_forum_id( $forum_id ); 1286 $meta_key = empty( $total_count ) ? '_bbp_reply_count' : '_bbp_total_reply_count'; 1287 $replies = (int) get_post_meta( $forum_id, $meta_key, true ); 1288 $filter = ( true === $integer ) 1289 ? 'bbp_get_forum_reply_count_int' 1290 : 'bbp_get_forum_reply_count'; 1291 1292 return apply_filters( $filter, $replies, $forum_id ); 1293 } 1294 1295 /** 1296 * Output total post count of a forum 1297 * 1298 * @since 2.0.0 bbPress (r2954) 1299 * 1300 * @param int $forum_id Optional. Forum id 1301 * @param bool $total_count Optional. To get the total count or normal count? 1302 * @param boolean $integer Optional. Whether or not to format the result 1303 */ 1304 function bbp_forum_post_count( $forum_id = 0, $total_count = true, $integer = false ) { 1305 echo bbp_get_forum_post_count( $forum_id, $total_count, $integer ); 1306 } 1307 /** 1308 * Return total post count of a forum 1309 * 1310 * @since 2.0.0 bbPress (r2954) 1311 * 1312 * @param int $forum_id Optional. Forum id 1313 * @param bool $total_count Optional. To get the total count or normal 1314 * count? 1315 * @param boolean $integer Optional. Whether or not to format the result 1316 * @return int Forum post count 1317 */ 1318 function bbp_get_forum_post_count( $forum_id = 0, $total_count = true, $integer = false ) { 1319 $forum_id = bbp_get_forum_id( $forum_id ); 1320 $topics = bbp_get_forum_topic_count( $forum_id, $total_count, true ); 1321 $replies = bbp_get_forum_reply_count( $forum_id, $total_count, true ); 1322 $retval = ( $replies + $topics ); 1323 $filter = ( true === $integer ) 1324 ? 'bbp_get_forum_post_count_int' 1325 : 'bbp_get_forum_post_count'; 1326 1327 return apply_filters( $filter, $retval, $forum_id ); 1328 } 1329 1330 /** 1331 * Output total hidden topic count of a forum (hidden includes trashed, spammed, 1332 * and pending topics) 1333 * 1334 * @since 2.0.0 bbPress (r2883) 1335 * @since 2.6.0 bbPress (r6922) Changed function signature to add total counts 1336 * 1337 * @param int $forum_id Optional. Forum id 1338 * @param bool $total_count Optional. To get the total count or normal count? 1339 * @param boolean $integer Optional. Whether or not to format the result 1340 */ 1341 function bbp_forum_topic_count_hidden( $forum_id = 0, $total_count = true, $integer = null ) { 1342 echo bbp_get_forum_topic_count_hidden( $forum_id, $total_count, $integer ); 1343 } 1344 /** 1345 * Return total hidden topic count of a forum (hidden includes trashed, 1346 * spammed and pending topics) 1347 * 1348 * @since 2.0.0 bbPress (r2883) 1349 * @since 2.6.0 bbPress (r6922) Changed function signature to add total counts 1350 * 1351 * @param int $forum_id Optional. Forum id 1352 * @param bool $total_count Optional. To get the total count or normal count? 1353 * @param boolean $integer Optional. Whether or not to format the result 1354 * @return int Topic hidden topic count 1355 */ 1356 function bbp_get_forum_topic_count_hidden( $forum_id = 0, $total_count = true, $integer = null ) { 1357 $forum_id = bbp_get_forum_id( $forum_id ); 1358 $meta_key = empty( $total_count ) ? '_bbp_topic_count_hidden' : '_bbp_topic_reply_count_hidden'; 1359 $topics = (int) get_post_meta( $forum_id, $meta_key, true ); 1360 $filter = ( true === $integer ) 1361 ? 'bbp_get_forum_topic_count_hidden_int' 1362 : 'bbp_get_forum_topic_count_hidden'; 1363 1364 return apply_filters( $filter, $topics, $forum_id ); 1365 } 1366 1367 /** 1368 * Output total hidden reply count of a forum (hidden includes trashed, spammed, 1369 * and pending replies) 1370 * 1371 * @since 2.6.0 bbPress (r6922) 1372 * 1373 * @param int $forum_id Optional. Forum id 1374 * @param bool $total_count Optional. To get the total count or normal count? 1375 * @param boolean $integer Optional. Whether or not to format the result 1376 */ 1377 function bbp_forum_reply_count_hidden( $forum_id = 0, $total_count = true, $integer = false ) { 1378 echo bbp_get_forum_reply_count_hidden( $forum_id, $total_count, $integer ); 1379 } 1380 /** 1381 * Return total hidden reply count of a forum (hidden includes trashed, 1382 * spammed and pending replies) 1383 * 1384 * @since 2.6.0 bbPress (r6922) 1385 * 1386 * @param int $forum_id Optional. Forum id 1387 * @param bool $total_count Optional. To get the total count or normal 1388 * count? 1389 * @param boolean $integer Optional. Whether or not to format the result 1390 * @return int Forum reply count 1391 */ 1392 function bbp_get_forum_reply_count_hidden( $forum_id = 0, $total_count = true, $integer = false ) { 1393 $forum_id = bbp_get_forum_id( $forum_id ); 1394 $meta_key = empty( $total_count ) ? '_bbp_reply_count_hidden' : '_bbp_total_reply_count_hidden'; 1395 $replies = (int) get_post_meta( $forum_id, $meta_key, true ); 1396 $filter = ( true === $integer ) 1397 ? 'bbp_get_forum_reply_count_hidden_int' 1398 : 'bbp_get_forum_reply_count_hidden'; 1399 1400 return apply_filters( $filter, $replies, $forum_id ); 1401 } 1402 1403 /** 1404 * Output the status of the forum 1405 * 1406 * @since 2.0.0 bbPress (r2667) 1407 * 1408 * @param int $forum_id Optional. Forum id 1409 */ 1410 function bbp_forum_status( $forum_id = 0 ) { 1411 echo bbp_get_forum_status( $forum_id ); 1412 } 1413 /** 1414 * Return the status of the forum 1415 * 1416 * @since 2.0.0 bbPress (r2667) 1417 * 1418 * @param int $forum_id Optional. Forum id 1419 * @return string Status of forum 1420 */ 1421 function bbp_get_forum_status( $forum_id = 0 ) { 1422 $forum_id = bbp_get_forum_id( $forum_id ); 1423 $status = get_post_meta( $forum_id, '_bbp_status', true ); 1424 1425 if ( empty( $status ) ) { 1426 $status = 'open'; 1427 } 1428 1429 // Filter & return 1430 return apply_filters( 'bbp_get_forum_status', $status, $forum_id ); 1431 } 1432 1433 /** 1434 * Output the visibility of the forum 1435 * 1436 * @since 2.0.0 bbPress (r2997) 1437 * 1438 * @param int $forum_id Optional. Forum id 1439 */ 1440 function bbp_forum_visibility( $forum_id = 0 ) { 1441 echo bbp_get_forum_visibility( $forum_id ); 1442 } 1443 /** 1444 * Return the visibility of the forum 1445 * 1446 * @since 2.0.0 bbPress (r2997) 1447 * 1448 * @param int $forum_id Optional. Forum id 1449 * @return string Status of forum 1450 */ 1451 function bbp_get_forum_visibility( $forum_id = 0 ) { 1452 $forum_id = bbp_get_forum_id( $forum_id ); 1453 $visibility = get_post_status( $forum_id ); 1454 1455 // Filter & return 1456 return apply_filters( 'bbp_get_forum_visibility', $visibility, $forum_id ); 1457 } 1458 1459 /** 1460 * Output the type of the forum 1461 * 1462 * @since 2.1.0 bbPress (r3563) 1463 * 1464 * @param int $forum_id Optional. Forum id 1465 */ 1466 function bbp_forum_type( $forum_id = 0 ) { 1467 echo bbp_get_forum_type( $forum_id ); 1468 } 1469 /** 1470 * Return the type of forum (category/forum/etc...) 1471 * 1472 * @since 2.1.0 bbPress (r3563) 1473 * 1474 * @param int $forum_id Optional. Forum id 1475 * @return bool Whether the forum is a category or not 1476 */ 1477 function bbp_get_forum_type( $forum_id = 0 ) { 1478 $forum_id = bbp_get_forum_id( $forum_id ); 1479 $retval = get_post_meta( $forum_id, '_bbp_forum_type', true ); 1480 1481 if ( empty( $retval ) ) { 1482 $retval = 'forum'; 1483 } 1484 1485 // Filter & return 1486 return apply_filters( 'bbp_get_forum_type', $retval, $forum_id ); 1487 } 1488 1489 /** 1490 * Is the forum a category? 1491 * 1492 * @since 2.0.0 bbPress (r2746) 1493 * 1494 * @param int $forum_id Optional. Forum id 1495 * @return bool Whether the forum is a category or not 1496 */ 1497 function bbp_is_forum_category( $forum_id = 0 ) { 1498 $forum_id = bbp_get_forum_id( $forum_id ); 1499 $type = bbp_get_forum_type( $forum_id ); 1500 $retval = ( ! empty( $type ) && 'category' === $type ); 1501 1502 // Filter & return 1503 return (bool) apply_filters( 'bbp_is_forum_category', (bool) $retval, $forum_id ); 1504 } 1505 1506 /** 1507 * Is the forum open? 1508 * 1509 * @since 2.0.0 bbPress (r2746) 1510 * 1511 * @param int $forum_id Optional. Forum id 1512 * @param bool $check_ancestors Check if the ancestors are open (only 1513 * if they're a category) 1514 * @return bool Whether the forum is open or not 1515 */ 1516 function bbp_is_forum_open( $forum_id = 0, $check_ancestors = true ) { 1517 return ! bbp_is_forum_closed( $forum_id, $check_ancestors ); 1518 } 1519 1520 /** 1521 * Is the forum closed? 1522 * 1523 * @since 2.0.0 bbPress (r2746) 1524 * 1525 * @param int $forum_id Optional. Forum id 1526 * @param bool $check_ancestors Check if the ancestors are closed (only 1527 * if they're a category) 1528 * @return bool True if closed, false if not 1529 */ 1530 function bbp_is_forum_closed( $forum_id = 0, $check_ancestors = true ) { 1531 1532 // Get the forum ID 1533 $forum_id = bbp_get_forum_id( $forum_id ); 1534 1535 // Check if the forum or one of it's ancestors is closed 1536 $retval = bbp_is_forum_status( $forum_id, bbp_get_closed_status_id(), $check_ancestors, 'OR' ); 1537 1538 // Filter & return 1539 return (bool) apply_filters( 'bbp_is_forum_closed', (bool) $retval, $forum_id, $check_ancestors ); 1540 } 1541 1542 /** 1543 * Check if the forum status is a specific one, also maybe checking ancestors 1544 * 1545 * @since 2.6.0 bbPress (r5499) 1546 * 1547 * @param bool $status_name The forum status name to check 1548 * @param bool $check_ancestors Check the forum ancestors 1549 * @param string $operator The logical operation to perform. 1550 * 'OR' means only one forum from the tree needs to match; 1551 * 'AND' means all forums must match. The default is 'AND'. 1552 * @return bool True if match, false if not 1553 */ 1554 function bbp_is_forum_status( $forum_id, $status_name, $check_ancestors = true, $operator = 'AND' ) { 1555 1556 // Setup some default variables 1557 $count = 0; 1558 $retval = false; 1559 $operator = strtoupper( $operator ); 1560 $forum_id = bbp_get_forum_id( $forum_id ); 1561 $forum_status = bbp_get_forum_status( $forum_id ); 1562 1563 // Quickly compare statuses of first forum ID 1564 if ( $status_name === $forum_status ) { 1565 $retval = true; 1566 $count++; 1567 } 1568 1569 // Let's check the forum's ancestors too 1570 if ( ! empty( $check_ancestors ) ) { 1571 1572 // Adjust the ancestor check based on the count 1573 switch ( $operator ) { 1574 default: 1575 case 'AND': 1576 $check_ancestors = ( $count > 0 ); 1577 break; 1578 1579 case 'OR': 1580 $check_ancestors = ( $count < 1 ); 1581 break; 1582 } 1583 1584 // Ancestor check passed, so continue looping through them 1585 if ( ! empty( $check_ancestors ) ) { 1586 1587 // Loop through the forum ancestors 1588 foreach ( (array) bbp_get_forum_ancestors( $forum_id ) as $ancestor ) { 1589 1590 // Check if the forum is a category 1591 if ( bbp_is_forum_category( $ancestor ) ) { 1592 1593 // Check the ancestor forum status 1594 $retval = bbp_is_forum_status( $ancestor, $status_name, false ); 1595 if ( true === $retval ) { 1596 $count++; 1597 } 1598 } 1599 1600 // Break when it reach the max count 1601 if ( ( $operator === 'OR' ) && ( $count >= 1 ) ) { 1602 break; 1603 } 1604 } 1605 } 1606 } 1607 1608 // Filter & return 1609 return (bool) apply_filters( 'bbp_is_forum_status', $retval, $count, $forum_id, $status_name, $check_ancestors, $operator ); 1610 } 1611 1612 /** 1613 * Is the forum public? 1614 * 1615 * @since 2.0.0 bbPress (r2997) 1616 * 1617 * @param int $forum_id Optional. Forum id 1618 * @param bool $check_ancestors Check if the ancestors are public 1619 * @return bool True if closed, false if not 1620 */ 1621 function bbp_is_forum_public( $forum_id = 0, $check_ancestors = true ) { 1622 1623 // Get the forum ID 1624 $forum_id = bbp_get_forum_id( $forum_id ); 1625 1626 // Check if the forum and all of it's ancestors are public 1627 $retval = bbp_is_forum_visibility( $forum_id, bbp_get_public_status_id(), $check_ancestors ); 1628 1629 // Filter & return 1630 return (bool) apply_filters( 'bbp_is_forum_public', $retval, $forum_id, $check_ancestors ); 1631 } 1632 1633 /** 1634 * Is the forum private? 1635 * 1636 * @since 2.0.0 bbPress (r2746) 1637 * 1638 * @param int $forum_id Optional. Forum id 1639 * @param bool $check_ancestors Check if the ancestors are private 1640 * @return bool True if private, false if not 1641 */ 1642 function bbp_is_forum_private( $forum_id = 0, $check_ancestors = true ) { 1643 1644 // Get the forum ID 1645 $forum_id = bbp_get_forum_id( $forum_id ); 1646 1647 // Check if the forum or one of it's ancestors is private 1648 $retval = bbp_is_forum_visibility( $forum_id, bbp_get_private_status_id(), $check_ancestors, 'OR' ); 1649 1650 // Filter & return 1651 return (bool) apply_filters( 'bbp_is_forum_private', $retval, $forum_id, $check_ancestors ); 1652 } 1653 1654 /** 1655 * Is the forum hidden? 1656 * 1657 * @since 2.0.0 bbPress (r2997) 1658 * 1659 * @param int $forum_id Optional. Forum id 1660 * @param bool $check_ancestors Check if the ancestors are private (only if 1661 * they're a category) 1662 * @return bool True if hidden, false if not 1663 */ 1664 function bbp_is_forum_hidden( $forum_id = 0, $check_ancestors = true ) { 1665 1666 // Get the forum ID 1667 $forum_id = bbp_get_forum_id( $forum_id ); 1668 1669 // Check if the forum or one of it's ancestors is hidden 1670 $retval = bbp_is_forum_visibility( $forum_id, bbp_get_hidden_status_id(), $check_ancestors, 'OR' ); 1671 1672 // Filter & return 1673 return (bool) apply_filters( 'bbp_is_forum_hidden', $retval, $forum_id, $check_ancestors ); 1674 } 1675 1676 /** 1677 * Check the forum visibility ID 1678 * 1679 * @since 2.6.0 bbPress (r5499) 1680 * 1681 * @param int $forum_id Optional. Forum id 1682 * @param bool $status_name The post status name to check 1683 * @param bool $check_ancestors Check the forum ancestors 1684 * @param string $operator The logical operation to perform. 1685 * 'OR' means only one forum from the tree needs to match; 1686 * 'AND' means all forums must match. The default is 'AND'. 1687 * @return bool True if match, false if not 1688 */ 1689 function bbp_is_forum_visibility( $forum_id, $status_name, $check_ancestors = true, $operator = 'AND' ) { 1690 1691 // Setup some default variables 1692 $count = 0; 1693 $retval = false; 1694 $operator = strtoupper( $operator ); 1695 $forum_id = bbp_get_forum_id( $forum_id ); 1696 $visibility = bbp_get_forum_visibility( $forum_id ); 1697 1698 // Quickly compare visibility of first forum ID 1699 if ( $status_name === $visibility ) { 1700 $retval = true; 1701 $count++; 1702 } 1703 1704 // Let's check the forum's ancestors too 1705 if ( ! empty( $check_ancestors ) ) { 1706 1707 // Adjust the ancestor check based on the count 1708 switch ( $operator ) { 1709 1710 // Adjust the ancestor check based on the count 1711 default: 1712 case 'AND': 1713 $check_ancestors = ( $count > 0 ); 1714 break; 1715 1716 case 'OR': 1717 $check_ancestors = ( $count < 1 ); 1718 break; 1719 } 1720 1721 // Ancestor check passed, so continue looping through them 1722 if ( ! empty( $check_ancestors ) ) { 1723 1724 // Loop through the forum ancestors 1725 foreach ( (array) bbp_get_forum_ancestors( $forum_id ) as $ancestor ) { 1726 1727 // Check if the forum is not a category 1728 if ( bbp_is_forum( $ancestor ) ) { 1729 1730 // Check the forum visibility 1731 $retval = bbp_is_forum_visibility( $ancestor, $status_name, false ); 1732 if ( true === $retval ) { 1733 $count++; 1734 } 1735 } 1736 1737 // Break when it reach the max count 1738 if ( ( $operator === 'OR' ) && ( $count >= 1 ) ) { 1739 break; 1740 } 1741 } 1742 } 1743 } 1744 1745 // Filter & return 1746 return (bool) apply_filters( 'bbp_is_forum_visibility', $retval, $count, $forum_id, $status_name, $check_ancestors, $operator ); 1747 } 1748 1749 /** 1750 * Output the author ID of the forum 1751 * 1752 * @since 2.1.0 bbPress (r3675) 1753 * 1754 * @param int $forum_id Optional. Forum id 1755 */ 1756 function bbp_forum_author_id( $forum_id = 0 ) { 1757 echo bbp_get_forum_author_id( $forum_id ); 1758 } 1759 /** 1760 * Return the author ID of the forum 1761 * 1762 * @since 2.1.0 bbPress (r3675) 1763 * 1764 * @param int $forum_id Optional. Forum id 1765 * 1766 * @return string Author of forum 1767 */ 1768 function bbp_get_forum_author_id( $forum_id = 0 ) { 1769 $forum_id = bbp_get_forum_id( $forum_id ); 1770 $author_id = get_post_field( 'post_author', $forum_id ); 1771 1772 // Filter & return 1773 return (int) apply_filters( 'bbp_get_forum_author_id', (int) $author_id, $forum_id ); 1774 } 1775 1776 /** 1777 * Output the author of the forum 1778 * 1779 * @since 2.1.0 bbPress (r3675) 1780 * 1781 * @param int $forum_id Optional. Forum id 1782 */ 1783 function bbp_forum_author_display_name( $forum_id = 0 ) { 1784 echo bbp_get_forum_author_display_name( $forum_id ); 1785 } 1786 /** 1787 * Return the author of the forum 1788 * 1789 * @since 2.1.0 bbPress (r3675) 1790 * 1791 * @param int $forum_id Optional. Forum id 1792 * @return string Author of forum 1793 */ 1794 function bbp_get_forum_author_display_name( $forum_id = 0 ) { 1795 $forum_id = bbp_get_forum_id( $forum_id ); 1796 $author_id = bbp_get_forum_author_id( $forum_id ); 1797 $author = get_the_author_meta( 'display_name', $author_id ); 1798 1799 // Filter & return 1800 return apply_filters( 'bbp_get_forum_author_display_name', $author, $forum_id, $author_id ); 1801 } 1802 1803 /** 1804 * Replace forum meta details for users that cannot view them. 1805 * 1806 * @since 2.0.0 bbPress (r3162) 1807 * 1808 * @param string $retval 1809 * @param int $forum_id 1810 * 1811 * @return string 1812 */ 1813 function bbp_suppress_private_forum_meta( $retval, $forum_id ) { 1814 if ( bbp_is_forum_private( $forum_id, false ) && ! current_user_can( 'read_forum', $forum_id ) ) { 1815 $retval = '-'; 1816 } 1817 1818 // Filter & return 1819 return apply_filters( 'bbp_suppress_private_forum_meta', $retval ); 1820 } 1821 1822 /** 1823 * Replace forum author details for users that cannot view them. 1824 * 1825 * @since 2.0.0 bbPress (r3162) 1826 * 1827 * @param string $author_link 1828 * @param array $args 1829 * 1830 * @return string 1831 */ 1832 function bbp_suppress_private_author_link( $author_link = '', $args = array() ) { 1833 1834 // Assume the author link is the return value 1835 $retval = $author_link; 1836 1837 // Show the normal author link 1838 if ( ! empty( $args['post_id'] ) && ! current_user_can( 'read_private_forums' ) ) { 1839 1840 // What post type are we looking at? 1841 switch ( get_post_type( $args['post_id'] ) ) { 1842 1843 // Topic 1844 case bbp_get_topic_post_type() : 1845 $forum_id = bbp_get_topic_forum_id( $args['post_id'] ); 1846 break; 1847 1848 // Reply 1849 case bbp_get_reply_post_type() : 1850 $forum_id = bbp_get_reply_forum_id( $args['post_id'] ); 1851 break; 1852 1853 // Post 1854 default : 1855 $forum_id = bbp_get_forum_id( $args['post_id'] ); 1856 break; 1857 } 1858 1859 // Hide if forum is private 1860 if ( bbp_is_forum_private( $forum_id ) ) { 1861 $retval = ''; 1862 } 1863 } 1864 1865 // Filter & return 1866 return apply_filters( 'bbp_suppress_private_author_link', $retval, $author_link, $args ); 1867 } 1868 1869 /** 1870 * Output the row class of a forum 1871 * 1872 * @since 2.0.0 bbPress (r2667) 1873 * 1874 * @param int $forum_id Optional. Forum ID. 1875 * @param array Extra classes you can pass when calling this function 1876 */ 1877 function bbp_forum_class( $forum_id = 0, $classes = array() ) { 1878 echo bbp_get_forum_class( $forum_id, $classes ); 1879 } 1880 /** 1881 * Return the row class of a forum 1882 * 1883 * @since 2.0.0 bbPress (r2667) 1884 * 1885 * @param int $forum_id Optional. Forum ID 1886 * @param array Extra classes you can pass when calling this function 1887 * @return string Row class of the forum 1888 */ 1889 function bbp_get_forum_class( $forum_id = 0, $classes = array() ) { 1890 $bbp = bbpress(); 1891 $forum_id = bbp_get_forum_id( $forum_id ); 1892 $parent_id = bbp_get_forum_parent_id( $forum_id ); 1893 $author_id = bbp_get_forum_author_id( $forum_id ); 1894 $status = bbp_get_forum_status( $forum_id ); 1895 $visibility = bbp_get_forum_visibility( $forum_id ); 1896 $classes = array_filter( (array) $classes ); 1897 $count = isset( $bbp->forum_query->current_post ) 1898 ? (int) $bbp->forum_query->current_post 1899 : 1; 1900 1901 // Stripes 1902 $even_odd = ( $count % 2 ) 1903 ? 'even' 1904 : 'odd'; 1905 1906 // User is moderator of forum 1907 $forum_moderator = ( bbp_is_user_forum_moderator( $author_id, $forum_id ) === $author_id ) 1908 ? 'forum-mod' 1909 : ''; 1910 1911 // Is forum a non-postable category? 1912 $category = bbp_is_forum_category( $forum_id ) 1913 ? 'status-category' 1914 : ''; 1915 1916 // Forum has children? 1917 $subs = bbp_get_forum_subforum_count( $forum_id ) 1918 ? 'bbp-has-subforums' 1919 : ''; 1920 1921 // Forum has parent? 1922 $parent = ! empty( $parent_id ) 1923 ? 'bbp-parent-forum-' . $parent_id 1924 : ''; 1925 1926 // Get forum classes 1927 $forum_classes = array( 1928 'loop-item-' . $count, 1929 'bbp-forum-status-' . $status, 1930 'bbp-forum-visibility-' . $visibility, 1931 $even_odd, 1932 $forum_moderator, 1933 $category, 1934 $subs, 1935 $parent 1936 ); 1937 1938 // Run the topic classes through the post-class filters, which also 1939 // handles the escaping of each individual class. 1940 $post_classes = get_post_class( array_merge( $classes, $forum_classes ), $forum_id ); 1941 1942 // Filter 1943 $new_classes = apply_filters( 'bbp_get_forum_class', $post_classes, $forum_id, $classes ); 1944 1945 // Return 1946 return 'class="' . implode( ' ', $new_classes ) . '"'; 1947 } 1948 1949 /** Single Forum **************************************************************/ 1950 1951 /** 1952 * Output a fancy description of the current forum, including total topics, 1953 * total replies, and last activity. 1954 * 1955 * @since 2.0.0 bbPress (r2860) 1956 * 1957 * @param array $args Arguments passed to alter output 1958 */ 1959 function bbp_single_forum_description( $args = array() ) { 1960 echo bbp_get_single_forum_description( $args ); 1961 } 1962 /** 1963 * Return a fancy description of the current forum, including total 1964 * topics, total replies, and last activity. 1965 * 1966 * @since 2.0.0 bbPress (r2860) 1967 * 1968 * @param array $args This function supports these arguments: 1969 * - forum_id: Forum id 1970 * - before: Before the text 1971 * - after: After the text 1972 * - size: Size of the avatar 1973 * @return string Filtered forum description 1974 */ 1975 function bbp_get_single_forum_description( $args = array() ) { 1976 1977 // Parse arguments against default values 1978 $r = bbp_parse_args( $args, array( 1979 'forum_id' => 0, 1980 'before' => '<div class="bbp-template-notice info"><ul><li class="bbp-forum-description">', 1981 'after' => '</li></ul></div>', 1982 'size' => 14, 1983 'feed' => true 1984 ), 'get_single_forum_description' ); 1985 1986 // Validate forum_id 1987 $forum_id = bbp_get_forum_id( $r['forum_id'] ); 1988 1989 // Unhook the 'view all' query var adder 1990 remove_filter( 'bbp_get_forum_permalink', 'bbp_add_view_all' ); 1991 1992 // Get some forum data 1993 $tc_int = bbp_get_forum_topic_count( $forum_id, true, true ); 1994 $rc_int = bbp_get_forum_reply_count( $forum_id, true, true ); 1995 $topic_count = bbp_get_forum_topic_count( $forum_id, true, false ); 1996 $reply_count = bbp_get_forum_reply_count( $forum_id, true, false ); 1997 $last_active = bbp_get_forum_last_active_id( $forum_id ); 1998 1999 // Has replies 2000 if ( ! empty( $reply_count ) ) { 2001 $reply_text = sprintf( _n( '%s reply', '%s replies', $rc_int, 'bbpress' ), $reply_count ); 2002 } 2003 2004 // Forum has active data 2005 if ( ! empty( $last_active ) ) { 2006 $topic_text = bbp_get_forum_topics_link( $forum_id ); 2007 $time_since = bbp_get_forum_freshness_link( $forum_id ); 2008 $last_updated_by = bbp_get_author_link( array( 'post_id' => $last_active, 'size' => $r['size'] ) ); 2009 2010 // Forum has no last active data 2011 } else { 2012 $topic_text = sprintf( _n( '%s topic', '%s topics', $tc_int, 'bbpress' ), $topic_count ); 2013 } 2014 2015 // Forum has active data 2016 if ( ! empty( $last_active ) ) { 2017 2018 // Has replies 2019 if ( ! empty( $reply_count ) ) { 2020 $retstr = bbp_is_forum_category( $forum_id ) 2021 ? sprintf( esc_html__( 'This category has %1$s, %2$s, and was last updated %3$s by %4$s.', 'bbpress' ), $topic_text, $reply_text, $time_since, $last_updated_by ) 2022 : sprintf( esc_html__( 'This forum has %1$s, %2$s, and was last updated %3$s by %4$s.', 'bbpress' ), $topic_text, $reply_text, $time_since, $last_updated_by ); 2023 2024 // Only has topics 2025 } else { 2026 $retstr = bbp_is_forum_category( $forum_id ) 2027 ? sprintf( esc_html__( 'This category has %1$s, and was last updated %2$s by %3$s.', 'bbpress' ), $topic_text, $time_since, $last_updated_by ) 2028 : sprintf( esc_html__( 'This forum has %1$s, and was last updated %2$s by %3$s.', 'bbpress' ), $topic_text, $time_since, $last_updated_by ); 2029 } 2030 2031 // Forum has no last active data (but does have topics & replies) 2032 } elseif ( ! empty( $reply_count ) ) { 2033 $retstr = bbp_is_forum_category( $forum_id ) 2034 ? sprintf( esc_html__( 'This category has %1$s and %2$s.', 'bbpress' ), $topic_text, $reply_text ) 2035 : sprintf( esc_html__( 'This forum has %1$s and %2$s.', 'bbpress' ), $topic_text, $reply_text ); 2036 2037 // Forum has no last active data or replies (but does have topics) 2038 } elseif ( ! empty( $topic_count ) ) { 2039 $retstr = bbp_is_forum_category( $forum_id ) 2040 ? sprintf( esc_html__( 'This category has %1$s.', 'bbpress' ), $topic_text ) 2041 : sprintf( esc_html__( 'This forum has %1$s.', 'bbpress' ), $topic_text ); 2042 2043 // Forum is empty 2044 } else { 2045 $retstr = esc_html__( 'This forum is empty.', 'bbpress' ); 2046 } 2047 2048 // Add the 'view all' filter back 2049 add_filter( 'bbp_get_forum_permalink', 'bbp_add_view_all' ); 2050 2051 // Combine the elements together 2052 $retstr = $r['before'] . $retstr . $r['after']; 2053 2054 // Filter & return 2055 return apply_filters( 'bbp_get_single_forum_description', $retstr, $r, $args ); 2056 } 2057 2058 /** Forms *********************************************************************/ 2059 2060 /** 2061 * Output the value of forum title field 2062 * 2063 * @since 2.1.0 bbPress (r3551) 2064 */ 2065 function bbp_form_forum_title() { 2066 echo bbp_get_form_forum_title(); 2067 } 2068 /** 2069 * Return the value of forum title field 2070 * 2071 * @since 2.1.0 bbPress (r3551) 2072 * 2073 * @return string Value of forum title field 2074 */ 2075 function bbp_get_form_forum_title() { 2076 2077 // Get _POST data 2078 if ( bbp_is_forum_form_post_request() && isset( $_POST['bbp_forum_title'] ) ) { 2079 $forum_title = wp_unslash( $_POST['bbp_forum_title'] ); 2080 2081 // Get edit data 2082 } elseif ( bbp_is_forum_edit() ) { 2083 $forum_title = bbp_get_global_post_field( 'post_title', 'raw' ); 2084 2085 // No data 2086 } else { 2087 $forum_title = ''; 2088 } 2089 2090 // Filter & return 2091 return apply_filters( 'bbp_get_form_forum_title', $forum_title ); 2092 } 2093 2094 /** 2095 * Output the value of forum content field 2096 * 2097 * @since 2.1.0 bbPress (r3551) 2098 */ 2099 function bbp_form_forum_content() { 2100 echo bbp_get_form_forum_content(); 2101 } 2102 /** 2103 * Return the value of forum content field 2104 * 2105 * @since 2.1.0 bbPress (r3551) 2106 * 2107 * @return string Value of forum content field 2108 */ 2109 function bbp_get_form_forum_content() { 2110 2111 // Get _POST data 2112 if ( bbp_is_forum_form_post_request() && isset( $_POST['bbp_forum_content'] ) ) { 2113 $forum_content = wp_unslash( $_POST['bbp_forum_content'] ); 2114 2115 // Get edit data 2116 } elseif ( bbp_is_forum_edit() ) { 2117 $forum_content = bbp_get_global_post_field( 'post_content', 'raw' ); 2118 2119 // No data 2120 } else { 2121 $forum_content = ''; 2122 } 2123 2124 // Filter & return 2125 return apply_filters( 'bbp_get_form_forum_content', $forum_content ); 2126 } 2127 2128 /** 2129 * Output value of forum moderators field 2130 * 2131 * @since 2.6.0 bbPress (r5837) 2132 */ 2133 function bbp_form_forum_moderators() { 2134 echo bbp_get_form_forum_moderators(); 2135 } 2136 /** 2137 * Return value of forum moderators field 2138 * 2139 * @since 2.6.0 bbPress (r5837) 2140 * 2141 * @return string Value of forum mods field 2142 */ 2143 function bbp_get_form_forum_moderators() { 2144 2145 // Default return value 2146 $forum_mods = ''; 2147 2148 // Get _POST data 2149 if ( bbp_is_forum_form_post_request() && isset( $_POST['bbp_moderators'] ) ) { 2150 $forum_mods = wp_unslash( $_POST['bbp_moderators'] ); 2151 2152 // Get edit data 2153 } elseif ( bbp_is_single_forum() || bbp_is_forum_edit() ) { 2154 2155 // Get the forum ID 2156 $forum_id = bbp_get_forum_id( get_the_ID() ); 2157 2158 // Forum exists 2159 if ( ! empty( $forum_id ) ) { 2160 2161 // Get moderator IDs 2162 $user_ids = bbp_get_moderator_ids( $forum_id ); 2163 if ( ! empty( $user_ids ) ) { 2164 $user_nicenames = bbp_get_user_nicenames_from_ids( $user_ids ); 2165 2166 // Comma separate user nicenames 2167 if ( ! empty( $user_nicenames ) ) { 2168 $forum_mods = implode( ', ', wp_list_pluck( $user_nicenames, 'user_nicename' ) ); 2169 } 2170 } 2171 } 2172 } 2173 2174 // Filter & return 2175 return apply_filters( 'bbp_get_form_forum_moderators', $forum_mods ); 2176 } 2177 2178 /** 2179 * Output value of forum parent 2180 * 2181 * @since 2.1.0 bbPress (r3551) 2182 */ 2183 function bbp_form_forum_parent() { 2184 echo bbp_get_form_forum_parent(); 2185 } 2186 /** 2187 * Return value of forum parent 2188 * 2189 * @since 2.1.0 bbPress (r3551) 2190 * 2191 * @return string Value of topic content field 2192 */ 2193 function bbp_get_form_forum_parent() { 2194 2195 // Get _POST data 2196 if ( bbp_is_forum_form_post_request() && isset( $_POST['bbp_forum_id'] ) ) { 2197 $forum_parent = (int) $_POST['bbp_forum_id']; 2198 2199 // Get edit data 2200 } elseif ( bbp_is_forum_edit() ) { 2201 $forum_parent = bbp_get_forum_parent_id(); 2202 2203 // No data 2204 } else { 2205 $forum_parent = 0; 2206 } 2207 2208 // Filter & return 2209 return apply_filters( 'bbp_get_form_forum_parent', $forum_parent ); 2210 } 2211 2212 /** 2213 * Output value of forum type 2214 * 2215 * @since 2.1.0 bbPress (r3563) 2216 */ 2217 function bbp_form_forum_type() { 2218 echo bbp_get_form_forum_type(); 2219 } 2220 /** 2221 * Return value of forum type 2222 * 2223 * @since 2.1.0 bbPress (r3563) 2224 * 2225 * @return string Value of topic content field 2226 */ 2227 function bbp_get_form_forum_type() { 2228 2229 // Get _POST data 2230 if ( bbp_is_forum_form_post_request() && isset( $_POST['bbp_forum_type'] ) ) { 2231 $forum_type = sanitize_key( $_POST['bbp_forum_type'] ); 2232 2233 // Get edit data 2234 } elseif ( bbp_is_forum_edit() ) { 2235 $forum_type = bbp_get_forum_type(); 2236 2237 // No data 2238 } else { 2239 $forum_type = 'forum'; 2240 } 2241 2242 // Filter & return 2243 return apply_filters( 'bbp_get_form_forum_type', $forum_type ); 2244 } 2245 2246 /** 2247 * Output value of forum visibility 2248 * 2249 * @since 2.1.0 bbPress (r3563) 2250 */ 2251 function bbp_form_forum_visibility() { 2252 echo bbp_get_form_forum_visibility(); 2253 } 2254 /** 2255 * Return value of forum visibility 2256 * 2257 * @since 2.1.0 bbPress (r3563) 2258 * 2259 * @return string Value of topic content field 2260 */ 2261 function bbp_get_form_forum_visibility() { 2262 2263 // Get _POST data 2264 if ( bbp_is_forum_form_post_request() && isset( $_POST['bbp_forum_visibility'] ) ) { 2265 $forum_visibility = sanitize_key( $_POST['bbp_forum_visibility'] ); 2266 2267 // Get edit data 2268 } elseif ( bbp_is_forum_edit() ) { 2269 $forum_visibility = bbp_get_forum_visibility(); 2270 2271 // No data 2272 } else { 2273 $forum_visibility = bbpress()->public_status_id; 2274 } 2275 2276 // Filter & return 2277 return apply_filters( 'bbp_get_form_forum_visibility', $forum_visibility ); 2278 } 2279 2280 /** 2281 * Output checked value of forum subscription 2282 * 2283 * @since 2.5.0 bbPress (r5156) 2284 */ 2285 function bbp_form_forum_subscribed() { 2286 echo bbp_get_form_forum_subscribed(); 2287 } 2288 /** 2289 * Return checked value of forum subscription 2290 * 2291 * @since 2.5.0 bbPress (r5156) 2292 * 2293 * @return string Checked value of forum subscription 2294 */ 2295 function bbp_get_form_forum_subscribed() { 2296 2297 // Default value 2298 $forum_subscribed = false; 2299 2300 // Get _POST data 2301 if ( bbp_is_forum_form_post_request() && isset( $_POST['bbp_forum_subscription'] ) ) { 2302 $forum_subscribed = (bool) $_POST['bbp_forum_subscription']; 2303 2304 // Get edit data 2305 } elseif ( bbp_is_forum_edit() || bbp_is_reply_edit() ) { 2306 $post_author = (int) bbp_get_global_post_field( 'post_author', 'raw' ); 2307 $forum_subscribed = bbp_is_user_subscribed( $post_author, bbp_get_forum_id() ); 2308 2309 // Get current status 2310 } elseif ( bbp_is_single_forum() ) { 2311 $forum_subscribed = bbp_is_user_subscribed( bbp_get_current_user_id(), bbp_get_forum_id() ); 2312 } 2313 2314 // Get checked output 2315 $checked = checked( $forum_subscribed, true, false ); 2316 2317 // Filter & return 2318 return apply_filters( 'bbp_get_form_forum_subscribed', $checked, $forum_subscribed ); 2319 } 2320 2321 /** Form Dropdowns ************************************************************/ 2322 2323 /** 2324 * Output value forum type dropdown 2325 * 2326 * @since 2.1.0 bbPress (r3563) 2327 * 2328 * @param $args This function supports these arguments: 2329 * - select_id: Select id. Defaults to bbp_forum_type 2330 * - tab: Deprecated. Tabindex 2331 * - forum_id: Forum id 2332 * - selected: Override the selected option 2333 */ 2334 function bbp_form_forum_type_dropdown( $args = array() ) { 2335 echo bbp_get_form_forum_type_dropdown( $args ); 2336 } 2337 /** 2338 * Return the forum type dropdown 2339 * 2340 * @since 2.1.0 bbPress (r3563) 2341 * 2342 * @param $args This function supports these arguments: 2343 * - select_id: Select id. Defaults to bbp_forum_type 2344 * - tab: Deprecated. Tabindex 2345 * - forum_id: Forum id 2346 * - selected: Override the selected option 2347 * @return string HTML select list for selecting forum type 2348 */ 2349 function bbp_get_form_forum_type_dropdown( $args = array() ) { 2350 2351 // Backpat for handling passing of a forum ID as integer 2352 if ( is_int( $args ) ) { 2353 $forum_id = (int) $args; 2354 $args = array(); 2355 } else { 2356 $forum_id = 0; 2357 } 2358 2359 // Parse arguments against default values 2360 $r = bbp_parse_args( $args, array( 2361 'select_id' => 'bbp_forum_type', 2362 'select_class' => 'bbp_dropdown', 2363 'tab' => false, 2364 'forum_id' => $forum_id, 2365 'selected' => false 2366 ), 'forum_type_select' ); 2367 2368 // No specific selected value passed 2369 if ( empty( $r['selected'] ) ) { 2370 2371 // Post value is passed 2372 if ( bbp_is_forum_form_post_request() && isset( $_POST[ $r['select_id'] ] ) ) { 2373 $r['selected'] = sanitize_key( $_POST[ $r['select_id'] ] ); 2374 2375 // No Post value was passed 2376 } else { 2377 2378 // Edit topic 2379 if ( bbp_is_forum_edit() ) { 2380 $r['forum_id'] = bbp_get_forum_id( $r['forum_id'] ); 2381 $r['selected'] = bbp_get_forum_type( $r['forum_id'] ); 2382 2383 // New topic 2384 } else { 2385 $r['selected'] = bbp_get_public_status_id(); 2386 } 2387 } 2388 } 2389 2390 // Start an output buffer, we'll finish it after the select loop 2391 ob_start(); ?> 2392 2393 <select name="<?php echo esc_attr( $r['select_id'] ); ?>" id="<?php echo esc_attr( $r['select_id'] ); ?>_select" class="<?php echo esc_attr( $r['select_class'] ); ?>"<?php bbp_tab_index_attribute( $r['tab'] ); ?>> 2394 2395 <?php foreach ( bbp_get_forum_types( $r['forum_id'] ) as $key => $label ) : ?> 2396 2397 <option value="<?php echo esc_attr( $key ); ?>"<?php selected( $key, $r['selected'] ); ?>><?php echo esc_html( $label ); ?></option> 2398 2399 <?php endforeach; ?> 2400 2401 </select> 2402 2403 <?php 2404 2405 // Filter & return 2406 return apply_filters( 'bbp_get_form_forum_type_dropdown', ob_get_clean(), $r, $args ); 2407 } 2408 2409 /** 2410 * Output value forum status dropdown 2411 * 2412 * @since 2.1.0 bbPress (r3563) 2413 * 2414 * @param $args This function supports these arguments: 2415 * - select_id: Select id. Defaults to bbp_forum_status 2416 * - tab: Deprecated. Tabindex 2417 * - forum_id: Forum id 2418 * - selected: Override the selected option 2419 */ 2420 function bbp_form_forum_status_dropdown( $args = array() ) { 2421 echo bbp_get_form_forum_status_dropdown( $args ); 2422 } 2423 /** 2424 * Return the forum status dropdown 2425 * 2426 * @since 2.1.0 bbPress (r3563) 2427 * 2428 * @param $args This function supports these arguments: 2429 * - select_id: Select id. Defaults to bbp_forum_status 2430 * - tab: Deprecated. Tabindex 2431 * - forum_id: Forum id 2432 * - selected: Override the selected option 2433 * @return string HTML select list for selecting forum status 2434 */ 2435 function bbp_get_form_forum_status_dropdown( $args = array() ) { 2436 2437 // Backpat for handling passing of a forum ID 2438 if ( is_int( $args ) ) { 2439 $forum_id = (int) $args; 2440 $args = array(); 2441 } else { 2442 $forum_id = 0; 2443 } 2444 2445 // Parse arguments against default values 2446 $r = bbp_parse_args( $args, array( 2447 'select_id' => 'bbp_forum_status', 2448 'select_class' => 'bbp_dropdown', 2449 'tab' => false, 2450 'forum_id' => $forum_id, 2451 'selected' => false 2452 ), 'forum_status_select' ); 2453 2454 // No specific selected value passed 2455 if ( empty( $r['selected'] ) ) { 2456 2457 // Post value is passed 2458 if ( bbp_is_forum_form_post_request() && isset( $_POST[ $r['select_id'] ] ) ) { 2459 $r['selected'] = sanitize_key( $_POST[ $r['select_id'] ] ); 2460 2461 // No Post value was passed 2462 } else { 2463 2464 // Edit topic 2465 if ( bbp_is_forum_edit() ) { 2466 $r['forum_id'] = bbp_get_forum_id( $r['forum_id'] ); 2467 $r['selected'] = bbp_get_forum_status( $r['forum_id'] ); 2468 2469 // New topic 2470 } else { 2471 $r['selected'] = bbp_get_public_status_id(); 2472 } 2473 } 2474 } 2475 2476 // Start an output buffer, we'll finish it after the select loop 2477 ob_start(); ?> 2478 2479 <select name="<?php echo esc_attr( $r['select_id'] ); ?>" id="<?php echo esc_attr( $r['select_id'] ); ?>_select" class="<?php echo esc_attr( $r['select_class'] ); ?>"<?php bbp_tab_index_attribute( $r['tab'] ); ?>> 2480 2481 <?php foreach ( bbp_get_forum_statuses( $r['forum_id'] ) as $key => $label ) : ?> 2482 2483 <option value="<?php echo esc_attr( $key ); ?>"<?php selected( $key, $r['selected'] ); ?>><?php echo esc_html( $label ); ?></option> 2484 2485 <?php endforeach; ?> 2486 2487 </select> 2488 2489 <?php 2490 2491 // Filter & return 2492 return apply_filters( 'bbp_get_form_forum_status_dropdown', ob_get_clean(), $r, $args ); 2493 } 2494 2495 /** 2496 * Output value forum visibility dropdown 2497 * 2498 * @since 2.1.0 bbPress (r3563) 2499 * 2500 * @param $args This function supports these arguments: 2501 * - select_id: Select id. Defaults to bbp_forum_visibility 2502 * - tab: Deprecated. Tabindex 2503 * - forum_id: Forum id 2504 * - selected: Override the selected option 2505 */ 2506 function bbp_form_forum_visibility_dropdown( $args = array() ) { 2507 echo bbp_get_form_forum_visibility_dropdown( $args ); 2508 } 2509 /** 2510 * Return the forum visibility dropdown 2511 * 2512 * @since 2.1.0 bbPress (r3563) 2513 * 2514 * @param $args This function supports these arguments: 2515 * - select_id: Select id. Defaults to bbp_forum_visibility 2516 * - tab: Deprecated. Tabindex 2517 * - forum_id: Forum id 2518 * - selected: Override the selected option 2519 * @return string HTML select list for selecting forum visibility 2520 */ 2521 function bbp_get_form_forum_visibility_dropdown( $args = array() ) { 2522 2523 // Backpat for handling passing of a forum ID 2524 if ( is_int( $args ) ) { 2525 $forum_id = (int) $args; 2526 $args = array(); 2527 } else { 2528 $forum_id = 0; 2529 } 2530 2531 // Parse arguments against default values 2532 $r = bbp_parse_args( $args, array( 2533 'select_id' => 'bbp_forum_visibility', 2534 'select_class' => 'bbp_dropdown', 2535 'tab' => false, 2536 'forum_id' => $forum_id, 2537 'selected' => false 2538 ), 'forum_type_select' ); 2539 2540 // No specific selected value passed 2541 if ( empty( $r['selected'] ) ) { 2542 2543 // Post value is passed 2544 if ( bbp_is_forum_form_post_request() && isset( $_POST[ $r['select_id'] ] ) ) { 2545 $r['selected'] = sanitize_key( $_POST[ $r['select_id'] ] ); 2546 2547 // No Post value was passed 2548 } else { 2549 2550 // Edit topic 2551 if ( bbp_is_forum_edit() ) { 2552 $r['forum_id'] = bbp_get_forum_id( $r['forum_id'] ); 2553 $r['selected'] = bbp_get_forum_visibility( $r['forum_id'] ); 2554 2555 // New topic 2556 } else { 2557 $r['selected'] = bbp_get_public_status_id(); 2558 } 2559 } 2560 } 2561 2562 // Start an output buffer, we'll finish it after the select loop 2563 ob_start(); ?> 2564 2565 <select name="<?php echo esc_attr( $r['select_id'] ); ?>" id="<?php echo esc_attr( $r['select_id'] ); ?>_select" class="<?php echo esc_attr( $r['select_class'] ); ?>"<?php bbp_tab_index_attribute( $r['tab'] ); ?>> 2566 2567 <?php foreach ( bbp_get_forum_visibilities( $r['forum_id'] ) as $key => $label ) : ?> 2568 2569 <option value="<?php echo esc_attr( $key ); ?>"<?php selected( $key, $r['selected'] ); ?>><?php echo esc_html( $label ); ?></option> 2570 2571 <?php endforeach; ?> 2572 2573 </select> 2574 2575 <?php 2576 2577 // Filter & return 2578 return apply_filters( 'bbp_get_form_forum_type_dropdown', ob_get_clean(), $r, $args ); 2579 } 2580 2581 /** 2582 * Verify if a POST request came from a failed forum attempt. 2583 * 2584 * Used to avoid cross-site request forgeries when checking posted forum form 2585 * content. 2586 * 2587 * @see bbp_forum_form_fields() 2588 * 2589 * @since 2.6.0 bbPress (r5558) 2590 * 2591 * @return boolean True if is a post request with valid nonce 2592 */ 2593 function bbp_is_forum_form_post_request() { 2594 2595 // Bail if not a post request 2596 if ( ! bbp_is_post_request() ) { 2597 return false; 2598 } 2599 2600 // Creating a new forum 2601 if ( bbp_verify_nonce_request( 'bbp-new-forum' ) ) { 2602 return true; 2603 } 2604 2605 // Editing an existing forum 2606 if ( bbp_verify_nonce_request( 'bbp-edit-forum_' . bbp_get_forum_id() ) ) { 2607 return true; 2608 } 2609 2610 return false; 2611 } 2612 2613 /** Feeds *********************************************************************/ 2614 2615 /** 2616 * Output the link for the forum feed 2617 * 2618 * @since 2.0.0 bbPress (r3172) 2619 * 2620 * @param int $forum_id Optional. Forum ID. 2621 */ 2622 function bbp_forum_topics_feed_link( $forum_id = 0 ) { 2623 echo bbp_get_forum_topics_feed_link( $forum_id ); 2624 } 2625 /** 2626 * Retrieve the link for the forum feed 2627 * 2628 * @since 2.0.0 bbPress (r3172) 2629 * 2630 * @param int $forum_id Optional. Forum ID. 2631 * 2632 * @return string 2633 */ 2634 function bbp_get_forum_topics_feed_link( $forum_id = 0 ) { 2635 2636 // Validate forum id 2637 $forum_id = bbp_get_forum_id( $forum_id ); 2638 2639 // Forum is valid 2640 if ( ! empty( $forum_id ) ) { 2641 2642 // Define local variable(s) 2643 $link = ''; 2644 2645 // Pretty permalinks 2646 if ( get_option( 'permalink_structure' ) ) { 2647 2648 // Forum link 2649 $url = trailingslashit( bbp_get_forum_permalink( $forum_id ) ) . 'feed'; 2650 $url = user_trailingslashit( $url, 'single_feed' ); 2651 2652 // Unpretty permalinks 2653 } else { 2654 $url = home_url( add_query_arg( array( 2655 'feed' => 'rss2', 2656 bbp_get_forum_post_type() => get_post_field( 'post_name', $forum_id ) 2657 ) ) ); 2658 } 2659 2660 $link = '<a href="' . esc_url( $url ) . '" class="bbp-forum-rss-link topics"><span>' . esc_attr__( 'Topics', 'bbpress' ) . '</span></a>'; 2661 } 2662 2663 // Filter & return 2664 return apply_filters( 'bbp_get_forum_topics_feed_link', $link, $url, $forum_id ); 2665 } 2666 2667 /** 2668 * Output the link for the forum replies feed 2669 * 2670 * @since 2.0.0 bbPress (r3172) 2671 * 2672 * @param int $forum_id Optional. Forum ID. 2673 */ 2674 function bbp_forum_replies_feed_link( $forum_id = 0 ) { 2675 echo bbp_get_forum_replies_feed_link( $forum_id ); 2676 } 2677 /** 2678 * Retrieve the link for the forum replies feed 2679 * 2680 * @since 2.0.0 bbPress (r3172) 2681 * 2682 * @param int $forum_id Optional. Forum ID. 2683 * 2684 * @return string 2685 */ 2686 function bbp_get_forum_replies_feed_link( $forum_id = 0 ) { 2687 2688 // Validate forum id 2689 $forum_id = bbp_get_forum_id( $forum_id ); 2690 2691 // Forum is valid 2692 if ( ! empty( $forum_id ) ) { 2693 2694 // Define local variable(s) 2695 $link = ''; 2696 2697 // Pretty permalinks 2698 if ( get_option( 'permalink_structure' ) ) { 2699 2700 // Forum link 2701 $url = trailingslashit( bbp_get_forum_permalink( $forum_id ) ) . 'feed'; 2702 $url = user_trailingslashit( $url, 'single_feed' ); 2703 $url = add_query_arg( array( 'type' => 'reply' ), $url ); 2704 2705 // Unpretty permalinks 2706 } else { 2707 $url = home_url( add_query_arg( array( 2708 'type' => 'reply', 2709 'feed' => 'rss2', 2710 bbp_get_forum_post_type() => get_post_field( 'post_name', $forum_id ) 2711 ) ) ); 2712 } 2713 2714 $link = '<a href="' . esc_url( $url ) . '" class="bbp-forum-rss-link replies"><span>' . esc_html__( 'Replies', 'bbpress' ) . '</span></a>'; 2715 } 2716 2717 // Filter & return 2718 return apply_filters( 'bbp_get_forum_replies_feed_link', $link, $url, $forum_id ); 2719 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sat Dec 21 01:00:52 2024 | Cross-referenced by PHPXref 0.7.1 |