/** * @covers ::bbp_reply_permalink * @covers ::bbp_get_reply_permalink */ public function test_bbp_get_reply_permalink() { if (is_multisite()) { $this->markTestSkipped('Skipping URL tests in multiste for now.'); } $f = $this->factory->forum->create(); $t = $this->factory->topic->create(array('post_parent' => $f, 'topic_meta' => array('forum_id' => $f))); $r = $this->factory->reply->create(array('post_parent' => $t, 'reply_meta' => array('forum_id' => $f, 'topic_id' => $t))); $reply_permalink = bbp_get_reply_permalink($r); $this->expectOutputString($reply_permalink); bbp_reply_permalink($r); $this->assertSame('http://' . WP_TESTS_DOMAIN . '/?reply=' . bbp_get_reply_id($r), $reply_permalink); }
/** * Return the link to the last reply in a topic * * @since 2.0.0 bbPress (r2464) * * @param int $topic_id Optional. Topic id * @uses bbp_get_topic_id() To get the topic id * @uses bbp_get_topic_last_reply_id() To get the topic last reply id * @uses bbp_get_reply_permalink() To get the reply permalink * @uses apply_filters() Calls 'bbp_get_topic_last_topic_permalink' with * the reply permalink and topic id * @return string Permanent link to the reply */ function bbp_get_topic_last_reply_permalink($topic_id = 0) { $topic_id = bbp_get_topic_id($topic_id); $reply_id = bbp_get_topic_last_reply_id($topic_id); $retval = bbp_get_reply_permalink($reply_id); return apply_filters('bbp_get_topic_last_reply_permalink', $retval, $topic_id, $reply_id); }
/** * Return a breadcrumb ( forum -> topic -> reply ) * * @since bbPress (r2589) * * @param string $sep Separator. Defaults to '←' * @param bool $current_page Include the current item * @param bool $root Include the root page if one exists * * @uses get_post() To get the post * @uses bbp_get_forum_permalink() To get the forum link * @uses bbp_get_topic_permalink() To get the topic link * @uses bbp_get_reply_permalink() To get the reply link * @uses get_permalink() To get the permalink * @uses bbp_get_forum_post_type() To get the forum post type * @uses bbp_get_topic_post_type() To get the topic post type * @uses bbp_get_reply_post_type() To get the reply post type * @uses bbp_get_forum_title() To get the forum title * @uses bbp_get_topic_title() To get the topic title * @uses bbp_get_reply_title() To get the reply title * @uses get_the_title() To get the title * @uses apply_filters() Calls 'bbp_get_breadcrumb' with the crumbs * @return string Breadcrumbs */ function bbp_get_breadcrumb($args = array()) { // Turn off breadcrumbs if (apply_filters('bbp_no_breadcrumb', is_front_page())) { return; } // Define variables $front_id = $root_id = 0; $ancestors = $crumbs = $tag_data = array(); $pre_root_text = $pre_front_text = $pre_current_text = ''; $pre_include_root = $pre_include_home = $pre_include_current = true; /** Home Text *********************************************************/ // No custom home text if (empty($args['home_text'])) { // Set home text to page title $front_id = get_option('page_on_front'); if (!empty($front_id)) { $pre_front_text = get_the_title($front_id); // Default to 'Home' } else { $pre_front_text = __('Home', 'bbpress'); } } /** Root Text *********************************************************/ // No custom root text if (empty($args['root_text'])) { $page = bbp_get_page_by_path(bbp_get_root_slug()); if (!empty($page)) { $root_id = $page->ID; } $pre_root_text = bbp_get_forum_archive_title(); } /** Includes **********************************************************/ // Root slug is also the front page if (!empty($front_id) && $front_id == $root_id) { $pre_include_root = false; } // Don't show root if viewing forum archive if (bbp_is_forum_archive()) { $pre_include_root = false; } // Don't show root if viewing page in place of forum archive if (!empty($root_id) && ((is_single() || is_page()) && $root_id == get_the_ID())) { $pre_include_root = false; } /** Current Text ******************************************************/ // Forum archive if (bbp_is_forum_archive()) { $pre_current_text = bbp_get_forum_archive_title(); // Topic archive } elseif (bbp_is_topic_archive()) { $pre_current_text = bbp_get_topic_archive_title(); // View } elseif (bbp_is_single_view()) { $pre_current_text = bbp_get_view_title(); // Single Forum } elseif (bbp_is_single_forum()) { $pre_current_text = bbp_get_forum_title(); // Single Topic } elseif (bbp_is_single_topic()) { $pre_current_text = bbp_get_topic_title(); // Single Topic } elseif (bbp_is_single_reply()) { $pre_current_text = bbp_get_reply_title(); // Topic Tag (or theme compat topic tag) } elseif (bbp_is_topic_tag() || get_query_var('bbp_topic_tag') && !bbp_is_topic_tag_edit()) { // Always include the tag name $tag_data[] = bbp_get_topic_tag_name(); // If capable, include a link to edit the tag if (current_user_can('manage_topic_tags')) { $tag_data[] = '<a href="' . bbp_get_topic_tag_edit_link() . '" class="bbp-edit-topic-tag-link">' . __('(Edit)', 'bbpress') . '</a>'; } // Implode the results of the tag data $pre_current_text = sprintf(__('Topic Tag: %s', 'bbpress'), implode(' ', $tag_data)); // Edit Topic Tag } elseif (bbp_is_topic_tag_edit()) { $pre_current_text = __('Edit', 'bbpress'); // Single } else { $pre_current_text = get_the_title(); } /** Parse Args ********************************************************/ // Parse args $defaults = array('before' => '<div class="bbp-breadcrumb"><p>', 'after' => '</p></div>', 'sep' => __('›', 'bbpress'), 'pad_sep' => 1, 'include_home' => $pre_include_home, 'home_text' => $pre_front_text, 'include_root' => $pre_include_root, 'root_text' => $pre_root_text, 'include_current' => $pre_include_current, 'current_text' => $pre_current_text); $r = bbp_parse_args($args, $defaults, 'get_breadcrumb'); extract($r); /** Ancestors *********************************************************/ // Get post ancestors if (is_page() || is_single() || bbp_is_forum_edit() || bbp_is_topic_edit() || bbp_is_reply_edit()) { $ancestors = array_reverse(get_post_ancestors(get_the_ID())); } // Do we want to include a link to home? if (!empty($include_home) || empty($home_text)) { $crumbs[] = '<a href="' . trailingslashit(home_url()) . '" class="bbp-breadcrumb-home">' . $home_text . '</a>'; } // Do we want to include a link to the forum root? if (!empty($include_root) || empty($root_text)) { // Page exists at root slug path, so use its permalink $page = bbp_get_page_by_path(bbp_get_root_slug()); if (!empty($page)) { $root_url = get_permalink($page->ID); // Use the root slug } else { $root_url = get_post_type_archive_link(bbp_get_forum_post_type()); } // Add the breadcrumb $crumbs[] = '<a href="' . $root_url . '" class="bbp-breadcrumb-root">' . $root_text . '</a>'; } // Ancestors exist if (!empty($ancestors)) { // Loop through parents foreach ((array) $ancestors as $parent_id) { // Parents $parent = get_post($parent_id); // Switch through post_type to ensure correct filters are applied switch ($parent->post_type) { // Forum case bbp_get_forum_post_type(): $crumbs[] = '<a href="' . bbp_get_forum_permalink($parent->ID) . '" class="bbp-breadcrumb-forum">' . bbp_get_forum_title($parent->ID) . '</a>'; break; // Topic // Topic case bbp_get_topic_post_type(): $crumbs[] = '<a href="' . bbp_get_topic_permalink($parent->ID) . '" class="bbp-breadcrumb-topic">' . bbp_get_topic_title($parent->ID) . '</a>'; break; // Reply (Note: not in most themes) // Reply (Note: not in most themes) case bbp_get_reply_post_type(): $crumbs[] = '<a href="' . bbp_get_reply_permalink($parent->ID) . '" class="bbp-breadcrumb-reply">' . bbp_get_reply_title($parent->ID) . '</a>'; break; // WordPress Post/Page/Other // WordPress Post/Page/Other default: $crumbs[] = '<a href="' . get_permalink($parent->ID) . '" class="bbp-breadcrumb-item">' . get_the_title($parent->ID) . '</a>'; break; } } // Edit topic tag } elseif (bbp_is_topic_tag_edit()) { $crumbs[] = '<a href="' . get_term_link(bbp_get_topic_tag_id(), bbp_get_topic_tag_tax_id()) . '" class="bbp-breadcrumb-topic-tag">' . sprintf(__('Topic Tag: %s', 'bbpress'), bbp_get_topic_tag_name()) . '</a>'; } /** Current ***********************************************************/ // Add current page to breadcrumb if (!empty($include_current) || empty($pre_current_text)) { $crumbs[] = '<span class="bbp-breadcrumb-current">' . $current_text . '</span>'; } /** Separator *********************************************************/ // Wrap the separator in a span before padding and filter if (!empty($sep)) { $sep = '<span class="bbp-breadcrumb-separator">' . $sep . '</span>'; } // Pad the separator if (!empty($pad_sep)) { $sep = str_pad($sep, strlen($sep) + (int) $pad_sep * 2, ' ', STR_PAD_BOTH); } /** Finish Up *********************************************************/ // Filter the separator and breadcrumb $sep = apply_filters('bbp_breadcrumb_separator', $sep); $crumbs = apply_filters('bbp_breadcrumbs', $crumbs); // Build the trail $trail = !empty($crumbs) ? $before . implode($sep, $crumbs) . $after : ''; return apply_filters('bbp_get_breadcrumb', $trail, $crumbs, $r); }
/** * Return URL to the reply edit page * * @since bbPress (r2753) * * @param int $reply_id Optional. Reply id * @uses bbp_get_reply_id() To get the reply id * @uses bbp_get_reply() To get the reply * @uses bbp_get_reply_post_type() To get the reply post type * @uses add_query_arg() To add custom args to the url * @uses apply_filters() Calls 'bbp_get_reply_edit_url' with the edit * url and reply id * @return string Reply edit url */ function bbp_get_reply_edit_url($reply_id = 0) { global $wp_rewrite; $bbp = bbpress(); $reply = bbp_get_reply(bbp_get_reply_id($reply_id)); if (empty($reply)) { return; } $reply_link = bbp_remove_view_all(bbp_get_reply_permalink($reply_id)); // Pretty permalinks if ($wp_rewrite->using_permalinks()) { $url = trailingslashit($reply_link) . $bbp->edit_id; $url = trailingslashit($url); // Unpretty permalinks } else { $url = add_query_arg(array(bbp_get_reply_post_type() => $reply->post_name, $bbp->edit_id => '1'), $reply_link); } // Maybe add view all $url = bbp_add_view_all($url); return apply_filters('bbp_get_reply_edit_url', $url, $reply_id); }
/** * Return the link to the last reply in a forum * * @since bbPress (r2464) * * @param int $forum_id Optional. Forum id * @uses bbp_get_forum_id() To get the forum id * @uses bbp_get_forum_last_reply_id() To get the forum's last reply id * @uses bbp_get_reply_permalink() To get the reply permalink * @uses apply_filters() Calls 'bbp_get_forum_last_reply_permalink' with * the reply link and forum id * @return string Permanent link to the forum's last reply */ function bbp_get_forum_last_reply_permalink($forum_id = 0) { $forum_id = bbp_get_forum_id($forum_id); return apply_filters('bbp_get_forum_last_reply_permalink', bbp_get_reply_permalink(bbp_get_forum_last_reply_id($forum_id)), $forum_id); }
/** * Return URL to the reply edit page * * @since 2.0.0 bbPress (r2753) * * @param int $reply_id Optional. Reply id * @uses bbp_get_reply_id() To get the reply id * @uses bbp_get_reply() To get the reply * @uses bbp_get_reply_post_type() To get the reply post type * @uses add_query_arg() To add custom args to the url * @uses apply_filters() Calls 'bbp_get_reply_edit_url' with the edit * url and reply id * @return string Reply edit url */ function bbp_get_reply_edit_url($reply_id = 0) { $reply = bbp_get_reply($reply_id); if (empty($reply)) { return; } $reply_link = bbp_remove_view_all(bbp_get_reply_permalink($reply_id)); // Pretty permalinks if (bbp_use_pretty_urls()) { $url = trailingslashit($reply_link) . bbp_get_edit_rewrite_id(); $url = user_trailingslashit($url); // Unpretty permalinks } else { $url = add_query_arg(array(bbp_get_reply_post_type() => $reply->post_name, bbp_get_edit_rewrite_id() => '1'), $reply_link); } // Maybe add view all $url = bbp_add_view_all($url); return apply_filters('bbp_get_reply_edit_url', $url, $reply_id); }
/** * Return the link to the last reply in a forum * * @since 2.0.0 bbPress (r2464) * * @param int $forum_id Optional. Forum id * @uses bbp_get_forum_id() To get the forum id * @uses bbp_get_forum_last_reply_id() To get the forum's last reply id * @uses bbp_get_reply_permalink() To get the reply permalink * @uses apply_filters() Calls 'bbp_get_forum_last_reply_permalink' with * the reply link and forum id * @return string Permanent link to the forum's last reply */ function bbp_get_forum_last_reply_permalink($forum_id = 0) { $forum_id = bbp_get_forum_id($forum_id); $reply_id = bbp_get_forum_last_reply_id($forum_id); $link = bbp_get_reply_permalink($reply_id); return apply_filters('bbp_get_forum_last_reply_permalink', $link, $forum_id, $reply_id); }
/** * Return the link to the last reply in a topic * * @since bbPress (r2464) * * @param int $topic_id Optional. Topic id * @uses bbp_get_topic_id() To get the topic id * @uses bbp_get_topic_last_reply_id() To get the topic last reply id * @uses bbp_get_reply_permalink() To get the reply permalink * @uses apply_filters() Calls 'bbp_get_topic_last_topic_permalink' with * the reply permalink and topic id * @return string Permanent link to the reply */ function bbp_get_topic_last_reply_permalink($topic_id = 0) { $topic_id = bbp_get_topic_id($topic_id); return apply_filters('bbp_get_topic_last_reply_permalink', bbp_get_reply_permalink(bbp_get_topic_last_reply_id($topic_id))); }
/** * @since 1.4 */ private function _build_email($type, $post_id) { $email_subject = get_option("bbpress_notify_new{$type}_email_subject"); $email_body = get_option("bbpress_notify_new{$type}_email_body"); $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES); $excerpt_size = apply_filters('bpnns_excerpt_size', 100); // Replace shortcodes if ('topic' === $type) { $content = bbp_get_topic_content($post_id); $title = html_entity_decode(strip_tags(bbp_get_topic_title($post_id)), ENT_NOQUOTES, 'UTF-8'); $excerpt = html_entity_decode(strip_tags(bbp_get_topic_excerpt($post_id, $excerpt_size)), ENT_NOQUOTES, 'UTF-8'); $author = bbp_get_topic_author($post_id); $url = apply_filters('bbpnns_topic_url', bbp_get_topic_permalink($post_id), $post_id, $title); $forum = html_entity_decode(strip_tags(get_the_title(bbp_get_topic_forum_id($post_id))), ENT_NOQUOTES, 'UTF-8'); } elseif ('reply' === $type) { $content = bbp_get_reply_content($post_id); $title = html_entity_decode(strip_tags(bbp_get_reply_title($post_id)), ENT_NOQUOTES, 'UTF-8'); $excerpt = html_entity_decode(strip_tags(bbp_get_reply_excerpt($post_id, $excerpt_size)), ENT_NOQUOTES, 'UTF-8'); $author = bbp_get_reply_author($post_id); $url = apply_filters('bbpnns_reply_url', bbp_get_reply_permalink($post_id), $post_id, $title); $forum = html_entity_decode(strip_tags(get_the_title(bbp_get_reply_forum_id($post_id))), ENT_NOQUOTES, 'UTF-8'); } else { wp_die('Invalid type!'); } $content = preg_replace('/<br\\s*\\/?>/is', PHP_EOL, $content); $content = preg_replace('/(?:<\\/p>\\s*<p>)/ism', PHP_EOL . PHP_EOL, $content); $content = html_entity_decode(strip_tags($content), ENT_NOQUOTES, 'UTF-8'); $topic_reply = apply_filters('bbpnns_topic_reply', bbp_get_reply_url($post_id), $post_id, $title); $email_subject = str_replace('[blogname]', $blogname, $email_subject); $email_subject = str_replace("[{$type}-title]", $title, $email_subject); $email_subject = str_replace("[{$type}-content]", $content, $email_subject); $email_subject = str_replace("[{$type}-excerpt]", $excerpt, $email_subject); $email_subject = str_replace("[{$type}-author]", $author, $email_subject); $email_subject = str_replace("[{$type}-url]", $url, $email_subject); $email_subject = str_replace("[{$type}-replyurl]", $topic_reply, $email_subject); $email_subject = str_replace("[{$type}-forum]", $forum, $email_subject); $email_body = str_replace('[blogname]', $blogname, $email_body); $email_body = str_replace("[{$type}-title]", $title, $email_body); $email_body = str_replace("[{$type}-content]", $content, $email_body); $email_body = str_replace("[{$type}-excerpt]", $excerpt, $email_body); $email_body = str_replace("[{$type}-author]", $author, $email_body); $email_body = str_replace("[{$type}-url]", $url, $email_body); $email_body = str_replace("[{$type}-replyurl]", $topic_reply, $email_body); $email_body = str_replace("[{$type}-forum]", $forum, $email_body); /** * Allow subject and body modifications * @since 1.6.6 */ $email_subject = apply_filters('bbpnns_filter_email_subject_in_build', $email_subject, $type, $post_id); $email_body = apply_filters('bbpnns_filter_email_body_in_build', $email_body, $type, $post_id); return array($email_subject, $email_body); }
/** * @covers ::bbp_topic_last_reply_permalink * @covers ::bbp_get_topic_last_reply_permalink */ public function test_bbp_get_topic_last_reply_permalink() { if (is_multisite()) { $this->markTestSkipped('Skipping URL tests in multiste for now.'); } $f = $this->factory->forum->create(); $t = $this->factory->topic->create(array('post_parent' => $f, 'topic_meta' => array('forum_id' => $f))); $topic_last_reply_permalink = bbp_get_topic_last_reply_permalink($f); $this->assertSame(bbp_get_topic_permalink($t), $topic_last_reply_permalink); $r = $this->factory->reply->create(array('post_parent' => $t, 'reply_meta' => array('forum_id' => $f, 'topic_id' => $t))); $topic_last_reply_permalink = bbp_get_topic_last_reply_permalink($f); $this->assertSame(bbp_get_reply_permalink($r), $topic_last_reply_permalink); }