Open billerickson opened 5 years ago
I think that's a great idea. It should be pretty simple to setup.
wp shared-counts update 123
Update the counts on a specific post (id=123)
wp shared-counts bulk-update --count=200
Update counts on the 200 most recent posts
wp-shared-counts bulk-update --count=500 --only_empty=true
Update the 500 most recent posts that don't have any share count data (ex: on a development site where you just installed Shared Counts)
🙌
wp shared-counts display 123
Display shares for the post in a "table" view, sorta like in CLI if you view the database structure.
wp shared-counts popular ---count=100
Display 100 most shared posts (title, permalink, total shares). Basically what the dashboard widget does.
I asked @richardbuff to help with this since he's written a few custom cli scripts.
I started hacking away on this. I have the easiest one (popular posts) done at the moment: https://cl.ly/37936ec88814
I needed to bulk/force update counts that got zero'd out due to hitting the sharedcount.com API limit (this issues is resolved in v1.4 but i'm still stuck with thousands of 0's). The cache status plugin only updates posts without ANY value set. All these have the key, it's just 0 when FB debugger shows shares.
Anyway, this works for quick/dirty but still pretty safe and solid.
<?php
/**
* A rough WP-CLI command/file to force update shared counts on posts.
*
* @version 0.1.0
* @author Mike Hemberger (@JiveDig)
*
* @uses Shared Counts plugin.
* @link https://wordpress.org/plugins/shared-counts/
*
* HOW TO USE:
*
* 1. Put this code in a file named shared-counts-update.php in your WP root, typically public_html.
* 2. Use WP-CLI command to force update of posts (make sure you have enough API hits available on sharedcount.com).
* 3. The first parameter is the number of posts (posts_per_page) and the second is the offset. wp eval-file shared-counts-update.php posts_per_page offset
* 4. Example: wp eval-file shared-counts-update.php 200 100
*
* The above example will update 200 posts with an offset of 100, so starting from 101.
*/
if ( ! function_exists( 'shared_counts' ) ) {
WP_CLI::error( 'Please activate Shared Counts plugin to use this command.' );
}
$number = isset( $args[0] ) ? absint( $args[0] ) : 100;
$offset = isset( $args[1] ) ? absint( $args[1] ) : 0;
$posts = new WP_Query( array(
'post_type' => 'post',
'post_status' => 'publish',
'ignore_sticky_posts' => true,
'posts_per_page' => $number,
'offset' => $offset,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'shared_counts_total',
'value' => 0,
'type' => 'numeric',
'compare' => '='
),
array(
'key' => 'shared_counts_total',
'compare' => 'NOT EXISTS'
),
),
) );
if ( $posts->have_posts() ) {
$count = 1;
while ( $posts->have_posts() ) : $posts->the_post();
$update = shared_counts()->core->counts( get_the_ID(), true, true );
$total = shared_counts()->core->count( get_the_ID(), $type = 'total', $echo = false, $round = 2 );
$log = sprintf( '(%s) : %s : %s share(s) : %s ', $count, get_the_ID(), $total, get_the_title() );
$count++;
WP_CLI::log( $log );
endwhile;
WP_CLI::success( sprintf( '%s post counts were updated.', $posts->post_count ) );
} else {
WP_CLI::success( 'There were no posts to update.' );
}
wp_reset_postdata();
I think it would be really beneficial to add a WP_CLI::log()
that shows when the API limit is reached too.
Originally reported here: https://github.com/jaredatch/EA-Share-Count/issues/102
Desired Commands