Last active
September 6, 2017 09:17
-
-
Save MaximeCulea/06b3a1d99f99295cc000ff087c9e8318 to your computer and use it in GitHub Desktop.
Allow users to edit their own comments through REST API.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
add_filter( 'user_has_cap', 'bea_add_edit_comment', 10, 4 ); | |
/** | |
* Allow users to edit their own comments | |
* | |
* @param array $allcaps An array of all the user's capabilities. | |
* @param array $caps Actual capabilities for meta capability. | |
* @param array $args Optional parameters passed to has_cap(), typically object ID. | |
* @param \WP_User $user The user object. | |
* | |
* @return mixed | |
*/ | |
function bea_add_edit_comment( $allcaps, $caps, $args, $user ) { | |
// As working with REST Api only | |
if ( ! defined( 'REST_REQUEST' ) || true !== REST_REQUEST ) { | |
return $allcaps; | |
} | |
// Always allow the user to moderate comments | |
if ( in_array( 'moderate_comments', $caps ) ) { | |
$allcaps['moderate_comments'] = true; | |
return $allcaps; | |
} | |
// Only modify user capabilities if we are trying to edit a comment | |
if ( 'edit_comment' !== $args[0] ) { | |
return $allcaps; | |
} | |
/* | |
* We need to be sure we have three arguments | |
* $args[0] => the capability we want to allow for the user | |
* $args[1] => the current user id | |
* $args[2] => the current comment id | |
*/ | |
if ( count( $args ) < 3 ) { | |
return $allcaps; | |
} | |
// We need a valid comment | |
$comment = get_comment( $args[2] ); | |
if ( is_null( $comment ) ) { | |
return $allcaps; | |
} | |
/* | |
* We are checking if the current user are the one who wrote | |
* the current comment. If it's the case then add the required | |
* permissions for the edit process to succeed | |
*/ | |
if ( Functions::user_can_manage_comment( $comment, $user->ID ) ) { | |
$allcaps['edit_others_posts'] = true; | |
$allcaps['edit_published_posts'] = true; | |
} | |
return $allcaps; | |
} |
Hi @sharcupine, sorry for the delay ! I never get any notification for your answer.
You right, my bad I pasted it too quickly, in my code it was into a class, but when sharing on gist it should not be wrapped into a class, so I messed up ^^
Anyway I fixed my gist and now fully working, thx for the "issue" 👍
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hello,
Thanks for creating this—it's exactly what I'm looking to achieve.
Could you possibly give some direction on how to implement this, though? I tried adding it to my functions.php file, but as you might guess, it throws an error ("syntax error, unexpected 'public' (T_PUBLIC)"). In my quick research, it seems that public functions are declared within classes.
Is that the issue? If so, what class should this be a part of?
Sorry, I'm still stumbling around in the dark when it comes to code.
Any help would be greatly appreciated.
Thanks,
Scott
P.S. If I'm not mistaken, there is an extra closing parenthesis in line 1, after 'add_edit_comment'.