質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.39%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

6807閲覧

投稿内のh2見出しを全て取得して記事の頭にリンクをはり、クリックするとその見出しに飛ぶようにしたい

KentaKatoh

総合スコア14

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

4クリップ

投稿2015/01/14 13:57

投稿内のh2見出しを全て取得して記事の頭にリンクをはり、クリックするとその見出しに飛ぶようにしたいのですが、取得する方法がわかりません。どのようにすれば取得できるのでしょうか。ご教授いただけると幸いです。

以下途中のコードを記載しておきます。

<nav class="article_nav"> <ul> <li><a href="">見出し1</a></li> <li><a href="">見出し2</a></li> <li><a href="">見出し3</a></li> </ul> </nav> <?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?> <?php the_content(); ?> <?php endwhile; ?> <?php else : ?> <section>お探しのページがみつかりません</section>
<?php endif; ?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんな感じでどうしょうか。
WordPressで動作確認はしたのでたぶん大丈夫だと思います。

lang

1 2//本文からh2タグをリストアップ 3$content = get_the_content(); 4$h2_list = array(); 5preg_match_all('/<h2>(.*?)</h2>/', $content, $h2_list); 6 7//置換・目次の準備 8list($h2_outer, $h2_inner) = $h2_list; 9$search = $h2_outer; 10$replace = array(); 11$li_list = array(); 12 13foreach ($h2_inner as $key => $val) { 14 $replace[] = sprintf('<h2 id="link%s">%s</h2>', $key, $val); 15 $li_list[] = sprintf('<li><a href="#link%s">%s</a></li>', $key, $val); 16} 17 18//目次部分 19$nav = "<ul>" . implode("\n", $li_list) ."</ul>"; 20//リンク用のidを埋め込んだ本文 21$body = str_replace($search, $replace, $content); 22

投稿2015/01/14 23:11

nnssn

総合スコア1221

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KentaKatoh

2015/01/15 04:35

nnssn様 早速のご回答ありがとうございます。 ご教授いただいたもので実現できました。大変助かりました、ありがとうございました。
guest

0

メモ代わりに最終的なコードを残しておきます。
wordpressのfunctions.phpに、nnssn様のコードと、投稿内のtemplete_urlを変換するショートコードを置換するコードを足して以下のようにし、固定ページでget_custom_contentを呼ぶような形にしました。
なにか間違っていたらすいません。

function get_custom_content() {
//本文からh2タグをリストアップ
$content = get_the_content();
$h2_list = array();
preg_match_all('/<h2 class="article_h2">(.*?)</h2>/', $content, $h2_list);

//置換・目次の準備
list($h2_outer, $h2_inner) = $h2_list;
$search = $h2_outer;
$replace = array();
$li_list = array();

foreach ($h2_inner as $key => $val) {
$replace[] = sprintf('<h2 id="link%s" class="article_h2">%s</h2>', $key, $val);
$li_list[] = sprintf('<li><a href="#link%s">>  %s</a></li>', $key, $val);
}

//目次部分
$nav = '<nav class="article_nav"><ul>' . implode("\n", $li_list) ."</ul></nav>";

//ショートコードを置換
$url_replace = array(
//'変更前' => '変更後',
'[url]' => get_bloginfo('url'),
'[template_url]' => get_bloginfo('template_url')
);
$content = str_replace(array_keys($url_replace), $url_replace, $content);

//リンク用のidを埋め込んだ本文
$body = str_replace($search, $replace, $content);

echo $nav;
echo $body;
}

投稿2015/01/15 04:40

KentaKatoh

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.39%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問