<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
#2346 (Add action for additional actions while saving forums)
– bbPress Trac
</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<!--[if IE]><script type="text/javascript">
if (/^#__msie303:/.test(window.location.hash))
window.location.replace(window.location.hash.replace(/^#__msie303:/, '#'));
</script><![endif]-->
<link rel="search" href="/search" />
<link rel="prev" href="/ticket/2345" title="Ticket #2345" />
<link rel="last" href="/ticket/3609" title="Ticket #3609" />
<link rel="help" href="/wiki/TracGuide" />
<link rel="alternate" href="/ticket/2346?format=csv" type="text/csv" class="csv" title="Comma-delimited Text" />
<link rel="alternate" href="/ticket/2346?format=tab" type="text/tab-separated-values" class="tab" title="Tab-delimited Text" />
<link rel="alternate" href="/ticket/2346?format=rss" type="application/rss+xml" class="rss" title="RSS Feed" />
<link rel="next" href="/ticket/2347" title="Ticket #2347" />
<link rel="start" href="/wiki" />
<link rel="stylesheet" href="https://s.w.org/style/trac/common/css/trac.css?v=220" />
<link rel="stylesheet" href="https://s.w.org/style/trac/common/css/ticket.css?v=220" />
<link rel="stylesheet" href="https://s.w.org/style/trac/common/css/jquery-ui/jquery-ui.css?v=220" />
<link rel="stylesheet" href="https://s.w.org/style/trac/common/css/jquery-ui-addons.css?v=220" />
<link rel="icon" href="https://bbpress.org/favicon.ico" type="image/x-icon" />
<link rel="first" href="/ticket/1" title="Ticket #1" />
<style id="trac-noscript" type="text/css">.trac-noscript { display: none !important }</style>
<link type="application/opensearchdescription+xml" rel="search" href="/search/opensearch" title="Search bbPress Trac" />
<script type="text/javascript">
var auto_preview_timeout=2.0;
var form_token="fe96783c461458846fef334e";
var jquery_ui={"ampm":true,"date_format":"mm/dd/yy","day_names":{"abbreviated":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"narrow":["Su","Mo","Tu","We","Th","Fr","Sa"],"wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},"default_timezone":null,"first_week_day":0,"month_names":{"abbreviated":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wide":["January","February","March","April","May","June","July","August","September","October","November","December"]},"period_names":{"am":["AM","AM"],"pm":["PM","PM"]},"show_timezone":false,"time_format":"hh:mm:ss TT","timepicker_separator":" ","timezone_iso8601":false,"timezone_list":null};
var comments_prefs={"comments_order":"oldest","show_comments":"true","show_prop_changes":"true"};
</script>
<link rel="dns-prefetch" href="//fonts.googleapis.com" />
<link rel="dns-prefetch" href="//www.googletagmanager.com" />
<script>//<![CDATA[
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-P24PF4B');
//]]></script>
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Open+Sans%3A300italic%2C400italic%2C600italic%2C300%2C400%2C600&subset=latin%2Clatin-ext&ver=3.8.1-alpha" type="text/css" media="all" />
<link type="text/css" media="screen" rel="stylesheet" href="//bbpress.org/wp-content/themes/bb-base/style.css?v=24" />
<link type="text/css" media="screen" rel="stylesheet" href="//bbpress.org/wp-content/themes/bb-base/style-bbpress.css?v=24" />
<meta name="viewport" content="width=device-width" />
<link rel="stylesheet" href="https://s.w.org/wp-includes/css/dashicons.min.css?20150710" type="text/css" />
<link rel="stylesheet" type="text/css" href="https://s.w.org/style/trac/wp-trac.css?220" />
<script src="https://s.w.org/style/trac/common/js/jquery.js?v=220"></script>
<link rel="canonical" href="https://bbpress.trac.wordpress.org/ticket/2346" />
<script src="https://s.w.org/style/trac/common/js/babel.js?v=220"></script>
<script src="https://s.w.org/style/trac/common/js/trac.js?v=220"></script>
<script src="https://s.w.org/style/trac/common/js/search.js?v=220"></script>
<script src="https://s.w.org/style/trac/common/js/folding.js?v=220"></script>
<script src="https://s.w.org/style/trac/common/js/wikitoolbar.js?v=220"></script>
<script src="https://s.w.org/style/trac/common/js/resizer.js?v=220"></script>
<script src="https://s.w.org/style/trac/common/js/auto_preview.js?v=220"></script>
<script src="https://s.w.org/style/trac/common/js/jquery-ui.js?v=220"></script>
<script src="https://s.w.org/style/trac/common/js/jquery-ui-addons.js?v=220"></script>
<script src="https://s.w.org/style/trac/common/js/jquery-ui-i18n.js?v=220"></script>
<script type="text/javascript">
jQuery("#trac-noscript").remove();
jQuery(document).ready(function($) {
$(".trac-autofocus").focus();
$(".trac-target-new").attr("target", "_blank");
if ($.ui) { /* is jquery-ui added? */
$(".trac-datepicker:not([readonly])").prop("autocomplete", "off").datepicker();
$(".trac-datetimepicker:not([readonly])").prop("autocomplete", "off").datetimepicker();
$("#main").addClass("trac-nodatetimehint");
}
$(".trac-disable").disableSubmit(".trac-disable-determinant");
setTimeout(function() { $(".trac-scroll").scrollToTop() }, 1);
$(".trac-disable-on-submit").disableOnSubmit();
});
</script>
<script src="https://s.w.org/style/trac/common/js/threaded_comments.js?v=220"></script>
<script type="text/javascript">
jQuery(document).ready(function($) {
$("div.description").find("h1,h2,h3,h4,h5,h6").addAnchor(_("Link to this section"));
$(".foldable").enableFolding(false, true);
/*<![CDATA[*/
$("#attachments").toggleClass("collapsed");
$("#trac-up-attachments").click(function () {
$("#attachments").removeClass("collapsed");
return true;
});
$("#modify").parent().toggleClass("collapsed");
$(".trac-topnav a").click(function() { $("#modify").parent().removeClass("collapsed"); });
function setRevertHandler() {
$("button.trac-revert").click(function() {
var div = $("div", this);
var field_name = div[0].id.substr(7);
var field_value = div.text();
var input = $("#propertyform *[name=field_" + field_name + "]");
if (input.length > 0) {
if (input.filter("input[type=radio]").length > 0) {
input.val([field_value]);
} else if (input.filter("input[type=checkbox]").length > 0) {
input.val(field_value == "1" ? [field_value] : []);
} else {
input.val(field_value);
}
} else { // Special case for CC checkbox
input = $("#propertyform input[name=cc_update]").val([]);
}
input.change();
// Remove the revert button
if ($(this).closest("tbody").children("tr").length === 1)
$(this).closest(".trac-change-panel").remove();
else
$(this).closest("tr").remove();
return false;
});
}
setRevertHandler();
var comment_focused = false;
$("#comment").focus(function() { comment_focused = true; })
.blur(function() { comment_focused = false; });
$("#propertyform").autoSubmit({preview: '1'}, function(data, reply) {
var items = $(reply);
// Update ticket box
$("#ticket").replaceWith(items.filter('#ticket'));
// Replaces content of #changelog, without recreating it
$("#changelog").empty().append(items.filter("#changelog").contents());
// Apply comments order and "Show" preferences
applyCommentsOrder(
$('#prefs input[name="trac-comments-order"]:checked').val());
// Show warning
var new_changes = $("#changelog .trac-new");
$("#trac-edit-warning").toggle(new_changes.length != 0);
if (new_changes.length != 0)
$("#changelog").parent().show().removeClass("collapsed");
// Update view time
$("#propertyform input[name='view_time']").replaceWith(items.filter("input[name='view_time']"));
// Update preview
var preview = $("#ticketchange").html(items.filter('#preview').children());
var show_preview = preview.children().length != 0;
$("#ticketchange").toggle(show_preview);
setRevertHandler();
// Execute scripts to load stylesheets
items.filter("script").appendTo("head");
}, "#ticketchange .trac-loading");
$("#trac-comment-editor").autoSubmit({preview_comment: '1'}, function(data, reply) {
var comment = $("#trac-comment-editor").next("div.comment").html(reply);
comment.toggle(comment.children().length != 0);
}, "#changelog .trac-loading");
/*]]>*/
});
</script>
</head>
<body id="wordpress-org" class="bbpress trac wporg-make make-bbpress">
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-P24PF4B" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<dl id="accessibility">
<dt>Skip to:</dt>
<dd><a href="#content" title="Skip to content">Content</a></dd>
</dl>
<div id="wporg-header">
<div id="header-inner">
<button id="mobile-menu-button" aria-expanded="false"><span class="screen-reader-text">Toggle Menu</span></button>
<ul id="wporg-header-menu">
<li><a href="https://bbpress.org/about/">About</a></li>
<li><a href="https://bbpress.org/plugins/">Plugins</a></li>
<li><a href="https://bbpress.org/themes/">Themes</a></li>
<li><a href="https://codex.bbpress.org/">Documentation</a></li>
<li><a href="https://bbpress.org/blog/">Blog</a></li>
<li><a href="https://bbpress.org/forums/">Support</a></li>
<li class="download"><a href="https://bbpress.org/download/">Download</a></li>
</ul>
<h1><a href="https://bbpress.org">bbPress.org</a></h1>
</div>
</div>
<div id="subnav">
<div id="subnav-inner">
<ul id="nav-user" class="menu">
<li class="last first">
<a href="https://login.wordpress.org/?redirect_to=https%3A%2F%2Fbbpress.trac.wordpress.org%2Fticket%2F2346" class="login">Login</a>
</li>
</ul>
</div>
</div>
<div id="banner">
<form id="search" action="/search" method="get">
<div>
<label for="proj-search">Search:</label>
<input type="text" id="proj-search" name="q" size="18" value="" />
<input type="submit" value="Search" />
</div>
</form>
</div>
<div id="mainnav" class="nav">
<ul>
<li class="first"><a href="/timeline">Timeline</a></li><li class="active"><a href="/report">View Tickets</a></li><li><a href="/roadmap">Roadmap</a></li><li><a href="/browser">Browse Source</a></li><li class="last"><a href="/ticketgraph">Ticket Graph</a></li>
</ul>
</div>
<div id="main">
<div id="ctxtnav" class="nav">
<h2>Context Navigation</h2>
<ul>
<li class="first"><span>← <a class="prev" href="/ticket/2345" title="Ticket #2345">Previous Ticket</a></span></li><li class="last"><span><a class="next" href="/ticket/2347" title="Ticket #2347">Next Ticket</a> →</span></li>
</ul>
<hr />
</div>
<div id="content" class="ticket">
<div id="ticket" class="trac-content ">
<div class="date">
<p>Opened <a class="timeline" href="/timeline?from=2013-06-08T16%3A00%3A41Z&precision=second" title="See timeline at 06/08/2013 04:00:41 PM">11 years ago</a></p>
<p>Closed <a class="timeline" href="/timeline?from=2013-06-21T20%3A36%3A26Z&precision=second" title="See timeline at 06/21/2013 08:36:26 PM">11 years ago</a></p>
<p>Last modified <a class="timeline" href="/timeline?from=2013-06-21T20%3A55%3A19Z&precision=second" title="See timeline at 06/21/2013 08:55:19 PM">11 years ago</a></p>
</div>
<h2>
<a href="/ticket/2346" class="trac-id">#2346</a>
<span class="trac-status">
<a href="/query?status=closed">closed</a>
</span>
<span class="trac-type">
<a href="/query?status=!closed&type=enhancement">enhancement</a>
</span>
<span class="trac-resolution">
(<a href="/query?status=closed&resolution=worksforme">worksforme</a>)
</span>
</h2>
<h1 id="trac-ticket-title" class="searchable">
<span class="summary">Add action for additional actions while saving forums</span>
</h1>
<table class="properties">
<tr>
<th id="h_reporter">Reported by:</th>
<td headers="h_reporter" class="searchable">
<a href="https://profiles.wordpress.org/nofearinc" data-nicename="nofearinc">
<img class="avatar" src="https://wordpress.org/grav-redirect.php?user=nofearinc&s=48" srcset="https://wordpress.org/grav-redirect.php?user=nofearinc&s=96 2x" height="48" width="48" alt="nofearinc's profile" />
</a>
<a class="trac-author" href="/query?status=!closed&reporter=nofearinc">nofearinc</a>
</td>
<th id="h_owner" class="missing">Owned by:</th>
<td headers="h_owner">
</td>
</tr>
<tr>
<th id="h_milestone" class="missing">
Milestone:
</th>
<td headers="h_milestone">
</td>
<th id="h_priority">
Priority:
</th>
<td headers="h_priority">
<a href="/query?status=!closed&priority=normal">normal</a>
</td>
</tr><tr>
<th id="h_severity">
Severity:
</th>
<td headers="h_severity">
<a href="/query?status=!closed&severity=normal">normal</a>
</td>
<th id="h_version">
Version:
</th>
<td headers="h_version">
<a href="/query?status=!closed&version=2.1">2.1</a>
</td>
</tr><tr>
<th id="h_component">
Component:
</th>
<td headers="h_component">
<a href="/query?status=!closed&component=API+-+Actions%2FFilters">API - Actions/Filters</a>
</td>
<th id="h_keywords">
Keywords:
</th>
<td headers="h_keywords" class="searchable">
<a href="/query?status=!closed&keywords=~has-patch">has-patch</a>
</td>
</tr><tr>
<th id="h_cc" class="missing">
Cc:
</th>
<td headers="h_cc" class="searchable">
</td>
<th class="missing">
</th>
<td>
</td>
</tr>
</table>
<div class="description">
<h3 id="comment:description">
Description
</h3>
<div class="searchable">
<p>
I need to implement a new post status 'Special' for forums, it's already visible in the metabox but it is not stored in the database.<br />
</p>
<p>
While browsing through the <code>bbp_save_forum_extras</code> function in includes/forums my first approach is adding apply_filters to the status array here:<br />
</p>
<p>
<code> if ( !empty( $_POST['bbp_forum_visibility'] ) && in_array( $_POST['bbp_forum_visibility'], array( bbp_get_public_status_id(), bbp_get_private_status_id(), bbp_get_hidden_status_id() ) ) ) { </code><br />
</p>
<p>
So that I could use any status respectfully:<br />
</p>
<p>
<code> if ( !empty( $_POST['bbp_forum_visibility'] ) && in_array( $_POST['bbp_forum_visibility'], apply_filters( 'bbp_forum_visibility_status_list', array( bbp_get_public_status_id(), bbp_get_private_status_id(), bbp_get_hidden_status_id() ) ) ) ) { </code><br />
</p>
<p>
However, the switch is not really flexible for new status rules so I'd like to propose an action for adding custom rules while saving the forum extras. The function is called under several conditions and would be easier to add a hook there instead of just juggling with priorities and adding custom functions to all rules every time we need to add more changes.<br />
</p>
<p>
Inherently this could probably apply for topics and replies, but I don't have a practical use case for there right now. <br />
</p>
</div>
</div>
</div>
<div id="attachments">
<h3 class="foldable">Attachments <span class="trac-count">(1)</span></h3>
<div class="attachments">
<dl class="attachments">
<dt>
<a href="/attachment/ticket/2346/forum-functions.diff" title="View attachment">forum-functions.diff</a><a href="/raw-attachment/ticket/2346/forum-functions.diff" class="trac-rawlink" title="Download"></a> (<span title="326 bytes">326 bytes</span>) - added by <span class="trac-author">nofearinc</span> <a class="timeline" href="/timeline?from=2013-06-08T16%3A01%3A21Z&precision=second" title="See timeline at 06/08/2013 04:01:21 PM">11 years ago</a>.
</dt>
<dd>
includes/forums/functions.php action added
</dd>
</dl>
<p>
Download all attachments as: <a rel="nofollow" href="/zip-attachment/ticket/2346/">.zip</a>
</p>
</div>
</div>
<div>
<div class="trac-noscript" style="position: relative">
<form id="prefs" method="get" action="/prefs" style="position: absolute; right: 0">
<div id="trac-comments-order">
<input type="radio" id="trac-comments-oldest" name="trac-comments-order" value="oldest" checked="checked" />
<label for="trac-comments-oldest">Oldest first</label>
<input type="radio" id="trac-comments-newest" name="trac-comments-order" value="newest" />
<label for="trac-comments-newest">Newest first</label>
<span id="trac-threaded-toggle" style="display: none">
<input type="radio" id="trac-comments-threaded" name="trac-comments-order" value="threaded" />
<label for="trac-comments-threaded">Threaded</label>
</span>
</div>
<div>
<input id="trac-show-comments-toggle" type="checkbox" checked="checked" />
<label for="trac-show-comments-toggle">Show comments</label>
<input id="trac-show-property-changes-toggle" type="checkbox" />
<label for="trac-show-property-changes-toggle">Show property changes</label>
</div>
</form>
</div>
<h3 class="foldable">Change History <span class="trac-count">(3)</span></h3>
<div id="changelog">
<div class="change">
<h3 class="change">
<span class="threading">
</span>
<span class="avatar">
<span class="username-line"><a href="https://profiles.wordpress.org/nofearinc" class="profile-link">
<img src="https://wordpress.org/grav-redirect.php?user=nofearinc&s=48" srcset="https://wordpress.org/grav-redirect.php?user=nofearinc&s=96 2x" height="48" width="48" alt="" /> @<span class="username" data-username="nofearinc" data-nicename="nofearinc"><span class="trac-author">nofearinc</span></span></a></span>
<br /><span class="time-ago"><a class="timeline" href="/timeline?from=2013-06-08T16%3A01%3A21Z&precision=second" title="See timeline at 06/08/2013 04:01:21 PM">11 years</a> ago</span>
</span>
<div class="trac-ticket-buttons">
</div>
</h3>
<div class="trac-ticket-buttons"></div>
<ul class="changes">
<li class="trac-field-attachment">
<strong class="trac-field-attachment">Attachment</strong>
<a href="/attachment/ticket/2346/forum-functions.diff"><em>forum-functions.diff</em></a><a href="/raw-attachment/ticket/2346/forum-functions.diff" title="Download" class="trac-rawlink"></a>
added
</li>
</ul>
<div class="comment searchable">
<p>
includes/forums/functions.php action added<br />
</p>
</div>
</div>
<div class="change" id="trac-change-1-1371846986804492">
<h3 class="change">
<span class="threading">
<span id="comment:1" class="cnum">
<a href="#comment:1">#1</a>
</span>
</span>
<span class="avatar">
<span class="username-line"><a href="https://profiles.wordpress.org/johnjamesjacoby" class="profile-link">
<img src="https://wordpress.org/grav-redirect.php?user=johnjamesjacoby&s=48" srcset="https://wordpress.org/grav-redirect.php?user=johnjamesjacoby&s=96 2x" height="48" width="48" alt="" /> @<span class="username" data-username="johnjamesjacoby" data-nicename="johnjamesjacoby"><span class="trac-author">johnjamesjacoby</span></span></a></span>
<br /><span class="time-ago"><a class="timeline" href="/timeline?from=2013-06-21T20%3A36%3A26Z&precision=second" title="See timeline at 06/21/2013 08:36:26 PM">11 years</a> ago</span>
</span>
<div class="trac-ticket-buttons">
</div>
</h3>
<div class="trac-ticket-buttons"></div>
<ul class="changes">
<li class="trac-field-milestone">
<strong class="trac-field-milestone">Milestone</strong>
<em>Awaiting Review</em> deleted
</li><li class="trac-field-resolution">
<strong class="trac-field-resolution">Resolution</strong>
set to <em>worksforme</em>
</li><li class="trac-field-status">
<strong class="trac-field-status">Status</strong>
changed from <em>new</em> to <em>closed</em>
</li>
</ul>
<div class="comment searchable">
<p>
Any reason why you can't use the 'bbp_new_forum_pre_extras' and 'bbp_edit_forum_pre_extras' actions, priority 11 or higher? Seems it would do the same exact thing?<br />
</p>
</div>
</div>
<div class="change" id="trac-change-2-1371848119106588">
<h3 class="change">
<span class="threading">
<span id="comment:2" class="cnum">
<a href="#comment:2">#2</a>
</span>
</span>
<span class="avatar">
<span class="username-line"><a href="https://profiles.wordpress.org/nofearinc" class="profile-link">
<img src="https://wordpress.org/grav-redirect.php?user=nofearinc&s=48" srcset="https://wordpress.org/grav-redirect.php?user=nofearinc&s=96 2x" height="48" width="48" alt="" /> @<span class="username" data-username="nofearinc" data-nicename="nofearinc"><span class="trac-author">nofearinc</span></span></a></span>
<br /><span class="time-ago"><a class="timeline" href="/timeline?from=2013-06-21T20%3A55%3A19Z&precision=second" title="See timeline at 06/21/2013 08:55:19 PM">11 years</a> ago</span>
</span>
<div class="trac-ticket-buttons">
</div>
</h3>
<div class="trac-ticket-buttons"></div>
<div class="comment searchable">
<p>
For this one I was looking forward to act based on metadata (by verifying if the switch has passed successfully), but generally I'm looking forward to keeping pre/post actions everywhere to facilitate the ability for plugins to work smoothly in different scenarios.<br />
</p>
<p>
Next week I'll still have to handle a new post_status support as currently there are few small bugs and I had to use <code>pre_get_posts</code> and even the <code>request</code> filter for something that I see as a straight forward request, but there is a chance for me to not use a proper hook somewhere or get stuck in a WP-related issue rather than bbPress specific (would be happy to share use cases).<br />
</p>
</div>
</div>
</div>
</div>
<div id="help"><strong>Note:</strong> See
<a href="/wiki/TracTickets">TracTickets</a> for help on using
tickets.</div>
</div>
<div id="altlinks">
<a class="preferences-link" href="/prefs">Trac UI Preferences</a>
<h3>Download in other formats:</h3>
<ul>
<li class="first">
<a rel="nofollow" href="/ticket/2346?format=csv" class="csv">Comma-delimited Text</a>
</li><li>
<a rel="nofollow" href="/ticket/2346?format=tab" class="tab">Tab-delimited Text</a>
</li><li class="last">
<a rel="nofollow" href="/ticket/2346?format=rss" class="rss">RSS Feed</a>
</li>
</ul>
</div>
</div>
<div id="footer">
<div class="links">
<p>
See also:
<a href="http://wordpress.org">WordPress.org</a> •
<a href="http://bbpress.org">bbPress.org</a> •
<a href="http://buddypress.org">BuddyPress.org</a> •
<a href="http://ma.tt">Matt</a> •
<a href="http://bbpress.org/feed/" title="RSS Feed for Articles">Blog RSS</a>
</p>
</div>
<div class="details">
<p>
<a href="http://twitter.com/bbpress" class="twitter">Follow bbPress on Twitter</a> •
<a href="http://bbpress.org/about/gpl/">GPL</a> •
<a href="http://bbpress.org/contact/">Contact Us</a> •
<a href="http://bbpress.org/terms/">Terms of Service</a>
</p>
</div>
</div>
<script>
var wpTracCurrentUser = "anonymous";
</script>
<script src="https://s.w.org/style/js/navigation.min.js?20190128"></script>
<script src="https://s.w.org/style/trac/jquery.caret.min.js?ver=2015-02-01"></script>
<script src="https://s.w.org/style/trac/jquery.atwho.min.js?ver=1.0.1"></script>
<script src="https://s.w.org/style/trac/wp-trac.js?220"></script>
</body>
</html>