さて、私は本当にこれにこだわっています。私は多くのことを試しましたが、それでもうまくいきません。
私はBBpressをインストールして実行していて、ユーザー(参加者の役割)がTOPICSを公開することを禁止したいです。ユーザーがトピックを追加するたびに、保留中のステータスで表示する必要がありますが、モデレートなしで返信を公開できます。
私はBBpress Moderation
プラグインを試しましたが、保留中の状態で返信を追加しています。 Always moderate replies
と書かれているボックスのチェックを外した後でも。
参加者ユーザーの役割を先生に変更しようとしました。
//code to add tutor role
function add_new_roles( $bbp_roles )
{
/* Add a role called tutor */
$bbp_roles['bbp_tutor'] = array(
'name' => 'Tutor',
'capabilities' => custom_capabilities( 'bbp_tutor' )
);
return $bbp_roles;
}
add_filter( 'bbp_get_dynamic_roles', 'add_new_roles', 1 );
function add_role_caps_filter( $caps, $role )
{
/* Only filter for roles we are interested in! */
if( $role == 'bbp_tutor' )
$caps = custom_capabilities( $role );
return $caps;
}
add_filter( 'bbp_get_caps_for_role', 'add_role_caps_filter', 10, 2 );
function custom_capabilities( $role )
{
switch ( $role )
{
/* Capabilities for 'tutor' role */
case 'bbp_tutor':
return array(
// Primary caps
'spectate' => true,
'participate' => true,
'moderate' => false,
'throttle' => false,
'view_trash' => false,
// Forum caps
'publish_forums' => false,
'edit_forums' => false,
'edit_others_forums' => false,
'delete_forums' => false,
'delete_others_forums' => false,
'read_private_forums' => true,
'read_hidden_forums' => false,
// Topic caps
'publish_topics' => true,
'edit_topics' => true,
'edit_others_topics' => false,
'delete_topics' => false,
'delete_others_topics' => false,
'read_private_topics' => true,
// Reply caps
'publish_replies' => true,
'edit_replies' => true,
'edit_others_replies' => false,
'delete_replies' => false,
'delete_others_replies' => false,
'read_private_replies' => true,
// Topic tag caps
'manage_topic_tags' => false,
'edit_topic_tags' => false,
'delete_topic_tags' => false,
'assign_topic_tags' => true,
);
break;
default :
return $role;
}
}
しかし、ユーザープロファイルページでフォーラムロール講師を選択した後、空白のロールが表示されます。
これらのトピックをデフォルトで[保留中]ステータスに追加し、[返信を公開]に追加する方法はありますか。私を助けてください!
ありがとうございました
わかりました私は速い解決を得ました。
私はプラグインを有効にしBBpress Moderationそして/wp-content/plugins/bbpressmoderation/bbpressmoderation.php
の以下のコードを変更します
FROM:
/**
* Before inserting a new topic/reply mark
* this as 'pending' depending on settings
*
* @param array $data - new topic/reply data
*/
function pre_insert($data) {
global $wpdb;
if (@$data['post_status']=='spam') return $data; // fix for 1.8.2 hide spam
// Pointless moderating a post that the current user can approve
if (current_user_can('moderate')) return $data;
if ($data['post_author'] == 0) {
// Anon user - check if need to moderate
if ( ( 'topic' == $data['post_type'] && get_option(self::TD . 'always_approve_topics') ) || ( 'reply' == $data['post_type'] && get_option(self::TD . 'always_approve_replies') ) ) {
// fix for v.1.8.3 separate settings for anonymous posting
$data['post_status'] = 'pending';
}
} else {
// Registered user
if (get_option(self::TD . 'previously_approved')) {
// Check if user already published
$sql = $wpdb->prepare("SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_author = %d AND post_type IN ('topic','reply') AND post_status = 'publish'", $data['post_author']);
$count = $wpdb->get_var($sql);
if (!$count) {
// Anon or User never published topic/reply so mark as pending.
$data['post_status'] = 'pending';
}
} else {
$data['post_status'] = 'pending';
}
}
return $data;
}
TO:
/**
* Before inserting a new topic/reply mark
* this as 'pending' depending on settings
*
* @param array $data - new topic/reply data
*/
function pre_insert($data) {
global $wpdb;
if (@$data['post_status']=='spam') return $data; // fix for 1.8.2 hide spam
if('reply' !== $data['post_type']){
// Pointless moderating a post that the current user can approve
if (current_user_can('moderate')) return $data;
if ($data['post_author'] == 0) {
// Anon user - check if need to moderate
if ( ( 'topic' == $data['post_type'] && get_option(self::TD . 'always_approve_topics') ) || ( 'reply' == $data['post_type'] && get_option(self::TD . 'always_approve_replies') ) ) {
// fix for v.1.8.3 separate settings for anonymous posting
$data['post_status'] = 'pending';
}
} else {
// Registered user
if (get_option(self::TD . 'previously_approved')) {
// Check if user already published
$sql = $wpdb->prepare("SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_author = %d AND post_type IN ('topic','reply') AND post_status = 'publish'", $data['post_author']);
$count = $wpdb->get_var($sql);
if (!$count) {
// Anon or User never published topic/reply so mark as pending.
$data['post_status'] = 'pending';
}
} else {
$data['post_status'] = 'pending';
}
}
}
return $data;
}
これにより、ユーザーは返信を中程度にすることなく公開できますが、トピックは公開される前に緩和する必要があります。
これが誰かに役立つことを願っています。