web-dev-qa-db-ja.com

参加者にトピックの公開を禁止する方法(bbpress)

さて、私は本当にこれにこだわっています。私は多くのことを試しましたが、それでもうまくいきません。

私は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;
    }
}

しかし、ユーザープロファイルページでフォーラムロール講師を選択した後、空白のロールが表示されます。

これらのトピックをデフォルトで[保留中]ステータスに追加し、[返信を公開]に追加する方法はありますか。私を助けてください!

ありがとうございました

1
Ramesh Pardhi

わかりました私は速い解決を得ました。

私はプラグインを有効にし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;
}

これにより、ユーザーは返信を中程度にすることなく公開できますが、トピックは公開される前に緩和する必要があります。

これが誰かに役立つことを願っています。

0
Ramesh Pardhi