「こちらの質問でワードプレスの記事をインデックスページのサイドメニューに表示させてほしいという質問をさせて頂きました。(URL:http://q.hatena.ne.jp/1287850757


今回トップページのみに表示していた内容を下層の地域ページ(http://longtail-japan.com/ihinseiri/1/index.html )に全ての記事の中から地域名+指定キーワードの内容にあったものだけを表示させたいと思っています。
方法としてはタイトル、もしくは設定タグに地域名と指定キーワードフィルターをかけて表示できればと考えています。

現状の不具合としては下層のページにおいても同様にCGI(http://longtail-japan.com/cgi/whats-new.cgi)の内容を読み込んではいるのですが下層ページでは文字化けしてしまいます。

当方の仕様としては サーバーについてはロリポップを使用しています。
表示形式は基本的には静的ページに表示させます。

また、タグの打ちかえ程度しかできませんので的確にどの部分をこのような直すといった回答をいただけますようお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/12/11 01:04:45
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

ポイント100pt

地域名と指定キーワードは、記事にタグとして設定している前提になります。
※まずは例示された下層ページ(http://longtail-japan.com/ihinseiri/1/index.html)で表示する為の手順になります。


1.まずHTMLファイルでPHPを動作させる為に、以下の内容の「.htaccess」ファイルを作成して「ihinseiri」ディレクトリ内にアップロードしてパーミッションを「604」に設定します。(※ファイル名が「index.html」のHTMLファイルのみ対象にします。)
※Windowsのエクスプローラからでは作成できないと思いましたので、テキストエディタで保存する時に「.htaccess」と名前を付けるか、一旦適当な名前で作成しておいてFTPでアップロード時に変更するようにしてください。

<FilesMatch "^index\.html$">
# For lolipop
#AddHandler php5.2-script .html
AddHandler php5.3-script .html
#AddHandler php5.4-script .html
</FilesMatch>


※行頭に「#」を付けるとコメントアウトされて無効になり、「#」を外すと有効になります。
※独自ドメインなのでPHPバージョン5.3を利用する書き方にしていますが、ロリポップでは5.2、5.3、5.4のバージョンのPHPが用意されています。
動作しない場合は、どのバージョンを利用する設定になっているか確認してみてください。
ユーザー専用ページから確認・設定変更が可能です。

・PHP設定
http://lolipop.jp/manual/user/php-setting/

・CGI・SSI・PHP・SENDMAILについて
http://lolipop.jp/manual/hp/cgi/

・.htaccessでhtmlでphpを読み込めるようにしてい
http://lolipoking.lolipop.jp/php/patio.cgi?mode=view&no=3822

・ロリポップのレンタルサーバーhtmlのままphp
http://www.fogburden.com/?p=227

・拡張子.htmlでphpを動かす。ロリポップサーバー最新情報
http://www.aveit.biz/column/detail1357458517.html


2.新規ファイル「newentrylist.php」を次の内容で作成します。(文字コードは何でも大丈夫です。)

	<?php
		$args = array(
			'posts_per_page'   => $num,
			'tax_query' => array(
				'relation' => 'AND',
				array(
					'taxonomy' => 'post_tag',
					'field' => 'slug',
					'terms' => $area
					//'operator' => 'AND' // ※※指定した地域すべてが含まれている記事を取得したい場合は、この行頭の「//」を外して有効にします。※※デフォルトでは指定した地域の何れかが含まれる記事を取得します。※※
				),
				array(
					'taxonomy' => 'post_tag',
					'field' => 'slug',
					'terms' => $keyword,
					//'operator' => 'AND' // ※※指定したキーワードすべてが含まれている記事を取得したい場合は、この行頭の「//」を外して有効にします。※※デフォルトでは指定したキーワードの何れかが含まれる記事を取得します。※※
				)
			),
		);
		$the_query = new WP_Query( $args );
		if( $the_query->post_count >= 1 ) : 
			echo "<h4>" . $title . "</h4>\n";
			echo "<ul>\n";

			while ( $the_query->have_posts() ) : $the_query->the_post();
				echo "<li>";
				echo "<a href=\"" . get_permalink() . "\">" .get_the_title() . " [" . get_the_date() . "]</a>";
				echo "</li>\n";
			endwhile;
			echo "</ul>\n";
		endif;
		wp_reset_postdata();
?>



3.先ほど作成した「newentrylist.php」をサーバーにアップロードしてパーミッションを設定します。
WordPressを設置したディレクトリ「blog」内にアップロードし、パーミッションを「index.php」と同じに設定してください。おそらく「700」です。

・サイト改ざんへの対策をお願いいたします - ロリポップ!レンタルサーバー
http://lolipop.jp/security/


4.対象の下層ページの各HTMLファイルに次の記述を追加します。
※まずは「/ihinseiri/1/」内の「index.html」をダウンロードして追記後、同じ場所にアップロードし直します。
※ファイルの文字コードはUTF-8(BOMなし)のまま変更しないで保存します。

	<?php
		require '../../blog/wp-load.php'; //編集中のHTMLファイルの2階層上(※「ihinseiri」と同じ階層)にWordPressを設置したディレクトリ「blog」がある場合
		$title = "ブログ更新情報"; //更新情報のリストのタイトル
		$num = 10; //記事の取得件数
		$area = array('地域名1'); //対象地域の指定※複数の地域を対象にする場合は、カンマ「,」で区切って「array('地域名1', '地域名2', '地域名3')」のように続けます。
		$keyword = array('キーワード1'); //キーワード指定※複数指定する場合は、地域名と同じようにカンマで区切って続けます。
		require '../../blog/newentrylist.php'; //編集中のHTMLファイルの2階層上(※「ihinseiri」と同じ階層)にWordPressを設置したディレクトリ「blog」がある場合
	?>



※今回新しく作成したファイルと記述は下層ページ用です。
下層ページで正常に動作する事を確認したら、サイトトップページもPHPによる更新情報表示に変更します。(※「ihinseiri」など対象の下層ディレクトリの数が少なく、対象ディレクトリ(※「ihinseiri」内の「1」や「2」等のディレクトリは除く)すべてに「.htaccess」の設置が可能な場合は、そのまま「whats-new.cgi」を利用しても大丈夫です。)


【追記】

地域名とキーワード指定を別々に指定できるようにコードを変更しました。
※修正前のコードは「地域名および指定したキーワードすべて」が含まれる(※「地域名」AND「キーワード1」AND「キーワード2」AND 「キーワード3」...)あるいは「地域名あるいは指定したキーワードの何れか」が含まれる(※「地域名」OR「キーワード1」OR「キーワード2」OR 「キーワード3」...)記事のどちらかのパターンで記事を取得する設定でした。

※変更後のコードは次の2パターンの好きな方で記事を取得できます。(デフォルトでは「1」のパターンで取得します。)

1.「地域名および指定したキーワードの何れか」が含まれる(※「地域名」AND「[キーワード1] OR [キーワード2] OR [キーワード3]」...)記事

2.「地域名および指定したキーワードすべて」が含まれる(※「地域名」AND「キーワード1」AND「キーワード2」AND 「キーワード3」...)記事

※対象地域についても複数対象にする事ができ、キーワードと同様にすべての地域あるいは何れかの地域に設定で変更可能です。(※デフォルトで何れかの地域にしてあります。)

id:rouge_2008

「追記】にあるようにコードを変更してあります。

1.対象地域何れか+指定キーワード何れか
2.対象地域何れか+指定キーワードすべて
3.対象地域すべて+指定キーワード何れか
4.対象地域すべて+指定キーワードすべて

※2パターンと記載しましたが、地域を複数指定した場合を含めると全部で4パターンです。
※デフォルトでは「1」のパターンで取得します。

2013/12/10 12:17:45
  • id:rouge_2008
    再質問ありがとうございます。わざわざすみません・・・

    キャンセルした方の質問にコメントしましたが、文字化けの原因は文字コードの違いです。
    「whats-new.cgi」の文字コードは「UTF-8」ですが、出力を「Shift_JIS」で行うようにしてあります。
    トップページ「index.html」は「Shift_JIS」で作成してあるので、サイトトップでは文字化けせずに表示されていますが、下層のページでは「UTF-8」で作成されていますので、読み込まれた「whats-new.cgi」が文字化けしています。

    ※取り急ぎ下層ページでの文字化けについてのみコメントしましたが、地域名+指定キーワードに合致したタイトルだけを表示する方法については後ほど回答します。

    回答前に確認したい事があるのですが、更新情報を表示したい下層ページは何ページありますか?
  • id:yokosima_nhp
    一応、関東全域の市町村名と12のキーワードを組み合わせるので大体3000~4000ページぐらいの規模になる予定です。
    ですのでできればHTMLの下層ページごとにキーワードを設定できる形になっていると下層ページを作る際に使うエクセルのマクロソフトで調整しやすいのでHTML側のタグをいじれば表示内容が変わるような形だとありがたいと思います。
    お忙しとおころ申し訳ありませんがよろしくお願いします。
  • id:rouge_2008
    とりあえず回答しましたが、何か疑問点がありましたら回答の返信コメントでお願いします。
  • id:yokosima_nhp
    回答ありがとうございました。
    本当にコピペで貼り付けて、ロリポップのPHPバージョンの変更をするだけでうまく表示されました。
    タグも色々変えたり複数ある場合の表示状況も確認しましたのでまず問題ないと思います。
    あと、唯一気になったのでがhttp://longtail-japan.com/ihinseiri/1/で実際にタグ別に表示されているとは思いますがタイトルが左側目一杯から始まってもらえるとバランスがいいのですがそのような形にするにはどうすればいいのでしょうか?
    本質的な内容についてはこれ以上いじる必要もないと思いますのでこの部分の回答をいただけましたら質問終了させてもらいます。
  • id:rouge_2008
    無事に表示されたという事で良かったです。
    デザインを調整するにはCSSを変更します。
    サイドリンクエリア「<div class="side_link_area">」内に表示しているようですので、CSSファイルに以下の記述を追加してみてください。

    .side_link_area ul li {
    /* list-style: none; */ /* リストマーク(※各タイトル前のマーク)を表示したくない場合は、「list-style」の「/*」および「*/」を削除して有効にしてください。 */
    margin-left: -25px; /* 任意の数値に変更してください。リストマークを表示しない場合は「-37px」程度でも大丈夫そうです。 */
    }
  • id:rouge_2008
    PHPのバージョンを変更しなくても、.htaccessの方で対応するバージョンの記述を有効にしてもおそらく動作したと思います。

    <FilesMatch "^index\.html$">
    # For lolipop
    #AddHandler php5.2-script .html
    AddHandler php5.3-script .html
    #AddHandler php5.4-script .html
    </FilesMatch>

    ※上記はPHP 5.3用の記述を有効にしてあります。
    行頭に「#」がない行が有効な記述ですので、PHP 5.4を利用する場合は「AddHandler php5.3-script .html」の行頭に「#」を追加し、次行の「#AddHandler php5.4-script .html」の行頭の「#」を削除します。
  • id:yokosima_nhp
    色々とありがとうございました。
    こんなにいろいろ教えてもらえたのに今はポイント送信が出来なくなっているのですね・・・
    こちらとしては商業サイトのことなのでしっかりお礼がしたいのですが・・・

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません