wordpressを利用したサイトを構築しております。
記事のアタマにボタンを設置し、これをクリックするとその記事のタイトル、及びパーマリンクを取得する機能を追加したく考えております。
まずはボタンを、下記のように作ります
<!--報告ボタン-->
<li class="report">
<a href="#rpt" rel="leanModal">
記事を報告</a>
<div id="rpt" class="modal">
<div style="margin : 9px 0px 9px 0px">
<b>報告の詳細をご入力下さい</b>
</div>
<?php echo do_shortcode('[contact-form-7 id="1374" title="report"]'); ?>
</div>
</li>
これをcontent.phpに配置し、このように表示します(黄色の「記事を報告」ボタン)
ボタンをクリックすると
Leanmodalというモーダルポップアップ(jQuery)を呼び出し、ポップアップウィンドウ内に ContactForm7 プラグインをショートコードで呼び出しています。
すると下記の表示となります。
ここで送信ボタンを押した際に、プラグイン機能により下記のメール文面を受け取るようにします。
ユーザーから記事の報告がありました。
[radio-348]
[_post_title]
[_post_url]
上記はどの記事から報告が来たのかを把握するために
[_post_title]
[_post_url]
という ContactForm7 プラグインに実装されているコードを使用し、記事のタイトル及びパーマリンクを取得するよう設定しております。
この場合、個別記事の画面からボタンを押した際には正確に記事タイトルとパーマリンクが取得できますが、
ホーム画面(10ほどの記事がループ処理で表示されている状態)から押すと
先頭の記事のもののみが取得・表示されるばかりで、うまく参りません。
たとえば上から3番めの記事をクリック・送信しても、1番めの記事のタイトルとパーマリンクが反映されてしまいます。
ホーム画面から個別記事のタイトルとパーマリンクを正確に取得するには、何かいい策はございますでしょうか?
お知恵をお貸し頂ければ幸いです。よろしくお願いいいたします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
Contact Form 7 のコードを追って見ましたが、ざっと見た限りどうもループ内では _post_url
などを逐次設定していないようでした。
なので、
- フォーム登録時に your-title / your-url を項目として追加
<p>記事タイトル (必須)<br />
[text* your-title]</p>
<p>記事URL (必須)<br />
[text* your-url]</p>
do_shortcode
をecho
する前に<input>
を置換
$form_html = do_shortcode( '[contact-form-7 id="1374" title="report"]' );
// your-title / your-url 用の <input> を置き換える
preg_match_all( '/<input [^>]*name="your-(title|url)"[^>]*>/', $form_html, $match );
if ( !empty( $match[ 0 ] ) ) {
$input_url = ( $match[ 1 ][ 0 ] === 'url' ) ? $match[ 0 ][ 0 ] : $match[ 0 ][ 1 ];
$input_title = ( $match[ 1 ][ 0 ] === 'title' ) ? $match[ 0 ][ 0 ] : $match[ 0 ][ 1 ];
// value に URL/タイトルを挿入する
$tmp_url = preg_replace( '/value=""/', 'value="'.get_the_permalink( $post->ID ).'"', $input_url );
$tmp_title = preg_replace( '/value=""/', 'value="'.esc_attr( get_the_title( $post->ID ) ).'"', $input_title );
// 'type="hidden"'に置き換える
$tmp_url = str_replace( 'type="text"', 'type="hidden"', $tmp_url );
$tmp_title = str_replace( 'type="text"', 'type="hidden"', $tmp_title );
// 元のものと置き換えて出力する
echo str_replace( array( $input_url, $input_title ), array( $tmp_url, $tmp_title ), $form_html );
}
// コードは未検証
という感じで処理できるのでは。(コードは未検証)
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
ループ部分も含めて見せて頂ければどこを修正すればいいか分かるかもしれません。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.35%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
kei344
2016/05/12 23:23
全体のコードを質問文に追記いただいたほうが回答を得られやすいと思います。また、こう出力したいというHTMLも併せて追記されてはいかがでしょうか。
shibainu
2016/05/13 03:24
ループの処理がうまくいっていない感じがします。
home(またはデフォルトでしたらindex)のテーマテンプレートのソースがあると良いと思います。