目次プラス

Table of Contents Plusは、長文ページ(およびカスタム投稿タイプ)のコンテキストに応じた目次(TOC)を自動的に作成する、強力でありながらユーザーフレンドリーなWordPressプラグインです。単なる目次プラグイン以上の機能を持つこのプラグインは、サイト全体のページやカテゴリのリストを表示するサイトマップも出力できます。

説明

Wikipediaを念頭に置いてゼロから構築された目次は、デフォルトでページの最初に見出しが表示される前に表示されます。これにより、著者はページ全体を要約または紹介するリードインコンテンツを挿入できます。また、テーマ間のCSSの違いで失われることのない独自のナンバリングスキームを使用しています。

このプラグインは、コンテンツ管理システム指向の構成のような、コンテンツが豊富なサイトの優れたコンパニオンです。とはいえ、ブロガーも長くて構造化された記事を書く際に同じメリットを享受できます。

ToC Plusには管理オプションパネルが含まれており、表示位置、インデックスが表示される最小見出し数、その他の外観などをカスタマイズできます。パワーユーザーは、高度なオプションを展開して、以下を含む動作をさらに調整できます。

  • h5やh6のような不要な見出しレベルを除外します。
  • 含まれるCSSファイルの出力を無効にします。
  • 上部オフセットなどを調整します。

ショートコードを使用すると、特定のページでの特別な除外や、目次を完全に非表示にするなどのデフォルトの動作をオーバーライドできます。

サイドバーに目次を含めることをお勧めしますか? 外観 > ウィジェットに移動し、TOC+を目的のサイドバーと位置にドラッグします。

カスタム投稿タイプはサポートされていますが、自動挿入はカスタム投稿タイプでthe_content()が使用されている場合にのみ機能します。各投稿タイプはオプションパネルに表示されるため、必要なものを有効にしてください。

スクリーンショット

目次の例。一番上に配置され、右揃えで、幅は275pxです。
sitemap_pagesショートコードの例
sitemap_postsショートコードの例
設定 > TOC+にあるオプションパネル
高度なオプション
サイトマップタブ

インストール / アップグレード

プラグイン画面からTable of Contents Plusを検索するか、WordPressプラグインリポジトリから直接プラグインをインストールしてください。

特別なアップグレード手順はありません。既存のフォルダを最新のものに上書きするか、プラグインメニューの合理化されたアプローチを使用してください。オプションは失われません。

ヘルプ

最も簡単なアプローチ

せっかちな方のために、プラグインを有効にするだけで済みます。

プラグインはデフォルト設定を適用し、ページ(投稿やカスタム投稿タイプではなく)で4つ以上の見出しがある場合に、最初見出しの前に目次を生成します。

ショートコードは不要です。

目次はどこにありますか?

  1. ほとんどの場合、投稿、ページ、またはカスタム投稿タイプには最小見出し数未満しかありません。デフォルトでは4に設定されているため、コンテンツ内に少なくとも4つの見出しがあることを確認してください。この値を変更したい場合は、「メインオプション」>「表示条件」で見つけることができます。
  2. コンテンツタイプで自動挿入が有効になっていますか?デフォルトでは、ページのみが有効になっています。
  3. コンテンツ内に[no_toc]がどこかにありますか?これにより、現在の投稿、ページ、またはカスタム投稿タイプのインデックスが無効になります。
  4. TOC+ウィジェットを使用している場合、「サイドバーにのみ目次を表示する」が有効になっているかどうかを確認してください。これにより、表示がサイドバーのみに制限されます。外観 > ウィジェットに移動して確認できます。
  5. URLパスの照合に生成を制限した可能性があります。この設定は、メインオプションの高度なセクションにあります。

単一のページで目次の表示を停止するにはどうすればよいですか?

目次を抑制するには、次の[no_toc]をページ上の任意の場所に配置します。これはショートコードとして知られており、the_content()を使用する投稿、ページ、およびカスタム投稿タイプで機能します。

ラッピングを左または右に設定しましたが、見出しが目次の周りに折り返されません

これは通常、テーマ(Twenty ElevenやTwenty Twelveなどが該当します)に由来する見出し内またはその周辺にCSSのclearディレクティブがある場合に発生します。このディレクティブは、ユーザーエージェントに以前の折り返し指定をリセットするように指示します。

テーマのCSSを調整するか、目次の位置をページの上部に移動してみてください。

目次の周りで折り返しを許可するには、次のCSSを追加してみてください。

h1, h2, h3, h4, h5, h6 { clear: none; }

目次のタイトルにページ名を含めるにはどうすればよいですか?

表示しているページによってページのタイトルが変わるため、次の特別な変数を使用して、ページのタイトルを目次の見出しに自動的に挿入できます。

%PAGE_NAME%

そのまま使用することも、変数の前後にテキストを配置することもできます。

例として、ページ名がGreat Expectationsで、目次のタイトルがContents for %PAGE_NAME%に設定されている場合、最終的なタイトルはContents for Great Expectationsとなります。

私のサイトには100ページありますが、目次を表示したいのは10ページだけです。

90ページに [no_toc] を記述することもできますが、それは楽しくないので…次の方法を試してください。

  1. 設定 > TOC+ に移動し、ページ(または作業中のコンテンツタイプ)の自動挿入オプションを無効にします。
  2. それらが必要な10ページに [toc] を追加します。目次はショートコードを配置した場所に表示されることに注意してください。

または、インデックスを含めたいページがすべてサイトの特定のセクション(例:/doc/)内にある場合は、restrict pathオプションを試すこともできます。

特定のヘッダーを無視したいのですが。

特定のヘッダーを無視したい場合は、「exclude headings」オプションを使用します。複数のヘッダーはパイプ | で区切ります。他のテキストに一致させるにはアスタリスク * をワイルドカードとして使用します。これは大文字と小文字を区別しないことに注意してください。例をいくつか示します。

  • Fruit* Fruitで始まるヘッダーを無視します。
  • *Fruit Diet* ヘッダーにFruit Dietが含まれているヘッダーを無視します。
  • Apple Tree|Oranges|Yellow Bananas Apple TreeOranges、またはYellow Bananasと完全に一致するヘッダーを無視します。

目次をサイドバーに表示できますか?

TOC+ウィジェットを使用し、目的の位置にドラッグします。目次をサイドバーにのみ表示したい場合は、ウィジェットでそのオプションをオンにしてください。

Wikipediaとは異なり、すべてのアンカーを小文字にし、アンダースコアではなくハイフンを使用したいです。

大文字と小文字の調整やハイフンの使用を可能にするオプションが2つあります。それでもさらに調整が必要な場合は、toc_url_anchor_targetフィルターにアタッチすることで、もう少し調整できます。例については、下の開発者セクションを参照してください。

サイトマップを組み込みたいのですが。

  1. サイトマップ用のページを作成します(既存のものがある場合は、そちらを使用してください)。
  2. ページに [sitemap] を追加して保存します。

上記は、すべてのページとカテゴリをリストするサイトマップを統合する最も簡単な例です。設定 > TOC+ でサイトマップオプションをカスタマイズするか、以下のサイトマップ関連のショートコードで、より高度な使用例を確認してください。

テキストウィジェットを使用してサイトマップを組み込み、サイトマップのショートコードのいずれかを貼り付けることもできます。

サイトマップは、サイトの他の部分とは異なる奇妙なフォントを使用しています

サイトマップには追加のスタイルは作成されず、ショートコードを追加したときに使用したスタイルが継承されます。コピー&ペーストした場合、おそらくそれらを囲む「コード」タグもコピーしているため、その場合は削除してください。

ほとんどの場合、ショートコードは角括弧の前後に何も付けずに、独自の行に配置するようにしてください。

ショートコード

このプラグインは、可能な限りシームレスで手間のかからないように設計されており、操作のためにショートコードを挿入する必要はありませんでした。ただし、ショートコードを使用すると、ページ内の目次の位置を完全に制御できます。このプラグインで利用可能なショートコードは次のとおりです。

以下のショートコードのパラメータが省略されている場合、設定 > TOC+ で定義された設定がフォールバックされます。

目次

目次を希望の位置に生成できます。少数のページにのみ目次が必要なサイトにも便利です。

属性:

  • label: テキスト、目次のタイトル
  • no_label: true/false、タイトルの表示/非表示
  • wrapping: テキスト、「left」または「right」のいずれか
  • heading_levels: 数値、目次に含めたい見出しレベルを選択できます。複数のレベルはカンマで区切ります。例: 見出し3、4、5を含め、他を除外するには heading_levels="3,4,5"
  • exclude: テキスト、除外したい見出しを入力します。複数の見出しはパイプ | で区切ります。アスタリスク * をワイルドカードとして使用して、他のテキストに一致させることができます。より高度な一致には正規表現を使用することもできます。
  • class: テキスト、コンテナに追加するCSSクラスを入力します。複数のクラスはスペースで区切ります。

目次なし

現在の投稿、ページ、またはカスタム投稿タイプで目次を無効にすることができます。

サイトマップ

サイトのすべてのページとカテゴリのリストを生成します。投稿、ページ、またはテキストウィジェットのいずれかにこれを使用できます。

サイトマップページ

ページのみのリストを出力できます。

属性:

  • heading: 1から6の間の数値、使用するHTML見出しを定義します
  • label: テキスト、リストのタイトル
  • no_label: true/false、リストの見出しを表示または非表示にします
  • exclude: 除外したいページまたはカテゴリのID
  • exclude_tree: 除外したいページまたはカテゴリのID(すべての子孫を含む)

サイトマップカテゴリ

[sitemap_pages]と同様ですが、カテゴリ用です。

サイトマップ投稿

これにより、サイト上の公開済み投稿のインデックスを印刷できます。デフォルトでは、投稿は最初の文字ごとにグループ化され、アルファベット順にリストされます。各セクション、文字、リストにはCSSクラスがあり、外観をカスタマイズできます。

属性:

  • order: テキスト、ASCまたはDESC
  • orderby: テキスト、「title」、「date」、「ID」、「rand」などの一般的なオプション。リストについてはWP_Queryを参照してください。
  • separate: true/false(デフォルトはtrue)、falseに設定するとリストが最初の文字で区切られなくなります。

開発者向け

アンカーをカスタマイズするにはどうすればよいですか?

アンカーにまだ満足できない場合は、toc_url_anchor_targetフィルターにフックされたカスタム関数を使用して、ニーズに合わせて変更できます。たとえば、次のコードスニペットをfunctions.phpファイルに配置すると、すべてのアンカーが大文字に変換されます。

function my_custom_anchor( $anchor ) {
	return strtoupper( $anchor );
}
add_filter( 'toc_url_anchor_target', 'my_custom_anchor' );

toc_get_index( $content = ”, $prefix_url = ” )

テーマエディターが外側のリストに独自のIDやクラスを提供できるように、周囲のULまたはOLタグなしで目次のHTML形式の文字列を返します。

両方のパラメータはオプションです:

  • $contentは、見出しを含むコンテンツ全体です。空白の場合、現在の$post(例:「ループ」内)にあるコンテンツがデフォルトで使用されます。
  • $prefix_urlは、アンカーにプレフィックスを付けるURLです。文字列が提供された場合、そのまま使用されます。trueに設定されている場合、$postオブジェクトからパーマリンクを取得しようとします。

これらの例では、「ループ」内にあることを前提としています:

  1. 現在のページのインデックスを取得します:

echo '<ul id="my_toc">' . toc_get_index() . '</ul>';

2. すべての子要素とその見出しのリストを作成します:

$children = new WP_Query(array(
  'post_parent' => get_the_ID(),
  'posts_per_page' => -1	// get all children
));
while ( $children->have_posts() ) {
  $children->the_post();
  echo 
 '<h3>' . get_the_title() . '</h3>' .
 '<ul>' . toc_get_index( get_the_content(), get_permalink( $children->post->ID ) ) . '</ul>'
  ;
}
wp_reset_postdata();