サポート » プラグイン » 検索エンジンで検索されたキーワードを表示したいのですが

  • 解決済 supermarkn

    (@supermarkn)


    yahooなど検索エンジンからキーワードでwordpressのブログがヒットして、ブログを参照された場合、wordpress側でヒットしたキーワードが知りたい(表示したい)のです。
    プラグインで「Search Word Highlight for Mutibyte」を使用してユーザーが入力したキーワードの反転はしています。

    なぜそんな事をしたいかと言いますと、ユーザーが検索エンジンでヒットしてブログを見てくれているのですが、ほとんどindex.phpにアクセスがきます。 昔の記事の場合、せっかく検索エンジンでヒットしてindex.phpを見ていただいても、過去の記事なのでindex.phpに記事が掲載されていない可能性があるため、wordpress側の検索エンジンの窓にユーザーが入力したキーワードを自動で表示しておきたいのです。

    分かりにくい説明ですみません。 なにか良い方法がございましたらお教え願いたいです。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • モデレーター IKEDA Yuriko

    (@lilyfan)

    WordPress の検索フォームを使った場合は、the_search_query() で検索文字列を表示できるんですが、各検索エンジンの文字列は、それぞれ仕様が違うために、そのままでは取得できません。Search Word Highlight とかのプラグインは、検索エンジンごとに検索語を検出しています。

    ということで、当該プラグインのソースを見て、抽出された検索語をどうにか取得して、検索フォームに入れればいいでしょうか。

    Default テーマの場合、searchform.php で検索フォームを出力しているんので、$searchword に検索エンジンでの検索ワードが入っているとすると、3行目を下のようなコードに変えればいいでしょうか ($searchword に中身を入れる処理は別途必要です)。

    <div><input type="text" value="<?php
    if (isset($searchword)) {
        echo attribute_escape($searchword);
    } else {
        the_search_query();
    } ?>" name="s" id="s" />

    トピック投稿者 supermarkn

    (@supermarkn)

    lilyfan 様 ありがとうございました。
    お返事が送れて申し訳ありません。

    やはり、Search Word Highlight からキーワードを取得しないといけないのですね。
    プログラムを見ても理解できません。(^^;)

    phpをもう少し勉強して地道にプログラム解析します。
    有難うございました。

    しかし、ソースプログラムがあるに理解できないって最悪です・・・

    supermarkn さん、こんにちは。 🙂

    Search Word Highlight 作者です。
    このプラグインには検索語を取得する隠し API が実はひっそりとありまして、lilyfan さんのコードと併せて以下の感じで実現できるかと思います。

    <?php
    if(isset($swh)) {
        $searchword = htmlspecialchars($swh->getHighlighString());
        if($searchword == null) unset($searchword);
    }
    ?>
    <div><input type="text" value="<?php
    if (isset($searchword)) {
        echo attribute_escape($searchword);
    } else {
        the_search_query();
    } ?>" name="s" id="s" />

    よければお試しください。 😀

    モデレーター IKEDA Yuriko

    (@lilyfan)

    <?php
    if(isset($swh)) {
        $searchword = htmlspecialchars($swh->getHighlighString());
        if($searchword == null) unset($searchword);
    }
    ?>
    <div><input type="text" value="<?php
    if (isset($searchword)) {
        echo attribute_escape($searchword);
    } else {
        the_search_query();
    } ?>" name="s" id="s" />

    これだと、$searchword が2重にエスケープされてしまうのでダメですね。HTML エスケープは出力直前で行うという基本に従えばよく、前半の抽出部分でエスケープするのは余計になっています。
    冗長な処理をまとめてしまって、以下のように単純にすればよさそうです。

    <div><input type="text" value="<?php
    if (isset($swh)) {
        echo attribute_escape($swh->getHighlighString());
    } else {
        the_search_query();
    } ?>" name="s" id="s" />

    すいません、すいません。 フォローありがとうございます。

    if (isset($swh)) {

    $swh はプラグインが有効化されていると isset になってしまうので、意味合い的には

    <div><input type="text" value="<?php
    if (isset($swh) && $swh->getHighlighString() != null) {
        echo attribute_escape($swh->getHighlighString());
    } else {
        the_search_query();
    } ?>" name="s" id="s" />

    くらいでよいですかね。 😀

    モデレーター IKEDA Yuriko

    (@lilyfan)

    $swh はプラグインが有効化されていると isset になってしまうので、意味合い的には

    ああ、そうだったんですか。それだと、元のコード ($searchword に検索語を入れる) 方がいいですね。null との比較を演算子でやるのはいまいちなので、以下のようになるでしょうか。

    <?php
    if (isset($swh)) {
        $searchword =$swh->getHighlighString();
    }
    ?>
    <div><input type="text" value="<?php
    if (isset($searchword) && $searchword) {
        echo attribute_escape($searchword);
    } else {
        the_search_query();
    } ?>" name="s" id="s" />
    トピック投稿者 supermarkn

    (@supermarkn)

    hiromasaさん、lilyfanさん 本当にありがとうございます。
    まさか、Search Word Highlightの作者の方が出でこられるとはびっくりしております。
    Search Word Highlight for Mutibyteのプラグインを利用されてもらってます。(^^)

    まずは、取り急ぎ、ご挨拶とお礼まで。 記載していただいた内容を読ませていただきたいと思います。 これからちょっと楽しい時間をすごせそうです。また、後ほど・・・ 

    この機能は他の方達も絶対利用したいのではないかなと思います。

    トピック投稿者 supermarkn

    (@supermarkn)

    申し訳ありません。 詳しく書いていただいているのに変な質問させてもらいます。

    現在のコーディングが
    <form method=”get” action=”<?php bloginfo(‘url’); ?>/”>
    ***旧変更箇所 ここから***
    <input type=”text” value=”” name=”s” class=”text” />
    ***旧変更箇所 ここまで***
    <input type=”submit” id=”search-submit” class=”button” value=”検索” />
    </form>

    なんですが、このコーディングを
    <form method=”get” action=”<?php bloginfo(‘url’); ?>/”>
    ***新変更箇所 ここから***
    <?php if (isset($swh)) {
    $searchword =$swh->getHighlighString();
    }
    ?>
    <input type=”text” value=”<?php
    if (isset($searchword) && $searchword) {
    echo attribute_escape($searchword);
    } else {
    the_search_query();
    } ?>” name=”s” id=”s” />
    ***新変更箇所 ここまで***
         <input type=”submit” id=”search-submit” class=”button” value=”検索” />
    </form>

    上記だけの修正で良いのでしょうか。 すいません、勉強不足で。 

    モデレーター IKEDA Yuriko

    (@lilyfan)

    たぶんそれで動くと思います。

    モデレーター IKEDA Yuriko

    (@lilyfan)

    ちょっと追加。

    上記だけの修正で良いのでしょうか。 すいません、勉強不足で。 

    いえいえ、きちんと確認を取ることはいいことですよ。「分からないことをあやふやにしない」のは勉強として正しい方法ですから。

    まあ、プログラミングの場合は「たぶんこうだろう」と考えて、トライ & エラーで進めるのもよい方法なので、どちらがよいとも言えなかったりしますが。

    トピック投稿者 supermarkn

    (@supermarkn)

    時間がかかりましたが、ようやく理解ができました。
    hiromasaさん、lilyfanさん 丁寧なご指導ありがとうございました。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「検索エンジンで検索されたキーワードを表示したいのですが」には新たに返信することはできません。