[ Index ] |
PHP Cross Reference of WordPress |
[Summary view] [Print] [Text view]
1 <?php 2 3 WP_CLI::add_command( 'akismet', 'Akismet_CLI' ); 4 5 /** 6 * Filter spam comments. 7 */ 8 class Akismet_CLI extends WP_CLI_Command { 9 /** 10 * Checks one or more comments against the Akismet API. 11 * 12 * ## OPTIONS 13 * <comment_id>... 14 * : The ID(s) of the comment(s) to check. 15 * 16 * [--noaction] 17 * : Don't change the status of the comment. Just report what Akismet thinks it is. 18 * 19 * ## EXAMPLES 20 * 21 * wp akismet check 12345 22 * 23 * @alias comment-check 24 */ 25 public function check( $args, $assoc_args ) { 26 foreach ( $args as $comment_id ) { 27 if ( isset( $assoc_args['noaction'] ) ) { 28 // Check the comment, but don't reclassify it. 29 $api_response = Akismet::check_db_comment( $comment_id, 'wp-cli' ); 30 } 31 else { 32 $api_response = Akismet::recheck_comment( $comment_id, 'wp-cli' ); 33 } 34 35 if ( 'true' === $api_response ) { 36 WP_CLI::line( sprintf( __( "Comment #%d is spam.", 'akismet' ), $comment_id ) ); 37 } 38 else if ( 'false' === $api_response ) { 39 WP_CLI::line( sprintf( __( "Comment #%d is not spam.", 'akismet' ), $comment_id ) ); 40 } 41 else { 42 if ( false === $api_response ) { 43 WP_CLI::error( __( "Failed to connect to Akismet.", 'akismet' ) ); 44 } 45 else if ( is_wp_error( $api_response ) ) { 46 WP_CLI::warning( sprintf( __( "Comment #%d could not be checked.", 'akismet' ), $comment_id ) ); 47 } 48 } 49 } 50 } 51 52 /** 53 * Recheck all comments in the Pending queue. 54 * 55 * ## EXAMPLES 56 * 57 * wp akismet recheck_queue 58 * 59 * @alias recheck-queue 60 */ 61 public function recheck_queue() { 62 $batch_size = 100; 63 $start = 0; 64 65 $total_counts = array(); 66 67 do { 68 $result_counts = Akismet_Admin::recheck_queue_portion( $start, $batch_size ); 69 70 if ( $result_counts['processed'] > 0 ) { 71 foreach ( $result_counts as $key => $count ) { 72 if ( ! isset( $total_counts[ $key ] ) ) { 73 $total_counts[ $key ] = $count; 74 } 75 else { 76 $total_counts[ $key ] += $count; 77 } 78 } 79 $start += $batch_size; 80 $start -= $result_counts['spam']; // These comments will have been removed from the queue. 81 } 82 } while ( $result_counts['processed'] > 0 ); 83 84 WP_CLI::line( sprintf( _n( "Processed %d comment.", "Processed %d comments.", $total_counts['processed'], 'akismet' ), number_format( $total_counts['processed'] ) ) ); 85 WP_CLI::line( sprintf( _n( "%d comment moved to Spam.", "%d comments moved to Spam.", $total_counts['spam'], 'akismet' ), number_format( $total_counts['spam'] ) ) ); 86 87 if ( $total_counts['error'] ) { 88 WP_CLI::line( sprintf( _n( "%d comment could not be checked.", "%d comments could not be checked.", $total_counts['error'], 'akismet' ), number_format( $total_counts['error'] ) ) ); 89 } 90 } 91 92 /** 93 * Fetches stats from the Akismet API. 94 * 95 * ## OPTIONS 96 * 97 * [<interval>] 98 * : The time period for which to retrieve stats. 99 * --- 100 * default: all 101 * options: 102 * - days 103 * - months 104 * - all 105 * --- 106 * 107 * [--format=<format>] 108 * : Allows overriding the output of the command when listing connections. 109 * --- 110 * default: table 111 * options: 112 * - table 113 * - json 114 * - csv 115 * - yaml 116 * - count 117 * --- 118 * 119 * [--summary] 120 * : When set, will display a summary of the stats. 121 * 122 * ## EXAMPLES 123 * 124 * wp akismet stats 125 * wp akismet stats all 126 * wp akismet stats days 127 * wp akismet stats months 128 * wp akismet stats all --summary 129 */ 130 public function stats( $args, $assoc_args ) { 131 $api_key = Akismet::get_api_key(); 132 133 if ( empty( $api_key ) ) { 134 WP_CLI::error( __( 'API key must be set to fetch stats.', 'akismet' ) ); 135 } 136 137 switch ( $args[0] ) { 138 case 'days': 139 $interval = '60-days'; 140 break; 141 case 'months': 142 $interval = '6-months'; 143 break; 144 default: 145 $interval = 'all'; 146 break; 147 } 148 149 $response = Akismet::http_post( 150 Akismet::build_query( array( 151 'blog' => get_option( 'home' ), 152 'key' => $api_key, 153 'from' => $interval, 154 ) ), 155 'get-stats' 156 ); 157 158 if ( empty( $response[1] ) ) { 159 WP_CLI::error( __( 'Currently unable to fetch stats. Please try again.', 'akismet' ) ); 160 } 161 162 $response_body = json_decode( $response[1], true ); 163 164 if ( is_null( $response_body ) ) { 165 WP_CLI::error( __( 'Stats response could not be decoded.', 'akismet' ) ); 166 } 167 168 if ( isset( $assoc_args['summary'] ) ) { 169 $keys = array( 170 'spam', 171 'ham', 172 'missed_spam', 173 'false_positives', 174 'accuracy', 175 'time_saved', 176 ); 177 178 WP_CLI\Utils\format_items( $assoc_args['format'], array( $response_body ), $keys ); 179 } 180 else { 181 $stats = $response_body['breakdown']; 182 WP_CLI\Utils\format_items( $assoc_args['format'], $stats, array_keys( end( $stats ) ) ); 183 } 184 } 185 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Nov 21 01:00:03 2024 | Cross-referenced by PHPXref 0.7.1 |