Cocoon v2.8.5.4にSNSシェア数に関するアクションフックが追加されました。
・SNSのシェアアカウントを保存するタイミングでアクションフックを追加(set_transient_facebook_share_count, set_transient_hatebu_share_count, set_transient_pocket_share_count)
Cocoon をv2.8.5.4にバージョンアップし、ダッシュボード更新を有効化しました。
— わいひら@寝ログ (@MrYhira) April 20, 2025
以下の変更・修正を行いました。デバッグモード時、WordPress 6.8で出るようになった警告メッセージ体温がメインのアップデートです。
・WordPress… https://t.co/lQCX4yDgQV
このアクションフックを使って、投稿一覧にSNSシェア数を表示するカスタマイズになります。
// 投稿一覧のカラムを追加
function add_sns_share_columns($columns) {
$columns['facebook_shares'] = 'Facebook';
$columns['pocket_shares'] = 'Pocket';
$columns['hatebu_shares'] = 'はてブ';
return $columns;
}
add_filter('manage_posts_columns', 'add_sns_share_columns');
// 投稿一覧にシェア数を表示
function display_sns_share_columns($column, $post_id) {
switch ($column) {
case 'facebook_shares':
$count = get_post_meta($post_id, 'facebook_shares_count', true);
echo $count ? number_format($count) : '0';
break;
case 'pocket_shares':
$count = get_post_meta($post_id, 'pocket_share_count', true);
echo $count ? number_format($count) : '0';
break;
case 'hatebu_shares':
$count = get_post_meta($post_id, 'hatebu_share_count', true);
echo $count ? number_format($count) : '0';
break;
}
}
add_action('manage_posts_custom_column', 'display_sns_share_columns', 10, 2);
// カラムをソート可能に
function make_sns_share_columns_sortable($columns) {
$columns['facebook_shares'] = 'facebook_shares';
$columns['pocket_shares'] = 'pocket_shares';
$columns['hatebu_shares'] = 'hatebu_shares';
return $columns;
}
add_filter('manage_edit-post_sortable_columns', 'make_sns_share_columns_sortable');
function sns_share_column_orderby($query) {
if (!is_admin() || !$query->is_main_query()) {
return;
}
$orderby = $query->get('orderby');
$meta_keys = [
'pocket_shares' => 'pocket_share_count',
'hatebu_shares' => 'hatebu_share_count',
'facebook_shares' => 'facebook_shares_count'
];
if (isset($meta_keys[$orderby])) {
$query->set('meta_query', array(
array(
'key' => $meta_keys[$orderby],
'compare' => 'EXISTS' // 重要!これで全投稿を対象に
)
));
$query->set('orderby', 'meta_value_num');
}
}
add_action('pre_get_posts', 'sns_share_column_orderby');
add_action('set_transient_pocket_share_count', function($post_id, $res) {
update_post_meta($post_id,'pocket_share_count', $res, );
}, 10, 2);
add_action('set_transient_hatebu_share_count', function($post_id, $res) {
update_post_meta($post_id, 'hatebu_share_count', $res, );
}, 10, 2);
add_action('set_transient_facebook_share_count', function($post_id, $res) {
update_post_meta($post_id, 'facebook_shares_count', $res, );
}, 10, 2);
transientを更新するタイミングで各投稿のシェア数をpost_metaに保存しますので、transientが更新されるまではシェア数は0になります。
数日経てば徐々に表示されるようになると思います。