サイト内検索
Cocoonフォーラム

書き込みの前に以下の3点をご確認ください。
何を書き込んだら良いか分からない場合は、以下のテンプレートをコピペしてご利用ください。
不具合・カスタマイズ対象ページのURL:
相談内容:
不具合の発生手順:
解決のために試したこと:
※文字だけでは正しく伝わらない可能性があるため、スクショ画像の添付もお願いします。
※高速化設定をしている場合は無効にしてください。
環境情報:※↑こちらに「Cocoon設定 → テーマ情報」にある「環境情報」を貼り付けてください。
環境情報の取得方法はこちら。
→ https://wp-cocoon.com/theme-report/
高速化設定を無効にするにはこちら。
→ https://wp-cocoon.com/theme-trouble/
フォーラム利用ガイドリンク
- フォーラムガイドライン
- よくある質問と答え(FAQ)
- サポート対象外のケース
- 原因不明の不具合用トラブルシューティング
- トピックにHTMLを貼り付ける方法(推奨ツール:notepad.pw)
- 真っ白画面でのエラーメッセージの確認方法
- ブラウザ環境チェックツール
- Cocoonカスタマイズ依頼
フォーラム質問後、問題等が解決した場合は結果を書き込んでいただけると幸いです。同様の問題で調べている方には、結果が一番気になる部分となります。
トピックスターター 2025年4月12日 14:46
以前は、SNS count cacheを使用して確認していましたが、PHP8への対応がされていないので、現在は使用しておりません。
Cocoonの機能として記事ごとのSNSシェア数を一覧で確認できるようにして頂けると助かります。
もし、導入するコストが見合わないということでしたら、記事ごと、SNS種別ごとにシェア数をtransientに保存していると思いますので、transientを保存するタイミングにactionフックを追加して頂けると助かります。
そうして頂ければ、actionフックでSNSシェア数を別途保存して、自前でカスタマイズできる道も開けます。
2025年4月12日 16:38
SNSシェア数を一覧で確認できるようにして頂けると助かります
これは管理画面の投稿一覧のことを指しますか?
分かる範囲で、キャッシュから値を取得し、それぞれに表示。(該当のキャッシュで合っているか確認していません。)
●管理画面の投稿一覧にカラムを設け、SNSシェア数を表示
add_filter('manage_posts_columns', function($columns) { $columns['sns_share'] = 'SNSシェア数'; return $columns; }); // 投稿のカスタムカラムにSNSシェア数を表示 add_action('manage_posts_custom_column', function($column, $post_ID) { if ($column == 'sns_share') { $fb_id = TRANSIENT_SHARE_PREFIX . 'facebook_' . $post_ID; $hatebu_id = TRANSIENT_SHARE_PREFIX . 'hatebu_' . $post_ID; $pocket_id = TRANSIENT_SHARE_PREFIX . 'pocket_' . $post_ID; $fb_count = intval(get_transient($fb_id)); $hatebu_count = intval(get_transient($hatebu_id)); $pocket_count = intval(get_transient($pocket_id)); // SNSシェア数を表示 echo 'Facebook: ' . $fb_count . '<br>'; echo 'はてブ: ' . $hatebu_count . '<br>'; echo 'Pocket: ' . $pocket_count; } }, 10, 2);
●エントリーカードにSNSシェア数を表示
add_action('entry_card_snippet_after', function($post_ID) { $fb_id = TRANSIENT_SHARE_PREFIX . 'facebook_' . $post_ID; $hatebu_id = TRANSIENT_SHARE_PREFIX . 'hatebu_' . $post_ID; $pocket_id = TRANSIENT_SHARE_PREFIX . 'pocket_' . $post_ID; $fb_count = intval(get_transient($fb_id)); $hatebu_count = intval(get_transient($hatebu_id)); $pocket_count = intval(get_transient($pocket_id)); // HTML 出力 echo '<ul class="sns">'; echo '<li><span class="social-icon icon-facebook"></span>:' . $fb_count . '</li>'; echo '<li><span class="social-icon icon-hatena"></span>:' . $hatebu_count . '</li>'; echo '<li><span class="social-icon icon-pocket"></span>:' . $pocket_count . '</li>'; echo '</ul>'; });
わいひら reacted
トピックスターター 2025年4月12日 17:47
コードありがとうございます。
CocoonのSNSキャッシュは記事表示時にAPIから取得されてtransientの保存期限は1日だったかと。
常に保持されているわけではなかったと思います。
記事一覧に表示するシェア数はtransientではなく、transientを更新するタイミングで別領域に保存したデータである必要があるかと考えています。
2025年4月12日 19:57
transientを保存するタイミングにactionフックを追加して頂けると助かります。
このタイミングというのは、以下のFacebook、はてなブックマーク、ポケットのtransient保存タイミング直前に、
do_action('set_transient_sns_share_count', $transient_id, $res);
と言った感じのアクションフックを設置するというのでよろしいでしょうか。
https://github.com/xserver-inc/cocoon/blob/7f56755f36aa906db162843fb48ddcbba2d3c8ff/lib/sns-share.php#L158
https://github.com/xserver-inc/cocoon/blob/7f56755f36aa906db162843fb48ddcbba2d3c8ff/lib/sns-share.php#L246
https://github.com/xserver-inc/cocoon/blob/7f56755f36aa906db162843fb48ddcbba2d3c8ff/lib/sns-share.php#L374
2025年4月12日 21:24
アクションフックを追加しても、どのような使われ方をするのでしょうか?
タイミングに応じ、以下には何が入るのでしょうか?意味があるのか?
$transient_id, $res
●ご参考
管理画面ではget_share_cache_ID()が正しく動作しない。
例えばfetch_facebook_countの引数をURLではなく、投稿IDに変更し、管理画面でもSNS数を取得できるようにする。
他にも見直し必要ですが。
function fetch_facebook_count($post_id = null) { // URLを取得 $url = $post_id ? get_permalink($post_id) : get_the_permalink(); // キャッシュIDを投稿IDまたはget_share_cache_ID()で取得 $cache_id = $post_id ? $post_id : get_share_cache_ID(); $transient_id = TRANSIENT_SHARE_PREFIX . 'facebook_' . $cache_id; // キャッシュから取得 if (is_sns_share_count_cache_enable()) { $count = get_transient($transient_id); if (is_numeric($count)) { return $count; } } $res = fetch_facebook_count_raw($url); //別スキームカウントの取得 if (is_sns_share_count_cache_enable() && is_another_scheme_sns_share_count()) { $res += fetch_facebook_count_raw(get_another_scheme_url($url)); } // キャッシュ保存 if (is_sns_share_count_cache_enable()) { set_transient($transient_id, $res, HOUR_IN_SECONDS * get_sns_share_count_cache_interval()); } return $res; }
2025年4月12日 21:48
>わいひらさん
そこにフック付けて意味あります?
どんな使い方を想定しています?具体例をあげ説明願います。
2025年4月12日 22:08
●ご参考
以下に変更すれば、以下を用い管理画面でも各投稿のSNSカウント数が取得できるかと思います。
- get_facebook_count()
- get_hatebu_count()
- get_pocket_count()
トピックスターター 2025年4月13日 00:06
@yhira さん
その場所が期待するアクションフックの場所になります。
$resと$post_idがあれば理想です。
transientだと保持期間の長さによってデータが保持されていないケースがあると思い、transientが更新されるタイミングでSNSカウント数をpost_metaに保存しようと思ってフックの追加を要望しました。
投稿一覧などでSNSシェア数を取得する際には、post_metaからSNSシェア数を取得するつもりでした。
問題の解決に至った場合には、トピック冒頭の「解決済み」をクリックしていただけますと幸いです。
また、有用な回答があった場合は返信右下にある「いいね!」もご活用ください。回答者の励みになります。
(CC BY-ND 2.1)準じていれば(リンクを貼っていただければ)転載も自由です。カスタマイズ記事を書く際にコード等をコピペ利用していただいて構いません。
フォーラムの使い方がよくわからない場合は、テストトピックで自由にテストしていただいて構いません。
最近の書き込みはこちら。
詳細なカスタマイズ依頼をするならこちら。