[ Index ] |
PHP Cross Reference of BuddyPress |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * BuddyPress Blogs Template Tags. 4 * 5 * @package BuddyPress 6 * @subpackage BlogsTemplate 7 * @since 1.5.0 8 */ 9 10 // Exit if accessed directly. 11 defined( 'ABSPATH' ) || exit; 12 13 /** 14 * Output the blogs component slug. 15 * 16 * @since 1.5.0 17 * 18 */ 19 function bp_blogs_slug() { 20 echo bp_get_blogs_slug(); 21 } 22 /** 23 * Return the blogs component slug. 24 * 25 * @since 1.5.0 26 * 27 * @return string The 'blogs' slug. 28 */ 29 function bp_get_blogs_slug() { 30 31 /** 32 * Filters the blogs component slug. 33 * 34 * @since 1.5.0 35 * 36 * @param string $slug Slug for the blogs component. 37 */ 38 return apply_filters( 'bp_get_blogs_slug', buddypress()->blogs->slug ); 39 } 40 41 /** 42 * Output the blogs component root slug. 43 * 44 * @since 1.5.0 45 * 46 */ 47 function bp_blogs_root_slug() { 48 echo bp_get_blogs_root_slug(); 49 } 50 /** 51 * Return the blogs component root slug. 52 * 53 * @since 1.5.0 54 * 55 * @return string The 'blogs' root slug. 56 */ 57 function bp_get_blogs_root_slug() { 58 59 /** 60 * Filters the blogs component root slug. 61 * 62 * @since 1.5.0 63 * 64 * @param string $root_slug Root slug for the blogs component. 65 */ 66 return apply_filters( 'bp_get_blogs_root_slug', buddypress()->blogs->root_slug ); 67 } 68 69 /** 70 * Output blog directory permalink. 71 * 72 * @since 1.5.0 73 * 74 */ 75 function bp_blogs_directory_permalink() { 76 echo esc_url( bp_get_blogs_directory_permalink() ); 77 } 78 /** 79 * Return blog directory permalink. 80 * 81 * @since 1.5.0 82 * 83 * 84 * @return string The URL of the Blogs directory. 85 */ 86 function bp_get_blogs_directory_permalink() { 87 88 /** 89 * Filters the blog directory permalink. 90 * 91 * @since 1.5.0 92 * 93 * @param string $value Permalink URL for the blog directory. 94 */ 95 return apply_filters( 'bp_get_blogs_directory_permalink', trailingslashit( bp_get_root_domain() . '/' . bp_get_blogs_root_slug() ) ); 96 } 97 98 /** 99 * Rewind the blogs and reset blog index. 100 * 101 * @global BP_Blogs_Template $blogs_template {@link BP_Blogs_Template} 102 */ 103 function bp_rewind_blogs() { 104 global $blogs_template; 105 106 $blogs_template->rewind_blogs(); 107 } 108 109 /** 110 * Initialize the blogs loop. 111 * 112 * Based on the $args passed, bp_has_blogs() populates the $blogs_template 113 * global, enabling the use of BuddyPress templates and template functions to 114 * display a list of blogs. 115 * 116 * @since 1.0.0 117 * @since 1.2.0 Added $type, $page, $search_terms parameters 118 * @since 1.6.0 Added $page_arg parameter 119 * @since 2.0.0 Added $include_blog_ids, $update_meta_cache parameters 120 * @since 10.0.0 Added $date_query parameter 121 * 122 * @global BP_Blogs_Template $blogs_template {@link BP_Blogs_Template} 123 * 124 * @param array|string $args { 125 * Arguments for limiting the contents of the blogs loop. Most arguments 126 * are in the same format as {@link BP_Blogs_Blog::get()}. However, because 127 * the format of the arguments accepted here differs in a number of ways, 128 * and because bp_has_blogs() determines some default arguments in a 129 * dynamic fashion, we list all accepted arguments here as well. 130 * 131 * @type int $page Which page of results to fetch. Using page=1 without 132 * per_page will result in no pagination. Default: 1. 133 * @type int|bool $per_page Number of results per page. Default: 20. 134 * @type string $page_arg The string used as a query parameter in 135 * pagination links. Default: 'bpage'. 136 * @type int|bool $max Maximum number of results to return. 137 * Default: false (unlimited). 138 * @type string $type The order in which results should be fetched. 139 * 'active', 'alphabetical', 'newest', or 'random'. 140 * @type array $include_blog_ids Array of blog IDs to limit results to. 141 * @type string $search_terms Limit results by a search term. Default: the value of `$_REQUEST['s']` or 142 * `$_REQUEST['sites_search']`, if present. 143 * @type int $user_id The ID of the user whose blogs should be retrieved. 144 * When viewing a user profile page, 'user_id' defaults to the 145 * ID of the displayed user. Otherwise the default is false. 146 * @type array $date_query Filter results by site last activity date. See first parameter of 147 * {@link WP_Date_Query::__construct()} for syntax. Only applicable if 148 * $type is either 'newest' or 'active'. 149 * } 150 * @return bool Returns true when blogs are found, otherwise false. 151 */ 152 function bp_has_blogs( $args = '' ) { 153 global $blogs_template; 154 155 // Check for and use search terms. 156 $search_terms_default = false; 157 $search_query_arg = bp_core_get_component_search_query_arg( 'blogs' ); 158 if ( ! empty( $_REQUEST[ $search_query_arg ] ) ) { 159 $search_terms_default = stripslashes( $_REQUEST[ $search_query_arg ] ); 160 } elseif ( ! empty( $_REQUEST['s'] ) ) { 161 $search_terms_default = stripslashes( $_REQUEST['s'] ); 162 } 163 164 // Parse arguments. 165 $r = bp_parse_args( 166 $args, 167 array( 168 'type' => 'active', 169 'page_arg' => 'bpage', // See https://buddypress.trac.wordpress.org/ticket/3679. 170 'page' => 1, 171 'per_page' => 20, 172 'max' => false, 173 'user_id' => bp_displayed_user_id(), // Pass a user_id to limit to only blogs this user is a member of. 174 'include_blog_ids' => false, 175 'search_terms' => $search_terms_default, 176 'date_query' => false, 177 'update_meta_cache' => true, 178 ), 179 'has_blogs' 180 ); 181 182 // Set per_page to maximum if max is enforced. 183 if ( ! empty( $r['max'] ) && ( (int) $r['per_page'] > (int) $r['max'] ) ) { 184 $r['per_page'] = (int) $r['max']; 185 } 186 187 // Get the blogs. 188 $blogs_template = new BP_Blogs_Template( $r ); 189 190 /** 191 * Filters whether or not there are blogs to list. 192 * 193 * @since 1.1.0 194 * 195 * @param bool $value Whether or not there are blogs to list. 196 * @param BP_Blogs_Template $blogs_template Current blogs template object. 197 * @param array $r Parsed arguments used in blogs template query. 198 */ 199 return apply_filters( 'bp_has_blogs', $blogs_template->has_blogs(), $blogs_template, $r ); 200 } 201 202 /** 203 * Determine if there are still blogs left in the loop. 204 * 205 * @global object $blogs_template {@link BP_Blogs_Template} 206 * 207 * @return bool Returns true when blogs are found. 208 */ 209 function bp_blogs() { 210 global $blogs_template; 211 212 return $blogs_template->blogs(); 213 } 214 215 /** 216 * Get the current blog object in the loop. 217 * 218 * @global object $blogs_template {@link BP_Blogs_Template} 219 * 220 * @return object The current blog within the loop. 221 */ 222 function bp_the_blog() { 223 global $blogs_template; 224 225 return $blogs_template->the_blog(); 226 } 227 228 /** 229 * Output the blogs pagination count. 230 * 231 * @since 1.0.0 232 */ 233 function bp_blogs_pagination_count() { 234 echo bp_get_blogs_pagination_count(); 235 } 236 237 /** 238 * Get the blogs pagination count. 239 * 240 * @since 2.7.0 241 * 242 * @global object $blogs_template {@link BP_Blogs_Template} 243 * 244 * @return string 245 */ 246 function bp_get_blogs_pagination_count() { 247 global $blogs_template; 248 249 $start_num = intval( ( $blogs_template->pag_page - 1 ) * $blogs_template->pag_num ) + 1; 250 $from_num = bp_core_number_format( $start_num ); 251 $to_num = bp_core_number_format( ( $start_num + ( $blogs_template->pag_num - 1 ) > $blogs_template->total_blog_count ) ? $blogs_template->total_blog_count : $start_num + ( $blogs_template->pag_num - 1 ) ); 252 $total = bp_core_number_format( $blogs_template->total_blog_count ); 253 254 if ( 1 == $blogs_template->total_blog_count ) { 255 $message = __( 'Viewing 1 site', 'buddypress' ); 256 } else { 257 /* translators: 1: the site from number. 2: the site to number. 3: the total number of sites. */ 258 $message = sprintf( _n( 'Viewing %1$s - %2$s of %3$s site', 'Viewing %1$s - %2$s of %3$s sites', $blogs_template->total_blog_count, 'buddypress' ), $from_num, $to_num, $total ); 259 } 260 261 /** 262 * Filters the "Viewing x-y of z blogs" pagination message. 263 * 264 * @since 2.7.0 265 * 266 * @param string $message "Viewing x-y of z blogs" text. 267 * @param string $from_num Total amount for the low value in the range. 268 * @param string $to_num Total amount for the high value in the range. 269 * @param string $total Total amount of blogs found. 270 */ 271 return apply_filters( 'bp_get_blogs_pagination_count', $message, $from_num, $to_num, $total ); 272 } 273 274 /** 275 * Output the blogs pagination links. 276 */ 277 function bp_blogs_pagination_links() { 278 echo bp_get_blogs_pagination_links(); 279 } 280 /** 281 * Return the blogs pagination links. 282 * 283 * @global object $blogs_template {@link BP_Blogs_Template} 284 * 285 * @return string HTML pagination links. 286 */ 287 function bp_get_blogs_pagination_links() { 288 global $blogs_template; 289 290 /** 291 * Filters the blogs pagination links. 292 * 293 * @since 1.0.0 294 * 295 * @param string $pag_links HTML pagination links. 296 */ 297 return apply_filters( 'bp_get_blogs_pagination_links', $blogs_template->pag_links ); 298 } 299 300 /** 301 * Output a blog's avatar. 302 * 303 * @see bp_get_blog_avatar() for description of arguments. 304 * 305 * @param array|string $args See {@link bp_get_blog_avatar()}. 306 */ 307 function bp_blog_avatar( $args = '' ) { 308 echo bp_get_blog_avatar( $args ); 309 } 310 /** 311 * Get a blog's avatar. 312 * 313 * At the moment, unless the blog has a site icon, the blog's avatar defaults 314 * to the /bp-core/images/mystery-blog.png image or the Blog's Admin user avatar 315 * if the `admin_user_id` argument contains the Blog's Admin user ID. 316 * 317 * @since 2.4.0 Introduced `$title` argument. 318 * @since 6.0.0 Introduced the `$blog_id`, `$admin_user_id` and `html` arguments. 319 * @since 7.0.0 Introduced the Blog's default avatar {@see bp_blogs_default_avatar()}. 320 * Removed the `'bp_get_blog_avatar_' . $blog_id` filter (it was deprecated since 1.5). 321 * 322 * @see bp_core_fetch_avatar() For a description of arguments and 323 * return values. 324 * 325 * @param array|string $args { 326 * Arguments are listed here with an explanation of their defaults. 327 * For more information about the arguments, see 328 * {@link bp_core_fetch_avatar()}. 329 * @type string $alt Default: 'Profile picture of site author [user name]'. 330 * @type string $class Default: 'avatar'. 331 * @type string $type Default: 'full'. 332 * @type int|bool $width Default: false. 333 * @type int|bool $height Default: false. 334 * @type bool $id Currently unused. 335 * @type bool $no_grav Default: false. 336 * @type int $blog_id The blog ID. Default: O. 337 * @type int $admin_user_id The Blog Admin user ID. Default: 0. 338 * @type bool $html Default: true. 339 * } 340 * @return string User avatar string. 341 */ 342 function bp_get_blog_avatar( $args = '' ) { 343 global $blogs_template; 344 345 // Bail if avatars are turned off 346 // @todo Should we maybe still filter this? 347 if ( ! buddypress()->avatar->show_avatars ) { 348 return false; 349 } 350 351 // Set default value for the `alt` attribute. 352 $alt_attribute = __( 'Site icon for the blog', 'buddypress' ); 353 354 if ( ! $blogs_template && isset( $args['blog_id'] ) && $args['blog_id'] ) { 355 $blog_id = (int) $args['blog_id']; 356 } else { 357 $blog_id = bp_get_blog_id(); 358 359 /* translators: %s is the blog name */ 360 $alt_attribute = sprintf( __( 'Site icon for %s', 'buddypress' ), bp_get_blog_name() ); 361 } 362 363 // Parse the arguments. 364 $r = bp_parse_args( 365 $args, 366 array( 367 'item_id' => $blog_id, 368 'avatar_dir' => 'blog-avatars', 369 'object' => 'blog', 370 'type' => 'full', 371 'width' => false, 372 'height' => false, 373 'class' => 'avatar', 374 'id' => false, 375 'alt' => $alt_attribute, 376 'no_grav' => false, 377 'html' => true, 378 ), 379 'blog_avatar' 380 ); 381 382 /** 383 * If the `admin_user_id` was provided, make the Blog avatar 384 * defaults to the Blog's Admin user one. 385 */ 386 if ( isset( $r['admin_user_id'] ) && $r['admin_user_id'] ) { 387 $r['item_id'] = (int) $r['admin_user_id']; 388 $r['avatar_dir'] = 'avatars'; 389 $r['object'] = 'user'; 390 } elseif ( ! $r['no_grav'] ) { 391 $r['no_grav'] = true; 392 } 393 394 // Use site icon if available. 395 $avatar = ''; 396 if ( bp_is_active( 'blogs', 'site-icon' ) ) { 397 $site_icon = bp_blogs_get_blogmeta( $blog_id, "site_icon_url_{$r['type']}" ); 398 399 // Never attempted to fetch site icon before; do it now! 400 if ( '' === $site_icon ) { 401 // Fetch the other size first. 402 if ( 'full' === $r['type'] ) { 403 $size = bp_core_avatar_thumb_width(); 404 $save_size = 'thumb'; 405 } else { 406 $size = bp_core_avatar_full_width(); 407 $save_size = 'full'; 408 } 409 410 $site_icon = bp_blogs_get_site_icon_url( $blog_id, $size ); 411 412 // Empty site icons get saved as integer 0. 413 if ( empty( $site_icon ) ) { 414 $site_icon = 0; 415 } 416 417 // Sync site icon for other size to blogmeta. 418 bp_blogs_update_blogmeta( $blog_id, "site_icon_url_{$save_size}", $site_icon ); 419 420 // Now, fetch the size we want. 421 if ( 0 !== $site_icon ) { 422 $size = 'full' === $r['type'] ? bp_core_avatar_full_width() : bp_core_avatar_thumb_width(); 423 $site_icon = bp_blogs_get_site_icon_url( $blog_id, $size ); 424 } 425 426 // Sync site icon to blogmeta. 427 bp_blogs_update_blogmeta( $blog_id, "site_icon_url_{$r['type']}", $site_icon ); 428 } 429 430 // We have a site icon. 431 if ( ! is_numeric( $site_icon ) ) { 432 // Just return the raw url of the Site Icon. 433 if ( ! $r['html'] ) { 434 return esc_url_raw( $site_icon ); 435 } 436 437 if ( empty( $r['width'] ) && ! isset( $size ) ) { 438 $size = 'full' === $r['type'] ? bp_core_avatar_full_width() : bp_core_avatar_thumb_width(); 439 } else { 440 $size = (int) $r['width']; 441 } 442 443 $avatar = sprintf( '<img src="%1$s" class="%2$s" width="%3$s" height="%3$s" alt="%4$s" />', 444 esc_url( $site_icon ), 445 esc_attr( "{$r['class']} avatar-{$size}" ), 446 esc_attr( $size ), 447 esc_attr( $alt_attribute ) 448 ); 449 } 450 } 451 452 // Fallback to Default blog avatar. 453 if ( '' === $avatar ) { 454 $avatar = bp_core_fetch_avatar( $r ); 455 } 456 457 /** 458 * Filters a blog's avatar. 459 * 460 * @since 1.5.0 461 * 462 * @param string $avatar Formatted HTML <img> element, or raw avatar 463 * URL based on $html arg. 464 * @param int $blog_id ID of the blog whose avatar is being displayed. 465 * @param array $r Array of arguments used when fetching avatar. 466 */ 467 return apply_filters( 'bp_get_blog_avatar', $avatar, $blog_id, $r ); 468 } 469 470 function bp_blog_permalink() { 471 echo bp_get_blog_permalink(); 472 } 473 function bp_get_blog_permalink() { 474 global $blogs_template; 475 476 if ( empty( $blogs_template->blog->domain ) ) 477 $permalink = bp_get_root_domain() . $blogs_template->blog->path; 478 else { 479 $protocol = 'http://'; 480 if ( is_ssl() ) 481 $protocol = 'https://'; 482 483 $permalink = $protocol . $blogs_template->blog->domain . $blogs_template->blog->path; 484 } 485 486 /** 487 * Filters the blog permalink. 488 * 489 * @since 1.0.0 490 * 491 * @param string $permalink Permalink URL for the blog. 492 */ 493 return apply_filters( 'bp_get_blog_permalink', $permalink ); 494 } 495 496 /** 497 * Output the name of the current blog in the loop. 498 */ 499 function bp_blog_name() { 500 echo bp_get_blog_name(); 501 } 502 /** 503 * Return the name of the current blog in the loop. 504 * 505 * @return string The name of the current blog in the loop. 506 */ 507 function bp_get_blog_name() { 508 global $blogs_template; 509 510 /** 511 * Filters the name of the current blog in the loop. 512 * 513 * @since 1.2.0 514 * 515 * @param string $name Name of the current blog in the loop. 516 */ 517 return apply_filters( 'bp_get_blog_name', $blogs_template->blog->name ); 518 } 519 520 /** 521 * Output the ID of the current blog in the loop. 522 * 523 * @since 1.7.0 524 */ 525 function bp_blog_id() { 526 echo bp_get_blog_id(); 527 } 528 /** 529 * Return the ID of the current blog in the loop. 530 * 531 * @since 1.7.0 532 * 533 * @return int ID of the current blog in the loop. 534 */ 535 function bp_get_blog_id() { 536 global $blogs_template; 537 538 /** 539 * Filters the ID of the current blog in the loop. 540 * 541 * @since 1.7.0 542 * 543 * @param int $blog_id ID of the current blog in the loop. 544 */ 545 return apply_filters( 'bp_get_blog_id', $blogs_template->blog->blog_id ); 546 } 547 548 /** 549 * Output the description of the current blog in the loop. 550 */ 551 function bp_blog_description() { 552 553 /** 554 * Filters the description of the current blog in the loop. 555 * 556 * @since 1.2.0 557 * 558 * @param string $value Description of the current blog in the loop. 559 */ 560 echo apply_filters( 'bp_blog_description', bp_get_blog_description() ); 561 } 562 /** 563 * Return the description of the current blog in the loop. 564 * 565 * @return string Description of the current blog in the loop. 566 */ 567 function bp_get_blog_description() { 568 global $blogs_template; 569 570 /** 571 * Filters the description of the current blog in the loop. 572 * 573 * @since 1.0.0 574 * 575 * @param string $value Description of the current blog in the loop. 576 */ 577 return apply_filters( 'bp_get_blog_description', $blogs_template->blog->description ); 578 } 579 580 /** 581 * Output the row class of the current blog in the loop. 582 * 583 * @since 1.7.0 584 * 585 * @param array $classes Array of custom classes. 586 */ 587 function bp_blog_class( $classes = array() ) { 588 echo bp_get_blog_class( $classes ); 589 } 590 /** 591 * Return the row class of the current blog in the loop. 592 * 593 * @since 1.7.0 594 * 595 * @global BP_Blogs_Template $blogs_template 596 * 597 * @param array $classes Array of custom classes. 598 * @return string Row class of the site. 599 */ 600 function bp_get_blog_class( $classes = array() ) { 601 global $blogs_template; 602 603 // Add even/odd classes, but only if there's more than 1 group. 604 if ( $blogs_template->blog_count > 1 ) { 605 $pos_in_loop = (int) $blogs_template->current_blog; 606 $classes[] = ( $pos_in_loop % 2 ) ? 'even' : 'odd'; 607 608 // If we've only one site in the loop, don't bother with odd and even. 609 } else { 610 $classes[] = 'bp-single-blog'; 611 } 612 613 /** 614 * Filters the row class of the current blog in the loop. 615 * 616 * @since 1.7.0 617 * 618 * @param array $classes Array of classes to be applied to row. 619 */ 620 $classes = apply_filters( 'bp_get_blog_class', $classes ); 621 $classes = array_merge( $classes, array() ); 622 $retval = 'class="' . join( ' ', $classes ) . '"'; 623 624 return $retval; 625 } 626 627 /** 628 * Output the last active date of the current blog in the loop. 629 * 630 * @param array $args See {@link bp_get_blog_last_active()}. 631 */ 632 function bp_blog_last_active( $args = array() ) { 633 echo bp_get_blog_last_active( $args ); 634 } 635 /** 636 * Return the last active date of the current blog in the loop. 637 * 638 * @param array $args { 639 * Array of optional arguments. 640 * @type bool $active_format If true, formatted "Active 5 minutes ago". 641 * If false, formatted "5 minutes ago". 642 * Default: true. 643 * } 644 * @return string Last active date. 645 */ 646 function bp_get_blog_last_active( $args = array() ) { 647 global $blogs_template; 648 649 // Parse the activity format. 650 $r = bp_parse_args( 651 $args, 652 array( 653 'active_format' => true, 654 ) 655 ); 656 657 // Backwards compatibility for anyone forcing a 'true' active_format. 658 if ( true === $r['active_format'] ) { 659 /* translators: %s: human time diff of the last time the site was active. */ 660 $r['active_format'] = _x( 'Active %s', 'last time the site was active', 'buddypress' ); 661 } 662 663 // Blog has been posted to at least once. 664 if ( isset( $blogs_template->blog->last_activity ) ) { 665 666 // Backwards compatibility for pre 1.5 'ago' strings. 667 $last_activity = ! empty( $r['active_format'] ) 668 ? bp_core_get_last_activity( $blogs_template->blog->last_activity, $r['active_format'] ) 669 : bp_core_time_since( $blogs_template->blog->last_activity ); 670 671 // Blog has never been posted to. 672 } else { 673 $last_activity = __( 'Never active', 'buddypress' ); 674 } 675 676 /** 677 * Filters the last active date of the current blog in the loop. 678 * 679 * @since 1.2.0 680 * 681 * @param string $last_activity Last active date. 682 * @param array $r Array of parsed args used to determine formatting. 683 */ 684 return apply_filters( 'bp_blog_last_active', $last_activity, $r ); 685 } 686 687 /** 688 * Output the latest post from the current blog in the loop. 689 * 690 * @param array $args See {@link bp_get_blog_latest_post()}. 691 */ 692 function bp_blog_latest_post( $args = array() ) { 693 echo bp_get_blog_latest_post( $args ); 694 } 695 /** 696 * Return the latest post from the current blog in the loop. 697 * 698 * @param array $args { 699 * Array of optional arguments. 700 * @type bool $latest_format If true, formatted "Latest post: [link to post]". 701 * If false, formatted "[link to post]". 702 * Default: true. 703 * } 704 * @return string $retval String of the form 'Latest Post: [link to post]'. 705 */ 706 function bp_get_blog_latest_post( $args = array() ) { 707 global $blogs_template; 708 709 $r = bp_parse_args( 710 $args, 711 array( 712 'latest_format' => true, 713 ) 714 ); 715 716 $retval = bp_get_blog_latest_post_title(); 717 718 if ( ! empty( $retval ) ) { 719 if ( ! empty( $r['latest_format'] ) ) { 720 721 /** 722 * Filters the title text of the latest post for the current blog in loop. 723 * 724 * @since 1.0.0 725 * 726 * @param string $retval Title of the latest post. 727 */ 728 $retval = sprintf( 729 /* translators: %s: the title of the latest post */ 730 __( 'Latest Post: %s', 'buddypress' ), 731 '<a href="' . $blogs_template->blog->latest_post->guid . '">' . apply_filters( 'the_title', $retval ) . '</a>' 732 ); 733 } else { 734 735 /** This filter is documented in bp-blogs/bp-blogs-template.php */ 736 $retval = '<a href="' . $blogs_template->blog->latest_post->guid . '">' . apply_filters( 'the_title', $retval ) . '</a>'; 737 } 738 } 739 740 /** 741 * Filters the HTML markup result for the latest blog post in loop. 742 * 743 * @since 1.2.0 744 * @since 2.6.0 Added the `$r` parameter. 745 * 746 * @param string $retval HTML markup for the latest post. 747 * @param array $r Array of parsed arguments. 748 */ 749 return apply_filters( 'bp_get_blog_latest_post', $retval, $r ); 750 } 751 752 /** 753 * Output the title of the latest post on the current blog in the loop. 754 * 755 * @since 1.7.0 756 * 757 * @see bp_get_blog_latest_post_title() 758 */ 759 function bp_blog_latest_post_title() { 760 echo bp_get_blog_latest_post_title(); 761 } 762 /** 763 * Return the title of the latest post on the current blog in the loop. 764 * 765 * @since 1.7.0 766 * 767 * @global BP_Blogs_Template 768 * 769 * @return string Post title. 770 */ 771 function bp_get_blog_latest_post_title() { 772 global $blogs_template; 773 774 $retval = ''; 775 776 if ( ! empty( $blogs_template->blog->latest_post ) && ! empty( $blogs_template->blog->latest_post->post_title ) ) 777 $retval = $blogs_template->blog->latest_post->post_title; 778 779 /** 780 * Filters the title text of the latest post on the current blog in the loop. 781 * 782 * @since 1.7.0 783 * 784 * @param string $retval Title text for the latest post. 785 */ 786 return apply_filters( 'bp_get_blog_latest_post_title', $retval ); 787 } 788 789 /** 790 * Output the permalink of the latest post on the current blog in the loop. 791 * 792 * @since 1.7.0 793 * 794 * @see bp_get_blog_latest_post_title() 795 */ 796 function bp_blog_latest_post_permalink() { 797 echo esc_url( bp_get_blog_latest_post_permalink() ); 798 } 799 /** 800 * Return the permalink of the latest post on the current blog in the loop. 801 * 802 * @since 1.7.0 803 * 804 * @global BP_Blogs_Template 805 * 806 * @return string URL of the blog's latest post. 807 */ 808 function bp_get_blog_latest_post_permalink() { 809 global $blogs_template; 810 811 $retval = ''; 812 813 if ( ! empty( $blogs_template->blog->latest_post ) && ! empty( $blogs_template->blog->latest_post->ID ) ) 814 $retval = add_query_arg( 'p', $blogs_template->blog->latest_post->ID, bp_get_blog_permalink() ); 815 816 /** 817 * Filters the permalink of the latest post on the current blog in the loop. 818 * 819 * @since 1.7.0 820 * 821 * @param string $retval Permalink URL of the latest post. 822 */ 823 return apply_filters( 'bp_get_blog_latest_post_permalink', $retval ); 824 } 825 826 /** 827 * Output the content of the latest post on the current blog in the loop. 828 * 829 * @since 1.7.0 830 * 831 */ 832 function bp_blog_latest_post_content() { 833 echo bp_get_blog_latest_post_content(); 834 } 835 /** 836 * Return the content of the latest post on the current blog in the loop. 837 * 838 * @since 1.7.0 839 * 840 * @global BP_Blogs_Template 841 * 842 * @return string Content of the blog's latest post. 843 */ 844 function bp_get_blog_latest_post_content() { 845 global $blogs_template; 846 847 $retval = ''; 848 849 if ( ! empty( $blogs_template->blog->latest_post ) && ! empty( $blogs_template->blog->latest_post->post_content ) ) 850 $retval = $blogs_template->blog->latest_post->post_content; 851 852 /** 853 * Filters the content of the latest post on the current blog in the loop. 854 * 855 * @since 1.7.0 856 * 857 * @param string $retval Content of the latest post on the current blog in the loop. 858 */ 859 return apply_filters( 'bp_get_blog_latest_post_content', $retval ); 860 } 861 862 /** 863 * Output the featured image of the latest post on the current blog in the loop. 864 * 865 * @since 1.7.0 866 * 867 * @see bp_get_blog_latest_post_content() For description of parameters. 868 * 869 * @param string $size See {@link bp_get_blog_latest_post_featured_image()}. 870 */ 871 function bp_blog_latest_post_featured_image( $size = 'thumbnail' ) { 872 echo bp_get_blog_latest_post_featured_image( $size ); 873 } 874 /** 875 * Return the featured image of the latest post on the current blog in the loop. 876 * 877 * @since 1.7.0 878 * 879 * @global BP_Blogs_Template 880 * 881 * @param string $size Image version to return. 'thumbnail', 'medium', 882 * 'large', or 'post-thumbnail'. Default: 'thumbnail'. 883 * @return string URL of the image. 884 */ 885 function bp_get_blog_latest_post_featured_image( $size = 'thumbnail' ) { 886 global $blogs_template; 887 888 $retval = ''; 889 890 if ( ! empty( $blogs_template->blog->latest_post ) && ! empty( $blogs_template->blog->latest_post->images[$size] ) ) 891 $retval = $blogs_template->blog->latest_post->images[$size]; 892 893 /** 894 * Filters the featured image of the latest post on the current blog in the loop. 895 * 896 * @since 1.7.0 897 * 898 * @param string $retval The featured image of the latest post on the current blog in the loop. 899 */ 900 return apply_filters( 'bp_get_blog_latest_post_featured_image', $retval ); 901 } 902 903 /** 904 * Does the latest blog post have a featured image? 905 * 906 * @since 1.7.0 907 * 908 * @param string $thumbnail Image version to return. 'thumbnail', 'medium', 'large', 909 * or 'post-thumbnail'. Default: 'thumbnail'. 910 * @return bool True if the latest blog post from the current blog has a 911 * featured image of the given size. 912 */ 913 function bp_blog_latest_post_has_featured_image( $thumbnail = 'thumbnail' ) { 914 $image = bp_get_blog_latest_post_featured_image( $thumbnail ); 915 916 /** 917 * Filters whether or not the latest blog post has a featured image. 918 * 919 * @since 1.7.0 920 * 921 * @param bool $value Whether or not the latest blog post has a featured image. 922 * @param string $thumbnail Image version to return. 923 * @param string $image Returned value from bp_get_blog_latest_post_featured_image. 924 */ 925 return apply_filters( 'bp_blog_latest_post_has_featured_image', ! empty( $image ), $thumbnail, $image ); 926 } 927 928 /** 929 * Output hidden fields to help with form submissions in Sites directory. 930 * 931 * This function detects whether 's', 'letter', or 'blogs_search' requests are 932 * currently being made (as in a URL parameter), and creates corresponding 933 * hidden fields. 934 */ 935 function bp_blog_hidden_fields() { 936 if ( isset( $_REQUEST['s'] ) ) 937 echo '<input type="hidden" id="search_terms" value="' . esc_attr( $_REQUEST['s'] ). '" name="search_terms" />'; 938 939 if ( isset( $_REQUEST['letter'] ) ) 940 echo '<input type="hidden" id="selected_letter" value="' . esc_attr( $_REQUEST['letter'] ) . '" name="selected_letter" />'; 941 942 if ( isset( $_REQUEST['blogs_search'] ) ) 943 echo '<input type="hidden" id="search_terms" value="' . esc_attr( $_REQUEST['blogs_search'] ) . '" name="search_terms" />'; 944 } 945 946 /** 947 * Output the total number of blogs on the site. 948 */ 949 function bp_total_blog_count() { 950 echo bp_get_total_blog_count(); 951 } 952 /** 953 * Return the total number of blogs on the site. 954 * 955 * @return int Total number of blogs. 956 */ 957 function bp_get_total_blog_count() { 958 959 /** 960 * Filters the total number of blogs on the site. 961 * 962 * @since 1.2.0 963 * 964 * @param int $value Total number of blogs on the site. 965 */ 966 return apply_filters( 'bp_get_total_blog_count', bp_blogs_total_blogs() ); 967 } 968 add_filter( 'bp_get_total_blog_count', 'bp_core_number_format' ); 969 970 /** 971 * Output the total number of blogs for a given user. 972 * 973 * @param int $user_id ID of the user. 974 */ 975 function bp_total_blog_count_for_user( $user_id = 0 ) { 976 echo bp_get_total_blog_count_for_user( $user_id ); 977 } 978 /** 979 * Return the total number of blogs for a given user. 980 * 981 * @param int $user_id ID of the user. 982 * @return int Total number of blogs for the user. 983 */ 984 function bp_get_total_blog_count_for_user( $user_id = 0 ) { 985 986 /** 987 * Filters the total number of blogs for a given user. 988 * 989 * @since 1.2.0 990 * @since 2.6.0 Added the `$user_id` parameter. 991 * 992 * @param int $value Total number of blogs for a given user. 993 * @param int $user_id ID of the queried user. 994 */ 995 return apply_filters( 'bp_get_total_blog_count_for_user', bp_blogs_total_blogs_for_user( $user_id ), $user_id ); 996 } 997 add_filter( 'bp_get_total_blog_count_for_user', 'bp_core_number_format' ); 998 999 1000 /** Blog Registration ********************************************************/ 1001 1002 /** 1003 * Output the wrapper markup for the blog signup form. 1004 * 1005 * @since 1.0.0 1006 * 1007 * @param string $blogname Optional. The default blog name (path or domain). 1008 * @param string $blog_title Optional. The default blog title. 1009 * @param string|WP_Error $errors Optional. The WP_Error object returned by a previous 1010 * submission attempt. 1011 */ 1012 function bp_show_blog_signup_form( $blogname = '', $blog_title = '', $errors = '' ) { 1013 $blog_id = bp_blogs_validate_blog_signup(); 1014 1015 // Display the signup form. 1016 if ( false === $blog_id || is_wp_error( $blog_id ) ) { 1017 if ( is_wp_error( $blog_id ) ) { 1018 $errors = $blog_id; 1019 } else { 1020 $errors = new WP_Error(); 1021 } 1022 1023 /** 1024 * Filters the default values for Blog name, title, and any current errors. 1025 * 1026 * @since 1.0.0 1027 * 1028 * @param array $value { 1029 * string $blogname Default blog name provided. 1030 * string $blog_title Default blog title provided. 1031 * WP_Error $errors WP_Error object. 1032 * } 1033 */ 1034 $filtered_results = apply_filters('signup_another_blog_init', array('blogname' => $blogname, 'blog_title' => $blog_title, 'errors' => $errors )); 1035 $blogname = $filtered_results['blogname']; 1036 $blog_title = $filtered_results['blog_title']; 1037 $errors = $filtered_results['errors']; 1038 1039 if ( $errors->get_error_code() ) { 1040 if ( in_array( $errors->get_error_code(), array( 'blogname', 'blog_title' ), true ) ) { 1041 printf( 1042 '<p class="error">%s</p>', 1043 esc_html__( 'There was a problem; please correct the form below and try again.', 'buddypress' ) 1044 ); 1045 } else { 1046 printf( 1047 '<p class="error">%s</p>', 1048 $errors->get_error_message() 1049 ); 1050 } 1051 } 1052 1053 printf( 1054 '<p>%1$s <strong>%2$s</strong>. %3$s</p>', 1055 esc_html__( 'By filling out the form below, you can', 'buddypress' ), 1056 esc_html__( 'add a site to your account', 'buddypress' ), 1057 esc_html__( 'There is no limit to the number of sites that you can have, so create to your heart’s content, but blog responsibly!', 'buddypress' ) 1058 ); 1059 ?> 1060 1061 <p> 1062 <?php esc_html_e( 'If you’re not going to use a great domain, leave it for a new user. Now have at it!', 'buddypress' ); ?> 1063 </p> 1064 1065 <form class="standard-form" id="setupform" method="post" action=""> 1066 1067 <input type="hidden" name="stage" value="gimmeanotherblog" /> 1068 <?php 1069 1070 /** 1071 * Fires after the default hidden fields in blog signup form markup. 1072 * 1073 * @since 1.0.0 1074 */ 1075 do_action( 'signup_hidden_fields' ); ?> 1076 1077 <?php bp_blogs_signup_blog( $blogname, $blog_title, $errors ); ?> 1078 <p> 1079 <input id="submit" type="submit" name="submit" class="submit" value="<?php esc_attr_e( 'Create Site', 'buddypress' ); ?>" /> 1080 </p> 1081 1082 <?php wp_nonce_field( 'bp_blog_signup_form' ) ?> 1083 </form> 1084 <?php 1085 1086 // Display the confirmation form. 1087 } elseif ( is_numeric( $blog_id ) ) { 1088 // Validate the site. 1089 $site = get_site( $blog_id ); 1090 1091 if ( isset( $site->id ) && $site->id ) { 1092 $current_user = wp_get_current_user(); 1093 1094 bp_blogs_confirm_blog_signup( 1095 $site->domain, 1096 $site->path, 1097 $site->blogname, 1098 $current_user->user_login, 1099 $current_user->user_email, 1100 '', 1101 $site->id 1102 ); 1103 } 1104 } 1105 } 1106 1107 /** 1108 * Output the input fields for the blog creation form. 1109 * 1110 * @since 1.0.0 1111 * 1112 * @param string $blogname Optional. The default blog name (path or domain). 1113 * @param string $blog_title Optional. The default blog title. 1114 * @param string|WP_Error $errors Optional. The WP_Error object returned by a previous 1115 * submission attempt. 1116 */ 1117 function bp_blogs_signup_blog( $blogname = '', $blog_title = '', $errors = '' ) { 1118 $current_site = get_current_site(); 1119 1120 if ( ! $blogname && ! $blog_title ) { 1121 $submitted_vars = bp_blogs_get_signup_form_submitted_vars(); 1122 1123 if ( array_filter( $submitted_vars ) ) { 1124 $blogname = $submitted_vars['blogname']; 1125 $blog_title = $submitted_vars['blog_title']; 1126 } 1127 } 1128 ?> 1129 1130 <p> 1131 <?php 1132 // Blog name. 1133 if ( ! is_subdomain_install() ) { 1134 printf( '<label for="blogname">%s</label>', esc_html__( 'Site Name:', 'buddypress' ) ); 1135 } else { 1136 printf( '<label for="blogname">%s</label>', esc_html__( 'Site Domain:', 'buddypress' ) ); 1137 } 1138 1139 if ( ! is_subdomain_install() ) { 1140 printf( 1141 '<span class="prefix_address">%1$s</span> <input name="blogname" type="text" id="blogname" value="%2$s" maxlength="63" style="width: auto!important" /><br />', 1142 esc_html( $current_site->domain . $current_site->path ), 1143 esc_attr( $blogname ) 1144 ); 1145 } else { 1146 printf( 1147 '<input name="blogname" type="text" id="blogname" value="%1$s" maxlength="63" style="width: auto!important" %2$s/> <span class="suffix_address">.%3$s</span><br />', 1148 esc_attr( $blogname ), 1149 bp_get_form_field_attributes( 'blogname' ), 1150 bp_signup_get_subdomain_base() 1151 ); 1152 } 1153 if ( is_wp_error( $errors ) && $errors->get_error_message( 'blogname' ) ) { 1154 printf( '<div class="error">%s</div>', $errors->get_error_message( 'blogname' ) ); 1155 } 1156 ?> 1157 </p> 1158 1159 <?php 1160 if ( ! is_user_logged_in() ) { 1161 $url = sprintf( 1162 /* translators: %s is the site domain and path. */ 1163 __( 'domain.%s' , 'buddypress' ), 1164 $current_site->domain . $current_site->path 1165 ); 1166 1167 if ( ! is_subdomain_install() ) { 1168 $url = sprintf( 1169 /* translators: %s is the site domain and path. */ 1170 __( '%sblogname' , 'buddypress'), 1171 $current_site->domain . $current_site->path 1172 ); 1173 } 1174 1175 printf( 1176 '<p>(<strong>%1$s.</strong> %2$s)</p>', 1177 sprintf( 1178 /* translators: %s is the site url. */ 1179 esc_html__( 'Your address will be %s' , 'buddypress' ), $url 1180 ), 1181 esc_html__( 'Must be at least 4 characters, letters and numbers only. It cannot be changed so choose carefully!' , 'buddypress' ) 1182 ); 1183 } 1184 1185 // Blog Title. 1186 ?> 1187 <p> 1188 <label for="blog_title"><?php esc_html_e('Site Title:', 'buddypress') ?></label> 1189 <input name="blog_title" type="text" id="blog_title" value="<?php echo esc_html( $blog_title ); ?>" /> 1190 1191 <?php 1192 if ( is_wp_error( $errors ) && $errors->get_error_message( 'blog_title' ) ) { 1193 printf( '<div class="error">%s</div>', $errors->get_error_message( 'blog_title' ) ); 1194 } 1195 ?> 1196 </p> 1197 1198 <fieldset class="create-site"> 1199 1200 <legend class="label"><?php esc_html_e( 'Privacy: I would like my site to appear in search engines, and in public listings around this network', 'buddypress' ) ?></legend> 1201 1202 <p> 1203 <label class="checkbox" for="blog_public_on"> 1204 <input type="radio" id="blog_public_on" name="blog_public" value="1" <?php checked( ! isset( $_POST['blog_public'] ) || 1 === (int) $_POST['blog_public'] ); ?> /> 1205 <strong><?php esc_html_e( 'Yes' , 'buddypress'); ?></strong> 1206 </label> 1207 </p> 1208 1209 <p> 1210 <label class="checkbox" for="blog_public_off"> 1211 <input type="radio" id="blog_public_off" name="blog_public" value="0" <?php checked( isset( $_POST['blog_public'] ) && 0 === (int) $_POST['blog_public'] ); ?> /> 1212 <strong><?php esc_html_e( 'No' , 'buddypress'); ?></strong> 1213 </label> 1214 </p> 1215 1216 </fieldset> 1217 1218 <?php 1219 1220 /** 1221 * Fires at the end of all of the default input fields for blog creation form. 1222 * 1223 * @since 1.0.0 1224 * 1225 * @param WP_Error $errors WP_Error object if any present. 1226 */ 1227 do_action( 'signup_blogform', $errors ); 1228 } 1229 1230 /** 1231 * Process a blog registration submission. 1232 * 1233 * Passes submitted values to {@link wpmu_create_blog()}. 1234 * 1235 * @since 1.0.0 1236 * 1237 * @return bool|int|WP_Error False if not a form submission, the Blog ID on success, a WP_Error object on failure. 1238 */ 1239 function bp_blogs_validate_blog_signup() { 1240 if ( ! isset( $_POST['submit'] ) ) { 1241 return false; 1242 } 1243 1244 $current_site = get_current_site(); 1245 $current_user = wp_get_current_user(); 1246 $blog_name = ''; 1247 $blog_title = ''; 1248 $public = 1; 1249 1250 if ( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( wp_unslash( $_POST['_wpnonce'] ), 'bp_blog_signup_form' ) || ! $current_user->ID ) { 1251 return new WP_Error( 'bp_blogs_doing_it_wrong', __( 'Sorry, we cannot create the site. Please try again later.', 'buddypress' ) ); 1252 } 1253 1254 $submitted_vars = bp_blogs_get_signup_form_submitted_vars(); 1255 1256 if ( array_filter( $submitted_vars ) ) { 1257 $blog_name = $submitted_vars['blogname']; 1258 $blog_title = $submitted_vars['blog_title']; 1259 $public = (int) $submitted_vars['blog_public']; 1260 } 1261 1262 $blog = bp_blogs_validate_blog_form( $blog_name, $blog_title ); 1263 1264 if ( is_wp_error( $blog['errors'] ) && $blog['errors']->get_error_code() ) { 1265 return $blog['errors']; 1266 } 1267 1268 /** 1269 * Filters the default values for Blog meta. 1270 * 1271 * @since 1.0.0 1272 * 1273 * @param array $meta { 1274 * string $value Default blog language ID. 1275 * string $public Default public status. 1276 * } 1277 */ 1278 $meta = apply_filters( 'add_signup_meta', array( 'lang_id' => 1, 'public' => $public ) ); 1279 1280 return wpmu_create_blog( 1281 $blog['domain'], 1282 $blog['path'], 1283 $blog['blog_title'], 1284 $current_user->ID, $meta, 1285 $current_site->id 1286 ); 1287 } 1288 1289 /** 1290 * Display a message after successful blog registration. 1291 * 1292 * @since 1.0.0 1293 * @since 2.6.0 Introduced `$blog_id` parameter. 1294 * 1295 * @param string $domain The new blog's domain. 1296 * @param string $path The new blog's path. 1297 * @param string $blog_title The new blog's title. 1298 * @param string $user_name The user name of the user who created the blog. Unused. 1299 * @param string $user_email The email of the user who created the blog. Unused. 1300 * @param string|array $meta Meta values associated with the new blog. Unused. 1301 * @param int|null $blog_id ID of the newly created blog. 1302 */ 1303 function bp_blogs_confirm_blog_signup( $domain, $path, $blog_title, $user_name, $user_email = '', $meta = '', $blog_id = null ) { 1304 switch_to_blog( $blog_id ); 1305 $blog_url = set_url_scheme( home_url() ); 1306 $login_url = set_url_scheme( wp_login_url() ); 1307 restore_current_blog(); 1308 1309 ?> 1310 <p class="success"><?php esc_html_e( 'Congratulations! You have successfully registered a new site.', 'buddypress' ) ?></p> 1311 <p> 1312 <?php printf( 1313 '%s %s', 1314 sprintf( 1315 /* translators: %s: the link of the new site */ 1316 __( '%s is your new site.', 'buddypress' ), 1317 sprintf( '<a href="%s">%s</a>', esc_url( $blog_url ), esc_url( $blog_url ) ) 1318 ), 1319 sprintf( 1320 /* translators: 1: Login URL, 2: User name */ 1321 __( '<a href="%1$s">Log in</a> as "%2$s" using your existing password.', 'buddypress' ), 1322 esc_url( $login_url ), 1323 esc_html( $user_name ) 1324 ) 1325 ); ?> 1326 </p> 1327 1328 <?php 1329 1330 /** 1331 * Fires after the default successful blog registration message markup. 1332 * 1333 * @since 1.0.0 1334 */ 1335 do_action( 'signup_finished' ); 1336 } 1337 1338 /** 1339 * Output a "Create a Site" link for users viewing their own profiles. 1340 * 1341 * This function is not used by BuddyPress as of 1.2, but is kept here for older 1342 * themes that may still be using it. 1343 */ 1344 function bp_create_blog_link() { 1345 1346 // Don't show this link when not on your own profile. 1347 if ( ! bp_is_my_profile() ) { 1348 return; 1349 } 1350 1351 /** 1352 * Filters "Create a Site" links for users viewing their own profiles. 1353 * 1354 * @since 1.0.0 1355 * 1356 * @param string $value HTML link for creating a site. 1357 */ 1358 echo apply_filters( 'bp_create_blog_link', '<a href="' . trailingslashit( bp_get_blogs_directory_permalink() . 'create' ) . '">' . __( 'Create a Site', 'buddypress' ) . '</a>' ); 1359 } 1360 1361 /** 1362 * Output navigation tabs for a user Blogs page. 1363 * 1364 * Currently unused by BuddyPress. 1365 */ 1366 function bp_blogs_blog_tabs() { 1367 1368 // Don't show these tabs on a user's own profile. 1369 if ( bp_is_my_profile() ) { 1370 return false; 1371 } ?> 1372 1373 <ul class="content-header-nav"> 1374 <li<?php if ( bp_is_current_action( 'my-blogs' ) || !bp_current_action() ) : ?> class="current"<?php endif; ?>> 1375 <a href="<?php echo trailingslashit( bp_displayed_user_domain() . bp_get_blogs_slug() . '/my-blogs' ); ?>"> 1376 <?php 1377 /* translators: %s: the User Display Name */ 1378 printf( __( "%s's Sites", 'buddypress' ), bp_get_displayed_user_fullname() ); 1379 ?> 1380 </a> 1381 </li> 1382 <li<?php if ( bp_is_current_action( 'recent-posts' ) ) : ?> class="current"<?php endif; ?>> 1383 <a href="<?php echo trailingslashit( bp_displayed_user_domain() . bp_get_blogs_slug() . '/recent-posts' ); ?>"> 1384 <?php 1385 /* translators: %s: the User Display Name */ 1386 printf( __( "%s's Recent Posts", 'buddypress' ), bp_get_displayed_user_fullname() ); 1387 ?> 1388 </a> 1389 </li> 1390 <li<?php if ( bp_is_current_action( 'recent-comments' ) ) : ?> class="current"<?php endif; ?>> 1391 <a href="<?php echo trailingslashit( bp_displayed_user_domain() . bp_get_blogs_slug() . '/recent-comments' ); ?>"> 1392 <?php 1393 /* translators: %s: the User Display Name */ 1394 printf( __( "%s's Recent Comments", 'buddypress' ), bp_get_displayed_user_fullname() ); 1395 ?> 1396 </a> 1397 </li> 1398 </ul> 1399 1400 <?php 1401 1402 /** 1403 * Fires after the markup for the navigation tabs for a user Blogs page. 1404 * 1405 * @since 1.0.0 1406 */ 1407 do_action( 'bp_blogs_blog_tabs' ); 1408 } 1409 1410 /** 1411 * Output the blog directory search form. 1412 */ 1413 function bp_directory_blogs_search_form() { 1414 1415 $query_arg = bp_core_get_component_search_query_arg( 'blogs' ); 1416 1417 if ( ! empty( $_REQUEST[ $query_arg ] ) ) { 1418 $search_value = stripslashes( $_REQUEST[ $query_arg ] ); 1419 } else { 1420 $search_value = bp_get_search_default_text( 'blogs' ); 1421 } 1422 1423 $search_form_html = '<form action="" method="get" id="search-blogs-form"> 1424 <label for="blogs_search"><input type="text" name="' . esc_attr( $query_arg ) . '" id="blogs_search" placeholder="'. esc_attr( $search_value ) .'" /></label> 1425 <input type="submit" id="blogs_search_submit" name="blogs_search_submit" value="' . __( 'Search', 'buddypress' ) . '" /> 1426 </form>'; 1427 1428 /** 1429 * Filters the output for the blog directory search form. 1430 * 1431 * @since 1.9.0 1432 * 1433 * @param string $search_form_html HTML markup for blog directory search form. 1434 */ 1435 echo apply_filters( 'bp_directory_blogs_search_form', $search_form_html ); 1436 } 1437 1438 /** 1439 * Output the Create a Site button. 1440 * 1441 * @since 2.0.0 1442 */ 1443 function bp_blog_create_button() { 1444 echo bp_get_blog_create_button(); 1445 } 1446 /** 1447 * Get the Create a Site button. 1448 * 1449 * @since 2.0.0 1450 * 1451 * @return false|string 1452 */ 1453 function bp_get_blog_create_button() { 1454 if ( ! is_user_logged_in() ) { 1455 return false; 1456 } 1457 1458 if ( ! bp_blog_signup_enabled() ) { 1459 return false; 1460 } 1461 1462 $button_args = array( 1463 'id' => 'create_blog', 1464 'component' => 'blogs', 1465 'link_text' => __( 'Create a Site', 'buddypress' ), 1466 'link_class' => 'blog-create no-ajax', 1467 'link_href' => trailingslashit( bp_get_blogs_directory_permalink() . 'create' ), 1468 'wrapper' => false, 1469 'block_self' => false, 1470 ); 1471 1472 /** 1473 * Filters the Create a Site button. 1474 * 1475 * @since 2.0.0 1476 * 1477 * @param array $button_args Array of arguments to be used for the Create a Site button. 1478 */ 1479 return bp_get_button( apply_filters( 'bp_get_blog_create_button', $button_args ) ); 1480 } 1481 1482 /** 1483 * Output the Create a Site nav item. 1484 * 1485 * @since 2.2.0 1486 */ 1487 function bp_blog_create_nav_item() { 1488 echo bp_get_blog_create_nav_item(); 1489 } 1490 1491 /** 1492 * Get the Create a Site nav item. 1493 * 1494 * @since 2.2.0 1495 * 1496 * @return string 1497 */ 1498 function bp_get_blog_create_nav_item() { 1499 // Get the create a site button. 1500 $create_blog_button = bp_get_blog_create_button(); 1501 1502 // Make sure the button is available. 1503 if ( empty( $create_blog_button ) ) { 1504 return; 1505 } 1506 1507 $output = '<li id="blog-create-nav">' . $create_blog_button . '</li>'; 1508 1509 /** 1510 * Filters the Create A Site nav item output. 1511 * 1512 * @since 2.2.0 1513 * 1514 * @param string $output Nav item output. 1515 */ 1516 return apply_filters( 'bp_get_blog_create_nav_item', $output ); 1517 } 1518 1519 /** 1520 * Checks if a specific theme is still filtering the Blogs directory title 1521 * if so, transform the title button into a Blogs directory nav item. 1522 * 1523 * @since 2.2.0 1524 * 1525 * @return string|null HTML Output 1526 */ 1527 function bp_blog_backcompat_create_nav_item() { 1528 // Bail if Blogs nav item is already used by bp-legacy. 1529 if ( has_action( 'bp_blogs_directory_blog_types', 'bp_legacy_theme_blog_create_nav', 999 ) ) { 1530 return; 1531 } 1532 1533 // Bail if the theme is not filtering the Blogs directory title. 1534 if ( ! has_filter( 'bp_blogs_directory_header' ) ) { 1535 return; 1536 } 1537 1538 bp_blog_create_nav_item(); 1539 } 1540 add_action( 'bp_blogs_directory_blog_types', 'bp_blog_backcompat_create_nav_item', 1000 ); 1541 1542 /** 1543 * Output button for visiting a blog in a loop. 1544 * 1545 * @see bp_get_blogs_visit_blog_button() for description of arguments. 1546 * 1547 * @param array|string $args See {@link bp_get_blogs_visit_blog_button()}. 1548 */ 1549 function bp_blogs_visit_blog_button( $args = '' ) { 1550 echo bp_get_blogs_visit_blog_button( $args ); 1551 } 1552 /** 1553 * Return button for visiting a blog in a loop. 1554 * 1555 * @see BP_Button for a complete description of arguments and return 1556 * value. 1557 * 1558 * @param array|string $args { 1559 * Arguments are listed below, with their default values. For a 1560 * complete description of arguments, see {@link BP_Button}. 1561 * @type string $id Default: 'visit_blog'. 1562 * @type string $component Default: 'blogs'. 1563 * @type bool $must_be_logged_in Default: false. 1564 * @type bool $block_self Default: false. 1565 * @type string $wrapper_class Default: 'blog-button visit'. 1566 * @type string $link_href Permalink of the current blog in the loop. 1567 * @type string $link_class Default: 'blog-button visit'. 1568 * @type string $link_text Default: 'Visit Site'. 1569 * } 1570 * @return string The HTML for the Visit button. 1571 */ 1572 function bp_get_blogs_visit_blog_button( $args = '' ) { 1573 $button = bp_parse_args( 1574 $args, 1575 array( 1576 'id' => 'visit_blog', 1577 'component' => 'blogs', 1578 'must_be_logged_in' => false, 1579 'block_self' => false, 1580 'wrapper_class' => 'blog-button visit', 1581 'link_href' => bp_get_blog_permalink(), 1582 'link_class' => 'blog-button visit', 1583 'link_text' => __( 'Visit Site', 'buddypress' ), 1584 ) 1585 ); 1586 1587 /** 1588 * Filters the button for visiting a blog in a loop. 1589 * 1590 * @since 1.2.10 1591 * 1592 * @param array $button Array of arguments to be used for the button to visit a blog. 1593 */ 1594 return bp_get_button( apply_filters( 'bp_get_blogs_visit_blog_button', $button ) ); 1595 } 1596 1597 /** Stats **********************************************************************/ 1598 1599 /** 1600 * Display the number of blogs in user's profile. 1601 * 1602 * @since 2.0.0 1603 * 1604 * @param array|string $args Before|after|user_id. 1605 */ 1606 function bp_blogs_profile_stats( $args = '' ) { 1607 echo bp_blogs_get_profile_stats( $args ); 1608 } 1609 add_action( 'bp_members_admin_user_stats', 'bp_blogs_profile_stats', 9, 1 ); 1610 1611 /** 1612 * Return the number of blogs in user's profile. 1613 * 1614 * @since 2.0.0 1615 * 1616 * @param array|string $args Before|after|user_id. 1617 * @return string HTML for stats output. 1618 */ 1619 function bp_blogs_get_profile_stats( $args = '' ) { 1620 1621 // Parse the args. 1622 $r = bp_parse_args( 1623 $args, 1624 array( 1625 'before' => '<li class="bp-blogs-profile-stats">', 1626 'after' => '</li>', 1627 'user_id' => bp_displayed_user_id(), 1628 'blogs' => 0, 1629 'output' => '', 1630 ), 1631 'blogs_get_profile_stats' 1632 ); 1633 1634 // Allow completely overloaded output. 1635 if ( is_multisite() && empty( $r['output'] ) ) { 1636 1637 // Only proceed if a user ID was passed. 1638 if ( ! empty( $r['user_id'] ) ) { 1639 1640 // Get the user's blogs. 1641 if ( empty( $r['blogs'] ) ) { 1642 $r['blogs'] = absint( bp_blogs_total_blogs_for_user( $r['user_id'] ) ); 1643 } 1644 1645 // If blogs exist, show some formatted output. 1646 $r['output'] = $r['before']; 1647 1648 /* translators: %s: the number of blogs */ 1649 $r['output'] .= sprintf( _n( '%s site', '%s sites', $r['blogs'], 'buddypress' ), '<strong>' . $r['blogs'] . '</strong>' ); 1650 $r['output'] .= $r['after']; 1651 } 1652 } 1653 1654 /** 1655 * Filters the number of blogs in user's profile. 1656 * 1657 * @since 2.0.0 1658 * 1659 * @param string $value Output determined for the profile stats. 1660 * @param array $r Array of arguments used for default output if none provided. 1661 */ 1662 return apply_filters( 'bp_blogs_get_profile_stats', $r['output'], $r ); 1663 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Oct 15 01:00:54 2024 | Cross-referenced by PHPXref 0.7.1 |