サイト内検索
Cocoonフォーラム
書き込みの前に以下の3点をご確認ください。
何を書き込んだら良いか分からない場合は、以下のテンプレートをコピペしてご利用ください。
不具合・カスタマイズ対象ページのURL:
相談内容:
不具合の発生手順:
解決のために試したこと:
※文字だけでは正しく伝わらない可能性があるため、スクショ画像の添付もお願いします。
※高速化設定をしている場合は無効にしてください。
環境情報:※↑こちらに「Cocoon設定 → テーマ情報」にある「環境情報」を貼り付けてください。
環境情報の取得方法はこちら。
→ https://wp-cocoon.com/theme-report/
高速化設定を無効にするにはこちら。
→ https://wp-cocoon.com/theme-trouble/
フォーラム利用ガイドリンク
- フォーラムガイドライン
- よくある質問と答え(FAQ)
- サポート対象外のケース
- 原因不明の不具合用トラブルシューティング
- トピックにHTMLを貼り付ける方法(推奨ツール:notepad.pw)
- 真っ白画面でのエラーメッセージの確認方法
- ブラウザ環境チェックツール
- Cocoonカスタマイズ依頼
フォーラム質問後、問題等が解決した場合は結果を書き込んでいただけると幸いです。同様の問題で調べている方には、結果が一番気になる部分となります。
トピックスターター 2025年2月3日 22:07
いつもお世話になっております。
カスタマイズ相談の案件かと思いましたが、判断がつかなかったため、こちらで質問させていただきます。
プロに依頼するかどうかを検討しております。
タイトルにある通り、投稿記事の更新履歴を誰でも閲覧できる状態にしたいです。
理想としては、レンタルwikiやWikipediaような差分付きの変更履歴を投稿記事ごとに設置したいです。
CSSの変更や、プラグインはあるのでしょうか?
そもそもワードプレスで可能なことか教えてください。
よろしくお願いいたします。
サイトURLです(広告があります)
https://overlordwiki.matrix.jp/
2025年2月3日 23:48
CSS変更でのカスタマイズは無理なように思います。プラグインもちょっと聞いたことはないですね。
カスタマイズする場合は、こんな感じで簡単なものならできるかと思います。Wikiみたいにするならさらなるカスタマイズが必要になるかと思います。
子テーマのfunction.php
function add_revision_history_to_content($content) {
if (is_single()) { // 記事ページのみ表示
global $post;
// リビジョンを取得
$revisions = wp_get_post_revisions($post->ID);
if ($revisions) {
ob_start(); // バッファリング開始
echo '<div class="revision-history">';
echo '<h2>変更履歴</h2>';
echo '<ul>';
// 最新リビジョンのIDを取得
$latest_revision_id = key($revisions);
// リビジョンの一覧を表示
foreach ($revisions as $revision) {
$date = get_the_date('Y-m-d H:i:s', $revision);
$is_latest = ($revision->ID == $latest_revision_id) ? '(最新)' : '';
echo '<li>';
echo '<a href="?revision=' . $revision->ID . '">' . esc_html($date) . $is_latest . '</a>';
echo '</li>';
}
echo '</ul>';
echo '</div>';
// 差分表示
if (isset($_GET['revision']) && is_numeric($_GET['revision'])) {
$revision_id = intval($_GET['revision']);
$revision = get_post($revision_id);
if ($revision && $revision->post_parent == $post->ID) {
$diff = wp_text_diff($revision->post_content, $post->post_content);
if ($diff) {
echo '<div class="revision-diff">';
echo '<h3>選択したリビジョンとの比較</h3>';
echo $diff;
echo '</div>';
} else {
echo '<p>このリビジョンとの違いはありません。</p>';
}
}
}
$revision_content = ob_get_clean(); // バッファリング終了
// 記事本文の前に変更履歴を追加
$content = $content . $revision_content;
}
}
return $content;
}
add_filter('the_content', 'add_revision_history_to_content');
子テーマのstyle.css
.revision-history {
background: #f9f9f9;
padding: 15px;
margin-bottom: 20px;
border-left: 5px solid #0073aa;
}
.revision-history h2 {
margin-top: 0;
}
.revision-history ul {
list-style: none;
padding-left: 0;
}
.revision-history li {
margin: 5px 0;
}
.revision-diff {
background: #fff0f0;
padding: 15px;
border: 1px solid #ff9999;
}
これに肉付けをしていけば詳細なものもできるかもしれません。ただ、あくまでカスタマイズ例なので、利用は自己責任でお願い致します。またカスタマイズはサポート外すので、詳しいサポートもできませんのでご了承いただければ幸いです。
この投稿は9か月前ずつわいひらに変更されました
2025年2月4日 00:57
CSSの変更
プラグインの存在は分かりませんでした。
機能追加に対してCSSなどと言う時点で、業者に依頼するべきかと思います。
わいひらんの言うように、かなり工夫が必要です。
実際に動かしてみましたが、提示されたコードは、履歴との差分を表示するものです。
wikiの場合、右上に「履歴を表示」を設け、クリックすると履歴一覧が表示され。
履歴表示一覧から該当履歴をクリックすると、その履歴の全体ページが表示され。
これを実現するために、わいひらさんのコードを流用して以下の調整が必要かと思います。
- 投稿ページなら、the_contentを用い各ページに「履歴を表示」リンクを追加。
- $_GETのパラメータに応じ、「履歴を表示」なら、the_contentを用い履歴一覧に置き換え。
- 履歴一覧のリンクをクリックした場合、$_GETのパラメータに応じ、履歴の本文を表示。
その際、本文上に履歴情報を追加。
2025年2月4日 11:18
- 投稿の本文に「履歴を表示」を追加。
- 「履歴を表示」をクリックすると、履歴一覧を表示。
- 各履歴のリンクをクリックすると、その履歴の本文を表示。
add_filter('the_content', function ($content) {
global $post;
// 投稿ページの場合
if (is_single()) {
$revisions = wp_get_post_revisions($post->ID);
// レビジョンがある場合
if ($revisions) {
if (!isset($_GET['show_revisions']) && !isset($_GET['revision'])) {
return '<div class="revision-toggle"><a href="?show_revisions=1">履歴を表示</a></div>' . $content;
}
ob_start();
// リビジョン一覧を表示
if (isset($_GET['show_revisions'])) {
echo '<div class="revision-history">';
echo '<h2>履歴</h2>';
echo '<ul>';
// リビジョンを時系列順にソート(最新が先頭)
$revisions = wp_list_sort($revisions, 'post_modified_gmt', 'DESC');
// 最新リビジョンを取得
$latest_revision = reset($revisions);
foreach ($revisions as $revision) {
$date = get_post_field('post_modified', $revision);
$formatted_date = date('Y-m-d H:i:s', strtotime($date));
$is_latest = ($revision->ID == $latest_revision->ID) ? '(最新)' : '';
echo '<li>';
echo '<a href="?revision=' . esc_attr($revision->ID) . '">' . esc_html($formatted_date) . $is_latest . '</a>';
echo '</li>';
}
echo '</ul>';
echo '<div class="back_post"><a href="' . get_permalink($post->ID) . '">記事に戻る</a></div>';
echo '</div>';
return ob_get_clean();
}
// 選択リビジョンの本文を表示
if (isset($_GET['revision']) && is_numeric($_GET['revision'])) {
$revision_id = intval($_GET['revision']);
$revision = get_post($revision_id);
if ($revision && $revision->post_parent == $post->ID && current_user_can('edit_post', $post->ID)) {
$date = get_post_field('post_modified', $revision);
$formatted_date = date('Y-m-d H:i:s', strtotime($date));
echo '<p class="is-style-blank-box-red has-border revision-memo">履歴:' . esc_html($formatted_date) . 'の内容</p>';
echo '<div class="revision-body">' . wp_kses_post($revision->post_content) . '</div>';
echo '<div class="back_post"><a href="' . get_permalink($post->ID) . '">記事に戻る</a></div>';
return ob_get_clean();
}
}
}
}
return $content;
});
トピックスターター 2025年2月5日 08:19
わいひら様、大門未知子様、返信ありがとうございます。
やはり現状のワードプレスにはないのですね。
私自身調べていて、MEDIAwikiなら話が早いのだろうと思いましたが、MEDIAwikiは難しいのでワードプレスでもしできるなら……と思い質問させていただきました。
完全に有償案件とわかり助かりました。
一応、MEDIAwikiへの移行も考えつつ、依頼の際はこちらのフォーラムを参考にさせていただきます。
詳しく教えて下さり、本当にありがとうございました。
わいひら reacted
問題の解決に至った場合には、トピック冒頭の「解決済み」をクリックしていただけますと幸いです。
また、有用な回答があった場合は返信右下にある「いいね!」もご活用ください。回答者の励みになります。
(CC BY-ND 2.1)準じていれば(リンクを貼っていただければ)転載も自由です。カスタマイズ記事を書く際にコード等をコピペ利用していただいて構いません。
フォーラムの使い方がよくわからない場合は、テストトピックで自由にテストしていただいて構いません。
最近の書き込みはこちら。
詳細なカスタマイズ依頼をするならこちら。






