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

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

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

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

PHP

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

Q&A

解決済

2回答

2555閲覧

wordpress 記事タイトル及びパーマリンクの取得について(改訂)

Keith

総合スコア25

WordPress

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

PHP

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

0グッド

0クリップ

投稿2016/05/12 14:04

編集2016/05/17 03:37

wordpressを利用したサイトを構築しております。

記事のアタマにボタンを設置し、これをクリックするとその記事のタイトル、及びパーマリンクを取得する機能を追加したく考えております。

まずはボタンを、下記のように作ります

html

1<!--報告ボタン--> 2<li class="report"> 3<a href="#rpt" rel="leanModal"> 4記事を報告</a> 5 6<div id="rpt" class="modal"> 7<div style="margin : 9px 0px 9px 0px"> 8<b>報告の詳細をご入力下さい</b> 9</div> 10<?php echo do_shortcode('[contact-form-7 id="1374" title="report"]'); ?> 11</div> 12</li>

これをcontent.phpに配置し、このように表示します(黄色の「記事を報告」ボタン)

イメージ説明

ボタンをクリックすると
Leanmodalというモーダルポップアップ(jQuery)を呼び出し、ポップアップウィンドウ内に ContactForm7 プラグインをショートコードで呼び出しています。

すると下記の表示となります。

イメージ説明

ここで送信ボタンを押した際に、プラグイン機能により下記のメール文面を受け取るようにします。

ユーザーから記事の報告がありました。 [radio-348] [_post_title] [_post_url]

上記はどの記事から報告が来たのかを把握するために
[_post_title]
[_post_url]
という ContactForm7 プラグインに実装されているコードを使用し、記事のタイトル及びパーマリンクを取得するよう設定しております。

この場合、個別記事の画面からボタンを押した際には正確に記事タイトルとパーマリンクが取得できますが、
ホーム画面(10ほどの記事がループ処理で表示されている状態)から押すと
先頭の記事のもののみが取得・表示されるばかりで、うまく参りません。
たとえば上から3番めの記事をクリック・送信しても、1番めの記事のタイトルとパーマリンクが反映されてしまいます。

ホーム画面から個別記事のタイトルとパーマリンクを正確に取得するには、何かいい策はございますでしょうか?
お知恵をお貸し頂ければ幸いです。よろしくお願いいいたします。

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

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

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

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

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

kei344

2016/05/12 14:23

全体のコードを質問文に追記いただいたほうが回答を得られやすいと思います。また、こう出力したいというHTMLも併せて追記されてはいかがでしょうか。
shibainu

2016/05/12 18:24

ループの処理がうまくいっていない感じがします。 home(またはデフォルトでしたらindex)のテーマテンプレートのソースがあると良いと思います。
guest

回答2

0

ベストアンサー

Contact Form 7 のコードを追って見ましたが、ざっと見た限りどうもループ内では _post_url などを逐次設定していないようでした。

なので、

  1. フォーム登録時に your-title / your-url を項目として追加

HTML

1<p>記事タイトル (必須)<br /> 2[text* your-title]</p> 3 4<p>記事URL (必須)<br /> 5[text* your-url]</p>
  1. do_shortcodeecho する前に <input> を置換

PHP

1$form_html = do_shortcode( '[contact-form-7 id="1374" title="report"]' ); 2// your-title / your-url 用の <input> を置き換える 3preg_match_all( '/<input [^>]*name="your-(title|url)"[^>]*>/', $form_html, $match ); 4if ( !empty( $match[ 0 ] ) ) { 5 $input_url = ( $match[ 1 ][ 0 ] === 'url' ) ? $match[ 0 ][ 0 ] : $match[ 0 ][ 1 ]; 6 $input_title = ( $match[ 1 ][ 0 ] === 'title' ) ? $match[ 0 ][ 0 ] : $match[ 0 ][ 1 ]; 7 // value に URL/タイトルを挿入する 8 $tmp_url = preg_replace( '/value=""/', 'value="'.get_the_permalink( $post->ID ).'"', $input_url ); 9 $tmp_title = preg_replace( '/value=""/', 'value="'.esc_attr( get_the_title( $post->ID ) ).'"', $input_title ); 10 // 'type="hidden"'に置き換える 11 $tmp_url = str_replace( 'type="text"', 'type="hidden"', $tmp_url ); 12 $tmp_title = str_replace( 'type="text"', 'type="hidden"', $tmp_title ); 13 // 元のものと置き換えて出力する 14 echo str_replace( array( $input_url, $input_title ), array( $tmp_url, $tmp_title ), $form_html ); 15} 16// コードは未検証

という感じで処理できるのでは。(コードは未検証)

投稿2016/05/17 18:44

kei344

総合スコア69400

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

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

Keith

2016/05/19 02:29

プラグイン自体の仕様と理解致しました。 これをご提示頂いた通り、phpで置き換える方法にて試行したいと思います。 いつもありがとうございます。
guest

0

ループ部分も含めて見せて頂ければどこを修正すればいいか分かるかもしれません。

投稿2016/05/14 12:17

munyagu

総合スコア479

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問