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

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

ただいまの
回答率

90.47%

  • PHP

    20843questions

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

  • WordPress

    7439questions

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

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 812

Keith

score 17

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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2016/05/12 23:23

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

    キャンセル

  • shibainu

    2016/05/13 03:24

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

    キャンセル

回答 2

checkベストアンサー

+1

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

なので、

  1. フォーム登録時に your-title / your-url を項目として追加
<p>記事タイトル (必須)<br />
[text* your-title]</p>

<p>記事URL (必須)<br />
[text* your-url]</p>
  1. 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 );
}
// コードは未検証


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/19 11:29

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

    キャンセル

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • PHP

    20843questions

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

  • WordPress

    7439questions

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