AnsPress_Comment_Hooks()
Description #
Comments class
Source #
File: includes/comments.php
class AnsPress_Comment_Hooks {
/**
* Filter comments array to include only comments which user can read.
*
* @param array $comments Comments.
* @return array
* @since 4.1.0
*/
public static function the_comments( $comments ) {
foreach ( $comments as $k => $c ) {
if ( 'anspress' === $c->comment_type && ! ap_user_can_read_comment( $c ) ) {
unset( $comments[ $k ] );
}
}
return $comments;
}
/**
* Ajax callback for loading comments.
*
* @since 2.0.1
* @since 3.0.0 Moved from AnsPress_Ajax class.
*
* @category haveTest
*/
public static function load_comments() {
global $avatar_size;
$paged = 1;
$comment_id = ap_sanitize_unslash( 'comment_id', 'r' );
if ( ! empty( $comment_id ) ) {
$_comment = get_comment( $comment_id );
if ( isset( $_comment->comment_post_ID ) && $_comment->comment_post_ID ) {
$post_id = $_comment->comment_post_ID;
}
} else {
$post_id = ap_sanitize_unslash( 'post_id', 'r' );
$paged = max( 1, ap_isset_post_value( 'paged', 1 ) );
}
if ( isset( $post_id ) && $post_id ) {
$_post = ap_get_post( $post_id );
}
$args = array(
'show_more' => false,
);
if ( ! empty( $_comment ) ) {
$avatar_size = 60;
$args['comment__in'] = $_comment->comment_ID;
}
ob_start();
if ( isset( $post_id ) && $post_id ) {
ap_the_comments( $post_id, $args );
} else {
ap_the_comments( -1, $args );
}
$html = ob_get_clean();
if ( isset( $_post ) && $_post->post_type ) {
$type = 'question' === $_post->post_type ? __( 'Question', 'anspress-question-answer' ) : __( 'Answer', 'anspress-question-answer' );
}
$result = array(
'success' => true,
'html' => $html,
);
ap_ajax_json( $result );
}
/**
* Modify comment query args for showing pending comments to moderator.
*
* @param array $args Comment args.
* @return array
* @since 3.0.0
*/
public static function comments_template_query_args( $args ) {
global $question_rendered;
if ( true === $question_rendered && is_singular( 'question' ) ) {
return false;
}
if ( ap_user_can_approve_comment() ) {
$args['status'] = 'all';
}
return $args;
}
/**
* Ajax callback to approve comment.
*/
public static function approve_comment() {
$comment_id = (int) ap_sanitize_unslash( 'comment_id', 'r' );
if ( ! anspress_verify_nonce( 'approve_comment_' . $comment_id ) || ! ap_user_can_approve_comment() ) {
ap_ajax_json(
array(
'success' => false,
'snackbar' => array( 'message' => __( 'Sorry, unable to approve comment', 'anspress-question-answer' ) ),
)
);
}
$success = wp_set_comment_status( $comment_id, 'approve' );
$_comment = get_comment( $comment_id );
$count = get_comment_count( $_comment->comment_post_ID );
if ( $success ) {
$_comment = get_comment( $comment_id );
ap_ajax_json(
array(
'success' => true,
'cb' => 'commentApproved',
'comment_ID' => $comment_id,
'post_ID' => $_comment->comment_post_ID,
'commentsCount' => array(
'text' => sprintf(
// translators: %d is comments count.
_n( '%d Comment', '%d Comments', $count['all'], 'anspress-question-answer' ),
$count['all']
),
'number' => $count['all'],
'unapproved' => $count['awaiting_moderation'],
),
'snackbar' => array( 'message' => __( 'Comment approved successfully.', 'anspress-question-answer' ) ),
)
);
}
}
/**
* Manipulate question and answer comments link.
*
* @param string $link The comment permalink with '#comment-$id' appended.
* @param WP_Comment $comment The current comment object.
* @param array $args An array of arguments to override the defaults.
*/
public static function comment_link( $link, $comment, $args ) { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundAfterLastUsed
$_post = ap_get_post( $comment->comment_post_ID );
if ( ! in_array( $_post->post_type, array( 'question', 'answer' ), true ) ) {
return $link;
}
$permalink = get_permalink( $_post );
return $permalink . '#/comment/' . $comment->comment_ID;
}
/**
* Change comment_type while adding comments for question or answer.
*
* @param array $commentdata Comment data array.
* @return array
* @since 4.1.0
*/
public static function preprocess_comment( $commentdata ) {
if ( ! empty( $commentdata['comment_post_ID'] ) ) {
$post_type = get_post_type( $commentdata['comment_post_ID'] );
if ( in_array( $post_type, array( 'question', 'answer' ), true ) ) {
$commentdata['comment_type'] = 'anspress';
}
}
return $commentdata;
}
/**
* Override comments template for single question page.
* This will prevent post comments below single question.
*
* @param string $template Template.
* @return string
*
* @since 4.1.11
*/
public static function comments_template( $template ) {
if ( is_singular( 'question' ) || is_anspress() ) {
$template = ap_get_theme_location( 'post-comments.php' );
}
return $template;
}
}
Expand full source code Collapse full source code View on GitHub: includes/comments.php:22
Add your comment