Sep
04
2009
0

Displaying Posts Using a Custom Select Query

19:46 pm

投稿記事の表示順序を自由自在に変えるテクニックです。
投稿記事はデフォルトでは、日付順に新しいものから古いものへ順に並ぶようになっていますが、例えばある特定カテゴリーの投稿記事を表示する場合は、逆に古いものから順に並ばせたいといった場合があります。
このサイトでも使っているWP-PostvVewsプラグインなども、記事の閲覧者数をカスタムフィールドに登録して大きい順に表示したりしています。
こういったテクニックについて、簡単に紹介します。

最も簡単なのは、それ用のプラグイン Custom Query String Reloaded を使うことです。これは、カスタムフィールドには対応していませんが、カテゴリー別に記事のソート順序などをかえることができるようになっています。

今回紹介する方法はより汎用性がある方法で、WordPress から SQL を発行して必要な記事を表示する方法です。MySQLの知識が必要になりますが、それを習得すれば、投稿記事をいかようにも抽出し、かつ並べ変えも可能になるでしょう。

スクリプトのコアな部分は以下のとおりです。
このケースの場合は、見て分かるように、投稿日が現時点より前、投稿タイプが’post’、公開されている、かつパスワード保護されていない投稿記事を10件、更新日の新しい順に並べ替えて配列$pageposts に取得しています。
それをsetup_postdata()で整形化しています。

<?php
 $querystr = "
    SELECT $wpdb->posts.*
    FROM $wpdb->posts
    WHERE post_date < '".current_time('mysql')."'
    AND post_type = 'post'
    AND post_status = 'publish'
    AND post_password = ''
    ORDER BY post_modified DESC LIMIT 10
 ";
 $pageposts = $wpdb->get_results($querystr, OBJECT);
?>
 <?php if ($pageposts): ?>
  <?php foreach ($pageposts as $post): ?>
    <?php setup_postdata($post); ?>
   <div>この間にコンテント表示のスクリプトを書く</div>
  <?php endforeach; ?>
  <?php else : ?>
 <?php endif; ?>

WordPressのデータベース構造とMySQLのSELECT文の文法について理解できれば、
$querystr を必要な条件で書き換えればOKです。

次の例は、WP-PostsViewsプラグインによるカスタムフィールドの値(閲覧数)で大きい順にソートして表示するケースです。前の例は、実はこのテクニックを使わなくてもWPの関数を使えばできるのですが、カスタムフィールドを使って投稿記事をソートするのは、この方法でしかできないと思います。
$querystr 以外のスクリプトは上の例とまったく同じです。

 $querystr = "
    SELECT DISTINCT $wpdb->posts.*, (meta_value+0) AS views
    FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON $wpdb->postmeta.post_id = $wpdb->posts.ID
    WHERE post_date < '".current_time('mysql')."'
    AND post_type = 'post'
    AND post_status = 'publish'
    AND meta_key = 'views'
    AND post_password = ''
    ORDER BY views DESC LIMIT 10
 ";

このケースを応用すれば、カテゴリーごとに閲覧数が多い順に投稿記事を表示したりすることもできますね。

参考文献はこれです。

May
06
2009
0

WP-PluginsUsed

16:14 pm

文字通り、今使っているプラグインを作成したページにリストアップしてくれるプラグインです。
使っているプラグインだけでなくインストールして使用してないプラグインまでリストアップしてくれます。
例えば、plugins という名で新しくページを作成し、所定のコードを書込めばOKです。

Written by hbirds in: WPカスタマイズ | Tags: ,
May
06
2009
0

PostGallery

13:23 pm

投稿記事から画像だけ抜き出して、ギャラリーにしてしまうPostGalleryを設置しました。
結構、苦労しました。
設置方法は以下の通りです。

1.新規にカテゴリー PostGallery を作ります。
  普通に管理画面から作るだけです。
  作り終わったらPostGalleryのカテゴリーIDを調べておきます。

2.使っているテーマのindex.phpやcategory.phpからcategory-ID.phpを作ります。
例えば、index.php を適当なエディタで開いて、カテゴリーIDが199だったとすると、
  category-199.phpという名前で保存します。

3.category-199.php を修正し保存します。
<?php the_content(); ?>を含む周辺のコード削除し、替わりに以下のコードを埋め込みます。この例では、div id=content 部分を置き換える例です。

    <div id="content">
     <?php $paged = get_query_var('paged'); ?>
     <?php query_posts("category_name=postgallery&posts_per_page=5&paged=$paged"); ?>
	<?php if (have_posts()) : ?>
		<?php while (have_posts()) : the_post(); ?>
        <div class="post" id="post-<?php the_ID(); ?>">
		  <div class="date"><span><?php the_time('M') ?></span> <?php the_time('d') ?></div>
		  <div class="title">
          <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a></h2>
           <div class="postdata">
            <span class="category"><?php the_category(', ') ?></span>
           </div>
		  </div>
          <div id="gallerypost">
           <?php $idno = get_the_id(); ?>
           <?php $codex = 'numberposts=-1&post_type=attachment&post_status=inherit&order=ASC&post_parent=' ?>
           <?php $codex = $codex .$idno ?>
           <?php $myposts = get_posts($codex); ?>
		   <?php if ($myposts): foreach($myposts as $post):setup_postdata($post); ?>
		    <a href="<?php the_permalink() ?>" rel="shadowbox"><?php echo wp_get_attachment_image('','thumbnail'); ?></a>
		   <?php endforeach; endif; ?>
          </div><!--/gallerypost -->
          <br/>
        </div><!--/post -->
		<?php endwhile; ?>
		<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>
	<?php else : ?>
		<h2>Not Found</h2>
		<p>Sorry, but you are looking for something that isn't here.</p>
	<?php endif; ?>
    </div><!--/content -->

4.画像が入ってる投稿のカテゴリーのpostgalleryにチェックを入れます。
  サイトのカテゴリーからpostgalleryをクリックするとチェックを入れた投稿内の画像が投稿ごとにサムネールで一覧表示されるようになります。

Written by hbirds in: WPカスタマイズ | Tags: , , ,
Apr
03
2009
0

Easy Contact

22:03 pm

Easy Contact は、メールでのお問い合わせフォームを簡単に作ってくれるプラグインです。
Cforms をこれまで使っていましたが、高機能過ぎて使いこなせないし、高機能な分だけいかにも重そうなので、シンプルで軽そうなのに切り替えてみました。
管理画面のプラグインからcontactで検索すると、類似の色々なプラグインがみつかりますが、Easy というネーミングに惹かれました。日本語化も面倒なファイル操作やアップロードをしなくても管理画面の設定から、とてもEasyにできます。
自分にとってはこれで十分かな。
サイトの高速化のためには、不要なプラグインをはずすことと合わせ、余計な機能を持った重いプラグインを軽いものに替えることも効果ありですね。

Written by hbirds in: WPカスタマイズ | Tags: , , ,
Mar
28
2009
0

My Runs ページの追加

8:33 am

Nike+ のブログパーツとカテゴリー「今日の練習」の最新投稿を一体化してprofeel ページの下に新しくMy Runs というページを作ってみました。
single.php をベースに、Nike+ のブログパーツを組み込んで、かつカテゴリー「今日の練習」の最新投稿3件のみを表示するように加工して、my_runs.phpとして保存し、My Runsページのテンプレートにする方法で対応しています。

Written by hbirds in: WPカスタマイズ | Tags: , ,
Mar
25
2009
0

Media Library Gallery

5:57 am

WordPress に投稿した記事の中の画像は、Media library に保存されますが、このプラグインは、それをGallery にしてしまうというものです。
投稿画像がすべて表示されるので、Gallery というよりも、どちらかと言うと、画像のアーカイブに近いのかもしれません。
このサイトでは、gallery ページのサブページにMedia Library Gallery ページを作り、一覧表示させています。
インストールは、通常のプラグインと同様です。
そして、表示させたいページや記事に
media-library-gallery nb=xx(実際は、コードの両側を[,]で囲います)
と書くだけです。xx は、3の倍数の15とか21とかが望ましいです。

なお、media-library-gallery.php には、エラーがあり、画像数が複数ページになる場合、各ページへのリンク切れという不具合を生じています。
対応は、以下のように、3箇所で / を追加してあげれば、正常に作動するようになります。

			$html_nav_bar = "<div class='mlg-navbar'><strong>" . __("Pages") . "</strong> : ";
			if($page > 1)
			{
				$html_nav_bar .= " <a href='" . get_permalink() ."/" . ($page - 1) . "/'>&laquo;</a> ";
			}
			for($i = 1; $i <= $max_page; $i++)
			{
				if($i == $page)
				{
					$html_nav_bar .= " <strong>$i</strong> ";
				}
				else
				{
					$html_nav_bar .= " <a href='" . get_permalink() . "/$i/'>$i</a> ";
				}
			}
			if($page < $max_page)
			{
				$html_nav_bar .= " <a href='" . get_permalink() ."/" . ($page + 1) . "/'>&raquo;</a> ";
			}
			$html_nav_bar .= "</div>";

また、原コードでは、画像タイトルへのリンクが張られていますが、うっとおしいのでリンクをはずすようにカスタマイズしています。

保護中の投稿記事内の画像もそのままでは公開されてしまいますので、以下のようにexcludeで除外したい画像ID(投稿IDではありません)を指定すると当該画像を除外できます。もう少しエレガントな方法もあるのでしょうが、とりあえず・・・。一番下のラインでリストアップする画像のタイプをJPG(またはJPEG)に絞っています。

		$posts = get_posts(array(
			"showposts"=>-1,
			"what_to_show"=>"posts",
			"exclude"=>"2399,2018,2013,1622,1371,1723",
			"post_status"=>"inherit",
			"post_type"=>"attachment",
			"orderby"=>"menu_order ASC, ID ASC",
			"post_mime_type"=>"image/jpeg,image/jpg"));
Mar
22
2009
0

アクセス解析

6:31 am

WordPress のアクセス解析ツールをいろいろ試してみました。
WordPress のバージョンは、現時点の最新版2.7.1です。
結果、自分としては、以下の詳細な解析ができる1.と管理画面からリアルタイムで解析ができる3.の組み合わせかな。

1.Google Analytics + Ultimate Google Analytics
 プラグインのUltimate Google Analytics を使うことにより、各ページに Google Analytics のコードを自動的に埋め込みます。
 そのうえで、Google Analytics サイトにログインして、アクセス解析をします。
 Google Analytics は非常に高機能で、他のアクセス解析プラグインを寄せ付けない機能を有しており、レポートをカスタマイズしたり、週間レポートをpdf等でメールしてくれたりもできます。ネックは前日までしか解析ができないこととWordPressの管理画面で解析結果を見られないことくらいです。他のプラグインと違い、自サーバーのデータベースも使わないので有力なソリューションになります。Google Analytics から解析結果をインポートして管理画面に表示するプラグインがあったらいいのに。

2.CounterizeII
 プラグインのネーミングからもアクセス解析というよりもアクセス集計といったイメージの方が強いような気がします。少し工夫すれば、集計結果をウィジェットに表示することも可能です。
 自分も最近までこのプラグインを使ってました。管理画面のアクセス解析グラフがいまいち洗練されてない印象がありますし、解析能力もちょっと不足気味です。

3.StatPress Reloaded
本家はStatPress。これをベースに機能アップを図ったものに、StatPress Reloaded や StatPressCN というのがあります。有効化して使用するのはこのうち一つにしないと有効化時点でfatalエラーを引き起こします。
CNは中国語版という感じです。管理画面のデザインが気に入らなかったので、自分はReloadedの方を使っています。ウィジェットでアクセス数等が簡単に表示できます。こちらのプラグインはリアルタイムなところがGoogle Analytics と違うところですが、Google Analytics ほど細かい分析はできませんし、データベースを消費します。ただし、保存期間について細かく設定できるので、むやみにデータベースが大きくなるのを防ぐこともできます。デフォルトでは、過去の分を全部保存する設定になっているので、適宜設定するのが望ましいと思います。

3.WordPress.com.satas
 Akismetと同様にAPIキーが有効化に際して必要になります。管理画面からいちいち、WordPress.comにログインしなきゃならないのがちょっと面倒です。解析項目は、StatPressとほぼ同じ。

4.サーバーのアクセス解析(AccessAnalyzer.com)
 解析項目は、StatPressとほぼ同じ。
 登録して発行されるタグを貼り付ける必要があります。これもいちいちサイトからパスワード等をいれなきゃならないのが面倒です。

Mar
20
2009
0

wp_register

5:26 am

ユーザーがログインしている場合には、管理画面へのリンクを出力するタグです。
先日、wp_loginout タグを使ってをヘッダーにログイン/ログアウトを表示するようにしましたが、よく考えると管理画面へのリンクを張った方が便利なので、wp_loginout を wp_register に置き換えました。

1.header.php に以下を挿入

<div class="wpregister"><?php wp_register(); ?></div>

2.style.css に以下を挿入

.wpregister{
	position: absolute;
	top: 120px;
	right: 20px;
	font: 12px Arial, Helvetica, sans-serif;
}
Written by hbirds in: WPカスタマイズ | Tags: , ,
Mar
17
2009
0

StatPress Widget

12:49 pm

StatPress Reloaded には、優秀なWidget がついてます。
このウィジェットに以下のリストから任意のものを選択して書いてあげれば、立派なカウンターが出来上がります。
counterize II より、いいかも知れません。

StatPress CN というプラグインを入れれば、以下のリストに不足している%yesterdayvisits% や お友達のvisitsも表示できるようですが、有効化しようとするとfatal error が発生したので諦めました。
考えてみれば、同じ機能を持つプラグインなのでStatPress と重複して有効化はできないということです。

* %thistotalvisits% – this page, total visits
* %since% – Date of the first hit
* %visits% – Today visits
* %totalvisits% – Total visits
* %os% – Operative system
* %browser% – Browser
* %ip% – IP address
* %visitorsonline% – Counts all online visitors
* %usersonline% – Counts logged online visitors
* %toppost% – The most viewed Post
* %topbrowser% – The most used Browser
* %topos% – The most used O.S.
* %thistotalpages% – Total pageviews so far
* %pagestoday% – Pageviews today
* %pagesyesterday% – Pageviews yesterday
* %latesthits%

たとえば、Wigetに以下のように書いてあげます。

<ul>
<li>Since            :%since%</li>
<li>Pageviews today :%pagestoday%</li>
<li>Total Page Views:%thistotalpages%</li>
<li>Visits today   :%visits%</li>
<li>Total visits     :%totalvisits%</li>
<li>Online visitors:%visitorsonline%</li>
</ul>

www.hbirds.net