ナビゲーションメニューのカレント表示

テンプレートタグ | Published 2011/07/10 at 6:47 PM

現在ページをメニューで色の変更などをして、現在位置を明確にする方法として
jQueryを使う方法があります。

他にもやり方があるので、覚書がてら紹介

1番目の紹介としては、
WordPressで、カスタムメニュー機能や、テンプレートタグの一覧機能を使って
WordPressで吐き出すCSSを使う方法

WordPressでは、表示しているページ、投稿に関連づいて、下記のCSSを吐き出します。

.current-menu-item
.current-page-ancestor
.current-category-ancestor
.current-menu-parent
.current-menu-ancestor
.current-page-parent
.current-menu-item

WordPressにCSSを吐き出してもらわずに、テーマでシンプルにメニューを作る場合もありますよね。
※自動で書き出されるCSSが・・・あまりにも多くて嫌というとき

テーマのための関数を作り、現在表示のURLを取得して、classを書き出す
jQueryを使う方法と仕組みが同じですが、PHP版のやり方

※パーマリンク設定がされているのが前提です。

//テーマのための関数
function currentPage($chkpage=''){
 $chk=false;

	if (is_home() && $chkpage=='home')  $chk=true;
	if (is_page('about') && $chkpage=='about')  $chk=true;
	if (!is_home() && in_category('blog') && $chkpage=='blog')  $chk=true;

	if ( $chk) echo 'class="currentPage"';
}
//メニューテンプレート
    <div id="navigation">
      <ul id="nav">
        <li><a href="<?php bloginfo( 'url' ); ?>" title="ホーム" <?php currentPage('home'); ?>>Home</a></li>
        <li><a href="<?php bloginfo( 'url' ); ?>/about" title="WPBPとは" <?php currentPage('about'); ?>>About</a></li>
        <li><a href="/community" title="コミュニティ" >Community</a></li>
        <li><a href="<?php bloginfo( 'url' ); ?>/blog" title="管理人日記" <?php currentPage('blog'); ?>>Blog</a></li>
        <li><a href="/links" title="リンク集" >Links</a></li>
      </ul>
    </div>
  </div>

指定したカテゴリのサブカテゴリを取得し、さらに投稿を読む

テンプレートタグ | Published 2011/07/07 at 9:06 PM

たとえば、「パン」というカテゴリがあり、連なるサブカテゴリに「菓子」「フランス」「イギリス」なんてあったとする
各、サブカテゴリに投稿があり、サブカテゴリ順に投稿があり、下記みたいにだしたいときの例

菓子(サブカテゴリ)
 クリーム(投稿タイトル)
 ジャム(投稿タイトル)
フランス(サブカテゴリ)
 バゲット(投稿タイトル)
 バタール(投稿タイトル)
イギリス(サブカテゴリ)
 バゲット(投稿タイトル)
 バタール(投稿タイトル)

1つ、テーマのための関数を作っています。

http://wpbp.net/community/templateusage/20110705837/

もちろん、合わせ技でコード書くのもOK

<?php
//指定したカテゴリに属するサブカテゴリ情報を取得 例)花のカテゴリID=5
$catArray =get_categories('child_of=5');

//サブカテゴリ情報を1つづつとりだし
foreach($catArray as $cat){
?>
*********
<h2><?php echo $cat->cat_name;?></h2>
<?php
//スラグをつかって、サブカテゴリに属する投稿を取得
    $box_posts=get_post_lists(-1,$cat->slug);
	//投稿のタイトルを表示
	foreach($box_posts as $post){
?>
	<h3><?php echo $post->post_title;?></h3>
	<?php } ?>
<?php } ?>

カテゴリ説明を入力していれば、表示することもできますね。

続きを読むでリンクをつける

テンプレートタグ | Published 2011/07/07 at 9:27 AM

一覧などで、記事内容を全部表示させずに、抜粋を表示
・・・が表示されるときに、続きを読ませるリンクを作る

以前は、別でリンクを用意するしかなかったのですが、自分で加工できるようになりました。

function new_excerpt_more($post) {
	return '&nbsp;・・・<br /><a href="'. get_permalink($post->ID) . '">' . '全部読む' . '</a>';
}
add_filter('excerpt_more', 'new_excerpt_more');

上記、よくばった例ですが
記事の終わりには、・・・をつけて
改行して、「全部読む」のリンク

いろいろできそうですね。

特定のページの内容をさくっと読み込む

テンプレートタグ | Published 2011/07/07 at 7:23 AM

テーマを作成している時、特定のページを指定して、任意の場所に表示したいとき
くるくる回さなくても、さくっと読み込んで表示することができます。

$post = get_page_by_title ( 'オーダー出来るアート' );
echo apply_filters ( 'the_content', $post -> post_content );
?>

「オーダー出来るアート」というタイトルを指定して、持つ情報を表示
apply_filters を利用しないと、いつもの投稿記事表示のように、きれいにしてくれないみたいです。

WordPressにて 特定ページの本文をトップページに表示する方法

任意サイズの画像を取得

テンプレートタグ | Published 2011/07/06 at 8:28 AM

画像だけ読み込んで一覧表示したい時って、よくありますよね。
サムネイル、中サイズや、大サイズ 画像のサイズはいろいろあるけど、サイズ指定したいって時

wp_get_attachment_image_src関数の、2番目に
‘thumbnail’、’medium’、’none’ を指定することができます。

<?php
$arg = array (
  'post_type' => 'attachment',
 'numberposts' => 30,
 'orderby' => 'rand'
   );
$searched_posts = get_posts( $arg );
?>
<ul>
<?php
foreach ($searched_posts as $attachment) {
$image_attributes = wp_get_attachment_image_src( $attachment->ID,'medium');
?>
   <li><?php echo $image_attributes[0]; ?></li>
<?php } ?>
</ul>

$arg は下記のように書いてもokです。
‘post_type=attachment&numberposts=30&orderby=rand’

orderby=rand はランダム取得です。
上記のパラメタだと、ランダムにサムネイルを30件取得

下記、わかりやすいページありました。

http://elearn.jp/wpman/function/wp_get_attachment_image_src.html

いつもの投稿タグを使いたい

テンプレートタグ | Published 2011/07/05 at 5:50 PM

自分で独自の読み込みをしたとき、いつもの投稿タグが使えたらいいのに・・って思うことがよくあります。

投稿には書いたけど、抜粋に書いてない
一覧などで、抜粋表示したいのだけど、独自の読み込みだと、抜粋に文字を入力していなければからっぽ
投稿をそのまま使えば、リンクや画像なども、文字切り出しや、リンクや画像は除去なんて自分でやるのも面倒

そんな時、setup_postdata()関数を使うと便利です。

$box_postsという配列に、独自読み込みした投稿データが入っている時の例です。

<p><?php setup_postdata($box_posts[0]); the_excerpt();?></p>

カテゴリ別に投稿を読みだす時

テンプレートタグ | Published 2011/07/05 at 4:19 PM

WordPressでサイトを作るとき、特定のカテゴリで指定件数だけ取得したい
テンプレートによって、装飾のHTMLタグは違う・・・
なんて事、よくありませんか?

私は、テーマのための関数に、下記のような汎用で使える関数を作り

function get_post_lists($num=10,$catslug=null){
   $myposts = get_posts('numberposts='.$num.'&category_name='.$catslug);
   return $myposts;
}

表示したところで、呼び出します。

<?php $box_posts=get_post_lists(3);?>

カテゴリを指定するなら、スラッグで

<?php $box_posts=get_post_lists(3,'news');?>

くるくる回して使ったり、位置を指定して使ったり、おこのみに。

ダッシュボードの表示項目をカスタマイズ

テンプレートタグ | Published 2011/01/30 at 9:39 PM

ダッシュボードは、表示オプションで設定できるのですが、
クライアントに渡すサイトだと、やっぱり、沢山の情報量が気になってくる

テーマの関数にfunctionを追加すると、自由に表示項目を設定できる

参考ページ
http://www.kys-lab.com/ueda/wpblog/page/2/
http://www.kys-lab.com/ueda/wpblog/wordpress/wordpress%E3%81%A7%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5%E3%83%9C%E3%83%BC%E3%83%89%E3%82%92%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA/193/
http://ja.forums.wordpress.org/topic/3653
http://16bit-design.com/?p=1

http://blog.creamu.com/mt/2010/06/wordpressfunctionsphp25.html

ユーザ情報をメタ情報で並べ替える方法

テンプレートタグ | Published 2011/01/19 at 9:50 PM

当コミュニティサイトのトップページで使っている方法ですが

http://wpbp.net/pgdesign/

投稿者一覧 (実際には登録されているユーザさんたちです。)を、最新の登録3件表示しています。

ユーザのメタ情報は、連想配列というのに入ってくるので、指定のメタ情報をキーとしてユーザ情報を入れた配列を作りなおして、整列させます。


$userlist=get_users_of_blog(); //ユーザリストの取得
$idlist= array();  // ソートするためのキー配列の準備
foreach ($userlist as $user) {
 $idlist[get_the_author_meta( 'ID', $user-&gt;ID)]=  $user;
}

krsort($idlist);      // IDで降順
// ソートした順番で$idlistから取りだす
$wi=0;
foreach ( $idlist as $user) {

//ユーザ情報が使えます。

}

このサイトでの利用方法は、最新のユーザ3件を表示しているので、3件取得したらループを脱出してます。
使っている部分のHTMLソースを表示して、動きを確認してくださいね

<?php
$userlist=get_users_of_blog(); //ユーザ情報の取得
$idlist= array();  // idをキーとした配列を準備
foreach ($userlist as $user) {
$idlist[get_the_author_meta( 'ID', $user->ID)]=  $user;
}
//
krsort($idlist);      // キーの順番(降)でソートする
// ソートした順番で$idlistから取りだす
$wi=0;
foreach ( $idlist as $user) {
if($wi>=3) break;
if (get_the_author_meta( 'user_level', $user->ID)<>10){
?>
<!--  登録ユーザ情報 -->
<p><?php echo get_avatar($user->ID,50); ?>
<img src="<?php bloginfo( 'template_url' ); ?>/img/icon.gif" alt="" border="0" /> <a href="<?php echo get_author_posts_url( $user->ID); ?>"><?php the_author_meta( 'display_name', $user->ID); ?></a>
<br />
<?php
if (get_the_author_meta( 'program', $user->ID)<>'' || get_the_author_meta( 'design', $user->ID)<>'' ){
?>
<span>(<?php the_author_meta( 'program', $user->ID); ?><?php the_author_meta( 'design', $user->ID); ?>)</span>
<br />
<?php
} ?>

<?php the_author_meta( 'user_description', $user->ID); ?><br clear="left" />
</p>

<p><img src="<?php bloginfo( 'template_url' ); ?>/img/line.gif" alt="" border="0" /></p>

<!--  登録ユーザ情報 おわり -->
<?php
$wi++;
 }} ?>

現在のブログが親ブログか、どの子ブログかを判定する

テンプレートタグ | Published 2010/12/18 at 9:55 AM

親ブログの情報を持つグローバル変数


<?php

global  $current_site;

?>

print_r関数で中身を見ると下記の情報が取得されている
  [id] => 1
  [domain] => wpbp.net
  [path] => /pgdesign/
  [blog_id] => 1
  [cookie_domain] => wpbp.net
  [site_name] => サイト プログラマとデザイナー

現在の子ブログの情報を持つグローバル変数


<?php

global $current_blog;

?>
print_r関数で中身を見ると下記の情報が取得されている

    [blog_id] => 4
    [site_id] => 1
    [domain] => wpbp.net
    [path] => /pgdesign/tagplugin/
    [registered] => 2010-12-03 14:46:40
    [last_updated] => 2010-12-18 00:55:52
    [public] => 1
    [archived] => 0
    [mature] => 0
    [spam] => 0
    [deleted] => 0
    [lang_id] => 0

« Older Entries