如何刷新页面时,管理员垃圾评论在管理网站上的评论?

时间:2021-08-26 作者:PantelD

每次管理员点击;“垃圾”;按钮,刷新页面。如果管理员在;“全部”;类别,他应该在;“全部”;刷新后再次分类。如果他在;“待定”;类别,刷新后他应该再次出现。

为什么

我正在开发一个插件,它有一个连接的功能init 并且会丢弃超过一定年龄的评论。这个init 按下按钮时挂钩运行;“垃圾”;单击下面的注释,以便管理员在;“待定”;分类并丢弃评论,表中显示的其他评论可能同时被我的功能丢弃,因此管理员在丢弃评论后不应再看到这些其他评论。

Things trued(尝试)尝试挂接中提到的脚本this answertrashed_comment 没有成功的行动
add_action( \'trashed_comment\', \'my_refresh_function\', 10, 2 );

function my_refresh_function( $comment_ID, $comment_obj ) {
    echo \'<script>location.reload();</script>\';
}
也尝试使用set_current_screen( \'edit-comments\' )trashed_comment 没有成功的行动
add_action( \'trashed_comment\', \'my_refresh_function\', 10, 2 );

function my_refresh_function( $comment_ID, $comment_obj ) {
    set_current_screen( \'edit-comments\' );
}
尝试挂接中提到的脚本this answertrashed_comment 没有成功的行动
add_action( \'trashed_comment\', \'my_refresh_function\', 10, 2 );

function my_refresh_function( $comment_ID, $comment_obj ) {
    Header(\'Location: \'.$_SERVER[\'PHP_SELF\']);
}
尝试挂接中提到的脚本this answertrashed_comment 没有成功的行动
add_action( \'trashed_comment\', \'my_refresh_function\', 10, 2 );

function my_refresh_function( $comment_ID, $comment_obj ) {
    $page = $_SERVER[\'PHP_SELF\'];
    echo \'<meta http-equiv="Refresh" content="0;\' . $page . \'">;
}

2 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

Comments admin页面使用AJAX通过;“垃圾”;链接,但仅当链接元素<a> 标记)包含名为data-wp-lists-see the delBefore() function in /wp-admin/js/edit-comments.js.

因为属性是通过PHP添加的(see line 764 in wp-admin/includes/class-wp-comments-list-table.php), 然后您可以使用comment_row_actions filter 要删除该属性,请执行以下操作:

add_filter( \'comment_row_actions\', \'wpse_393799\' );
function wpse_393799( $actions ) {
    if ( isset( $actions[\'trash\'] ) ) {
        $actions[\'trash\'] = preg_replace( \'/ data-wp-lists="(.+?)"/\', \'\', $actions[\'trash\'] );
    }

    return $actions;
}

SO网友:Dave Romsey

这里有一个使用PHP而不是JS方法的解决方案。(我无法用JS取得任何进展)。

这段代码将用一个新的操作替换WP的垃圾操作,该操作只会垃圾掉评论并重新加载页面。


/**
 * Replace the Trash action in the comment list with a link that will trash the comment and reload the page.
 *
 * @see https://wordpress.stackexchange.com/questions/268236/edit-comments-php-comment-row-actions-ajax-problem
 *
 * @param array      $actions
 * @param WP_Comment $comment
 *
 * @return array Comment actions
 */
function wpse_comment_row_actions( $actions, $comment ) {

    // Don\'t do anything for comments that are already in the trash or marked as spam.
    // You may want to customize this behavior.
    if (
        \'trash\' === $comment->comment_approved ||
        \'spam\' === $comment->comment_approved ) {
        return $actions;
    }

    // Remove WP\'s Trash action.
    if ( isset( $actions[\'trash\'] ) ) {
        unset( $actions[\'trash\'] );
    }

    $screen = get_current_screen();

    $args = [
        \'comment_id\' => $comment->comment_ID,
        \'action\'     => \'trash_comment_and_reload\',
        \'_wpnonce\'   => wp_create_nonce( \'do-comment-action-and-reload\' ),
        \'referer\'    => $screen->parent_file,
    ];

    // Add args so that we redirect to the same tab that the user was on.
    if ( ! empty( $_REQUEST[\'comment_status\'] ) ) {
        $args[\'comment_status\'] = $_REQUEST[\'comment_status\'];
    }

    if ( ! empty( $_REQUEST[\'user_id\'] ) ) {
        $args[\'user_id\'] = $_REQUEST[\'user_id\'];
    }

    $link = esc_url(
        add_query_arg(
            $args,
            admin_url( \'admin-ajax.php\' )
        )
    );

    // Add our own Trash action.
    $actions[\'trash_and_reload\'] = sprintf(
        \'<a href="%s" style="color:#b32d2e" class="delete">Trash</a>\',
        $link
    );

    return $actions;
}
add_filter( \'comment_row_actions\', \'wpse_comment_row_actions\', 10, 2 );

/**
 * Trash comment and reload the page.
 */
function wpse_trash_comment_and_reload() {
    if ( wp_verify_nonce( $_REQUEST[\'_wpnonce\'], \'do-comment-action-and-reload\' ) ) {
        wp_trash_comment( $_REQUEST[\'comment_id\'] );

        $args = [];
        if ( ! empty( $_REQUEST[\'comment_status\'] ) ) {
            $args[\'comment_status\'] = $_REQUEST[\'comment_status\'];
        }

        if ( ! empty( $_REQUEST[\'user_id\'] ) ) {
            $args[\'user_id\'] = $_REQUEST[\'user_id\'];
        }

        wp_safe_redirect(
            add_query_arg(
                $args,
                admin_url( $_REQUEST[\'referer\'] )
            )
        );
    }

    exit;
}
add_action( \'wp_ajax_trash_comment_and_reload\', \'wpse_trash_comment_and_reload\' );