rusica.net

雑記帳 : 333ページ目

子カテゴリのIDから親カテゴリの情報を取得する

$childCat = get_category($cat);
if ($childCat->parent) {
 $parentCat = get_category($cat->parent);
}

カテゴリーアーカイブ内での使用を想定して$catと書いたけど、$catに子カテゴリのIDを入れれば別にどこでも使える。あとはecho attribute_escape($parentCat->cat_name);とかやればカテゴリ名を出力できたり、色々。

var_dump($parentCat);とかやって$parentCatの中身を出力してみると何が格納されてるのか分かりやすいと思う。$parentCatは配列なのでechoしただけじゃ中身をみられないので注意。

head要素内に前後の記事へのリンク要素を生成

function meta_link() {
 if(is_single()) {
  global $wpdb, $wp_query;
  $post = $wp_query->post;
  $prev_post = get_previous_post();
  if($prev_post) {
   $prev_title = strip_tags(str_replace('"', '', $prev_post->post_title));
   echo '<link rel="prev" href="' . get_permalink($prev_post->ID) . '" title="' . $prev_title. '" />' . "\n";
  }
  $next_post = get_next_post();
  if($next_post) {
   $next_title = strip_tags(str_replace('"', '', $next_post->post_title));
   echo '<link rel="next" href="' . get_permalink($next_post->ID) . '" title="' . $next_title. '" />' . "\n";
  }
 }
}

テーマ内のfunctions.phpに記述しておいて、適当な箇所で呼び出して使う。

特定のIDを持つ記事を除外する方法

query_posts( array(‘post__not_in’ => array(投稿ID) ); とかなんとかやって配列で除外したい投稿 ID を入れれば OK。当然、$query_stringの中身も入れないと特定記事を除いた全記事が出力されてしまう。

たとえば、カテゴリアーカイブでIDが1と3の記事を除外する場合。

$current_paged = intval(get_query_var('paged'));
$query = array('cat' => $cat , 'post__not_in' => array(1,3) , 'paged' => $current_paged);
query_posts($query);

WP-Pagenaviを使わずにページナビゲーションを表示

吟遊詩人の戯言 » ページナビゲーション機能を改版してみたり」より。

function bmPageNavi() {
 global $wp_rewrite;
 global $wp_query;
 global $paged;
 $paginate_base = get_pagenum_link(1);
 if*1 {
     $paginate_format = '';
     $paginate_base = add_query_arg('paged', '%#%');
   } else {
     $paginate_format = (substr($paginate_base, -1 ,1) == '/' ? '' : '/') .
     user_trailingslashit('page/%#%/', 'paged');;
     $paginate_base .= '%_%';
   }
   $result = paginate_links( array(
     'base' => $paginate_base,
     'format' => $paginate_format,
     'total' => $wp_query->max_num_pages,
     'mid_size' => 5,
     'current' => ($paged ? $paged : 1),
   ));
   echo '<ul class="pageNav">'."\n\t<li>".$result."</li>\n</ul>\n";
 endif;
}

functions.phpに書いておいて使う。ul要素にするのが嫌だって場合は、最後のecho文を好みの出力形式に変えればいいと思う。

追記

WordPress 3.0.1 *2を利用していて、query_posts関数のパラメータposts_per_pageで1ページ当たりの記事数を指定したときに、ページ送りが上手くいかず、2ページ目以降がNot Foundになることがあった。詳しい条件は不明。そこまで調べる気もないし。

その場合はWordPressの管理画面から設定→表示設定の中にある「1ページに表示する最大投稿数」をposts_per_pageに指定した値よりも小さくすればいい。

  1. $wp_query->max_num_pages) > 1):    if (strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks([]
  2. ひょっとしたらもっと前から?[]

どうでもいい雑記その372

ここの記事を参考にformatting.phpを改変。ようやくまともにins要素とdel要素が使えるようになったよ。insとdelがブロック要素として扱えない *1 とかどうなってんだよ、まったく。

エルミナージュはとりあえずスタッフロールを拝んだとこ。隠しダンジョンとかはまだなので、遊び倒すまでにはまだまだ時間がかかりそう。

  1. 勝手にpで括られる[]