WordPressの各固定ページをまとめて目次を作る
連載「編集者からみた、原稿執筆の一工夫」をはじめるにあたり、やりたいことが2つあった。
連載は固定ページに書くが、複数固定ページに分かれた場合でもそれらをまとめて目次を作りたかったため、
1.各固定ページの見出し1(H1)だけの目次を作る
2.各固定ページ内で目次を作る
という、2種類の目次設定である。
2に関しては、プラグイン「Table of Contents Plus」を使って、少しいじくることで解決した。
1に関して情報を探したところ、以下のサイトを参考にさせていただいた。
使用環境にあわせて修正する
やるべきことは4つ。
1.新しいphpファイルを用意する
2.function.phpを修正する
3.ショートコードを書く
4.style.cssを修正する
1.新しいphpファイルを用意する
参考サイトでは、「series_cat.php」を用意したが、ここでは、「rensai.php」を用意する。
<?php
$series_list = array(
"(記事URL) => "(記事タイトル)",
);
//現在表示しているページのURL
$current_url = (empty($_SERVER["HTTPS"]) ? "https://" : "https://") .
$_SERVER["HTTP_HOST"] .
$_SERVER["REQUEST_URI"];
//リストのHTML生成
$ret_list = "<ol class='series_list'>" . "\n";
foreach ($series_list as $key => $value) {
//現在表示しているページはリンクを貼らず、右に本記事を表す文字を追記
if ($current_url === $key) {
$ret_list .= "<li>" . $value . " ←いま見ている記事</li>" . "\n";
} else {
$ret_list .= "<li><a href='" . $key . "'>" . $value . "</a></li>" . "\n";
}
}
$ret_list .= "</ol>\n";
//echo
echo $ret_list;
2.function.phpを修正する
参考サイトでは、以下となっている。
function short_php($params = array()) {
extract(shortcode_atts(array(
'file' => 'default'
), $params));
ob_start();
include(get_theme_root() . '/' . get_template() . '/' . 'parts' . "/$file.php");
return ob_get_clean();
}
add_shortcode('seriesphp', 'short_php');
この機能を2つ以上設置する場合の修正点が2カ所。
function aaaaa($params = array()) {
extract(shortcode_atts(array(
'file' => 'default'
), $params));
ob_start();
include(get_theme_root() . '/' . get_template() . '/' . 'parts' . "/$file.php");
return ob_get_clean();
}
add_shortcode('bbbbb', 'aaaaa');
aaaaa:同じものを用意
bbbbb:ショートコードで使用
複数設置した場合、aaaaaを他のものと変えないと、エラーが出ました。
3.ショートコードを書く
参考サイトでは、以下となっている。
[seriesphp file="series_cat"]
こちらも、以下のように修正する。
[bbbbb file="rensai"]
bbbbb:function.phpで修正したものを使用
rensai:用意したphpファイル名を使用
しかし、設定をしても目次が表示されない問題が出てきた。
目次が表示されない:子テーマを使用している場合の表示方法
本サイトは子テーマを使用しているのが、その設定ができていなので表示されないらしいので、以下のサイトを参考に修正したところ、無事に表示された。
修正箇所
include(get_theme_root() . '/' . get_template() . "/$file.php");
↓
include(STYLESHEETPATH . "/$file.php");