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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1854閲覧

サイドバーに固定ページの自動抽出の抜粋を出力する方法

eaglespot

総合スコア7

WordPress

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/05/13 08:29

サイドバーのボックスに,長文の固定ページの抜粋を出力しようとしています。
funciton.php に
add_post_type_support( 'page', 'excerpt' );
を追加し,
phpで,

<?php $page_info = get_page_by_path('/koteipage/'); $page = get_post($page_info); echo apply_filters('the_content', $page->post_content); ?>

とすると,固定ページ(koteipage)の本文が全部,出力されます。

<?php $page_info = get_page_by_path('/koteipage/'); $page = get_post($page_info); echo apply_filters('the_excerpt', $page->post_excerpt); ?>

とすると,固定ページで”抜粋”の文章を書きこんでおくと,それが表示されます。
一応,抜粋表示機能は生きていると思われます。

しかし,”抜粋”の記入がないときは,なにも出力されません。

通常の投稿ページの the_excerpt では,本文から自動抽出された抜粋は表示されますが,
同じように,固定ページでも自動抽出させたいのですが,方法は異なるのでしょうか。
御存じの方,どうかご教示お願いします。

ちなみに,PHP 7.1.4,wordpress 4.7.4–ja です。

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

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

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

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

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

guest

回答2

0

これを試してみてください。

【Wordpressのget_postで抜粋文などが取得できないときの対処方法】
https://nelog.jp/wordpress-get_post

投稿2017/05/13 08:43

kei344

総合スコア69398

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

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

eaglespot

2017/05/13 11:25

さっそくのご教示,有難うございます。 すぐに回答が来て,喜んだのですが,なるほど,get_post() の場合は,上記のやり方では,投稿ページでも抜粋の自動抽出はしないのですね。気が付きませんでした。 紹介ページを参照し,その元記事も参照しましたが, global $post; $id = get_the_ID();  //何らかの方法で投稿のIDを取得 $post_id = get_post($id);  //投稿情報の取得 setup_postdata($post_id);  //投稿記事に関連するグローバル変数を設定 $exce = $post_id->post_excerpt;  //抜粋の取得 でうまくいくとのこと。 とはいえ,実はまだ初心者の私には,レベルの高い構文ですので, 悪戦苦闘しましたが,いまだに成功できていません。 固定ページのIDは $get_page_id = get_page_by_path("sulg_name"); $get_page_id = $get_page_id->ID; で取れるそうですが... もうすこし悪戦苦闘してみます。 有難うございました。
eaglespot

2017/05/14 00:35

紹介ページなどの情報をもとに,試行錯誤を重ねて以下のようにしてみました。 <?php global $post; $page_info = get_page_by_path('/koteipage/'); $post = get_post($page_info); setup_postdata($post); echo apply_filters('the_excerpt', $post->post_excerpt); ?> debug.log にもエラーメッセージは出ないし,固定ページで書き込んだ”抜粋”は出力されますので, $post には固定ページのデータが渡っているようですし,固定ページの抜粋出力機能は生きているようです。 しかし,やはり,書き込んだ抜粋がない場合は,なにも出力されません。 根本的にわかっていないところが多いですが,問題点を指摘していただければ幸いです。 これを簡単に解決する方法はあるのでしょうか。 このやり方にこだわるより,固定ページの全文は出力できているので, これを任意の文字数で切って出す方法を取ったほうが良いのかな, という気もしてきました。
guest

0

自己解決

有難うございました。なんとか解決しました。
結局,post_excerpt() を活かすことは成功していませんが,

ご紹介いただいたページの関連記事,
https://nelog.jp/get_the_custom_excerpt
の方法を拝借して,

function.phpに

function get_the_custom_excerpt($content, $length) {
$length = ($length ? $length : 70);//デフォルトの長さを指定する
$content = preg_replace('/<!--more-->.+/is',"",$content); //moreタグ以降削除
$content = strip_shortcodes($content);//ショートコード削除
$content = strip_tags($content);//タグの除去
$content = str_replace(" ","",$content);//特殊文字の削除(今回はスペースのみ)
$content = mb_substr($content,0,$length);//文字列を指定した長さで切り取る
return $content;
}

と,関数 get_the_custom_excerpt() を追加し, sidebar.php で,

<?php $page_info = get_page_by_path('/koteipage/'); $page = get_post($page_info); echo get_the_custom_excerpt($page->post_content, 60 ); ?>

と適用して,とにかく当初の目的は達成されました。
php 内で切り出す文字数を設定できるので便利ですね。

何日もはまっていましたが,解決できました。
有難うございました。

投稿2017/05/14 02:19

eaglespot

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問