アクセス数: | 今日: | 昨日:   記事数:996

HOMESITE MAPBOOKMARKTAG CLOUD

Tag:PHP

WordPress4/15に書いた『【WordPress】特定のカテゴリーを表示or非表示させる方法2』ですが、今更ながら問題が見つかりました。
それは、2ページ目以降が1ページ目と同じ内容になってる! って事です。
普段自分ではそこまでチェックしないんですが、昨日偶然発見しました。

特定のカテゴリーを非表示。
ってのが絡んでたみたいです。
解決方法は以下。

以前書いたコードは以下です。

index.php

<?php query_posts('cat=-N') ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>

『 N 』は非表示にしたいカテゴリーのIDです。
この1行目に以下のコードを付け足します。

index.php
<?php query_posts('cat=-N&paged='.$paged); ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>

約1ヵ月後の発見と随分経ってからですが、見つけて解決して良かったです。


WordPress › フォーラム
ページでページングを利用したい

Tag : ,

WordPress4/12に書いた記事の続きです。
以前のコードの書き方だと、非表示に設定したカテゴリーは確かに非表示になるんですが、トップページに表示されていないだけでカウントされています。

要は、トップページに表示する件数(10) ー 非表示しているカテゴリー(2) = 実際の表示件数(8) になり、少々面白くありません。
なもんで、またPHPファイルを弄ってみました。

以前書いていたコード

index.php

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php if (in_category('N')) continue; ?>

この3行目がそもそも間違いでした。
訂正コードは以下。

index.php
<?php query_posts('cat=-N') ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
『 N 』は非表示にしたいカテゴリーのIDです。
3行目を削除し、変わりに1行目を追加します。
『 N 』のカテゴリーIDの前に『 – (マイナス)』を付ければ、表示されないしカウントもされません。

前回の記事の追記2で書いた、サイドバーの最終コードは以下。

sidebar.php
<?php query_posts('cat=N&showposts=1'); ?>
<?php if (have_posts()) : ?>
  <?php while (have_posts()) : the_post(); ?>
    <?php if ( ! in_category('N')) continue; ?>
    <?php the_content(__('(more...)')); ?>
  <?php endwhile; ?>
<?php endif; ?>
『 N 』は非表示にしたいカテゴリーのIDです。

ちなみに、サイドバーにあるアーカイブ(最近の記事)に載せない方法は無い・・・のかな?
やり方はあるとは思うんですが、個人的にここだけには載せておきたいのでそのまま放置。


参考書は1冊でもあると、とても役に立ちます。

Tag : ,

WordPress今まで2chのまとめブログの一覧をちまちまローカルのHTMLファイルに書き、FTPでそれをアップ。
サイト上は iframe で表示させていました。
何だかそれも面倒になってきたので、このまとめ一覧もWordPressの記事の1つにしました。

しかしそうなると、一覧のページにその記事が載ってしまうのでそれを非表示、且つサイドに持っていった一覧を『2ch』と付けたカテゴリーだけ表示させる方法です。
詳細は以下から。

最初カテゴリーを非表示させる事が出来る『Advanced Category Excluder』というプラグインを試しましたが、何故だか上手くいきませんでした。
他のプラグインとバッティングしてるかもしれません。
なもんで、プラグインには頼らずPHPに直接コードを書き込みます。

※使用テーマはデフォルトです。

『index.php』の以下の部分にコードを追加します。

index.php

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php if (in_category('N')) continue; ?>
『 N 』は非表示にしたいカテゴリーのIDです。
カテゴリーページで調べれます。
これで指定したIDのカテゴリーは投稿一覧に表示されなくなります。

お次にサイドバーのカテゴリー一覧の非表示設定。
ちなみに私はウィジェットではなく、全てコード記入しています。

sidebar.php
<?php wp_list_categories('show_count=1&exclude=N'); ?>
『 N 』は非表示にしたいカテゴリーのIDです。
ちなみに『show_count=1』はカテゴリーに属する記事数表示です。

最後に特定のカテゴリー(2ch)だけを表示させるコードです。
私の場合『sidebar.php』に表示させていますが、勿論どこでも表示させる事は可能です。

sidebar.php
<?php if (have_posts()) : ?>
  <?php while (have_posts()) : the_post(); ?>
    <?php if ( ! in_category('N')) continue; ?>
    <?php the_content(__('(more...)')); ?>
  <?php endwhile; ?>
<?php endif; ?>
『 N 』は非表示にしたいカテゴリーのIDです。
これで指定したIDのカテゴリーだけを表示させる事が出来ます。


これだけで済むんだから、プラグイン入れる必要もないですね。

参考になったサイトです。
WPカスタマイズ講座
特定のカテゴリのみ除去して表示 or 特定のカテゴリのみ表示する方法


■追記 (4/13 2:15)
表示させるコードの書き方ですが、上記の方法だと記事数がWordPressの設定に左右されてしまいます。
新しい記事を1つだけ表示させたいので、以下のコードを追加しました。

sidebar.php
<?php query_posts('showposts=1'); ?>
<?php if (have_posts()) : ?>
  <?php while (have_posts()) : the_post(); ?>
    <?php if ( ! in_category('N')) continue; ?>
    <?php the_content(__('(more...)')); ?>
  <?php endwhile; ?>
<?php endif; ?>
『showposts=1』の数値を変えると、その分だけの記事数を表示させる事が出来ます。

■追記2 (4/13 3:40)
さらに改変。w
上記の方法だと、トータルで新しい記事1つだけしか取得しません。
なもんで、取得するカテゴリーを選択する必要があります。
追加したコードは以下。

sidebar.php
<?php query_posts('cat=N&showposts=1'); ?>
<?php if (have_posts()) : ?>
  <?php while (have_posts()) : the_post(); ?>
    <?php if ( ! in_category('N')) continue; ?>
    <?php the_content(__('(more...)')); ?>
  <?php endwhile; ?>
<?php endif; ?>
『cat=N』を追加してOKです。^^;
『 N 』は表示にしたいカテゴリーのIDです。

Tag :

ミックミクかがみ画像をランダムで表示させる方法は、JavaScriptを使えば簡単と言うか検索すれば山ほどヒットされます。
このサイトのヘッダーとサイドの『フォトギャラリー』もJavaScriptを使ってます。

この画像をランダムで表示させる方法をPHPで、しかも1つ1つに異なったリンクを貼る方法を何とか頑張って書いてみました。
(右上の画像で実装済み)

【WordPress】画像ループ表示を自動化にする方法【PHP】と同じ方法で、『画像はフォルダにアップするのみ。かつALTやURLは別ファイルで管理する』と言うのを前提で書いています。
要はループさせた時と同じ方法。

表示させるPHP (私の場合はsidebar.php)

<?php
  include("style.php");
  $handle = opendir("img/");

  while ($fl = readdir($handle)) {
    if ($fl == "." || $fl == ".." || !preg_match("/(\.)(jpg|jpeg|gif|png)/i", $fl)) continue;
    $fileAry[] = $fl;
  }

  closedir($handle);

  $cnt = count($fileAry);
  $file_name = rand(1, $cnt);
  $alt = $fl_ary[$img_no];
  $url = $fl_url[$img_no];

  echo '<a href="'.$url.'" title="'.$alt.'" target="_blank"><img src="http://kome-suki.net/img/'.$file_name.'.jpg" alt="'.$alt.'"></a>';
?>

別ファイルの『style.php』をincludeで読み込む。
opendirでimgフォルダの中の数を調べます。
上記はjpg、jpeg、gif、png以外はカウントしません。
全部カウントしちゃうと『Thumbs.db』とかももカウントされちゃいますしね。
後は変数などを指定して、別ファイルで書き込みます。

style.php
<?php
$fl_ary = array(
  "1" => "これは1の画像です。",  //1の画像に対するタイトル
  "2" => "これは2の画像です。",  //2の画像に対するタイトル
  "3" => "これは3の画像です。"  //3の画像に対するタイトル
);

$fl_url = array(
  "1" => "http://www.google.co.jp/",  //1の画像に対するURL
  "2" => "http://www.yahoo.co.jp/",  //2の画像に対するURL
  "3" => "http://www.livedoor.com/"  //3の画像に対するURL
);
?>

【WordPress】画像ループ表示を自動化にする方法【PHP】と同時に使う場合、『$』で始まる変数は変更が必要です。
適当でOKです。w

追記:2009/2/6
いらないコードがあった為、修正しました。

Tag :

拾いもの画像右サイドバーとコンテンツ内にある『拾いもの画像』。
今まではちまちま手作業で追加・更新してたんですが、そろそろ面倒になってきたんでPHPで自動で表示させるようにしました。

そんな自動ループ表示方法は以下から。

表示する画像とサムネだけは自分で用意します。
『img』フォルダに全て入れる。
表示画像: 1.jpg、2.jpg、3.gif、4.png、5.jpg・・・と連番にする。
サムネイル画像: 1_s.jpg、2_s.jpg、3_s.jpg、4_s.jpg、5_s.jpgと、元の画像と同じ番号にして『_s』を付ける。

まずはサイドバーの表示コードから。

sidebar.php

<?php
  include( "style.php" );
  $handle = opendir( "img/" );

  while ( $fl = readdir($handle) ) {
    if ( $fl == "." || $fl == ".." || !preg_match("/(.)(jpg|jpeg|gif|png)/i", $fl) ) continue;
    $fileAry[] = $fl;
  }

  closedir( $handle );
  $cnt = count($fileAry) / 2;

  for ( $i = $cnt; $i > $cnt-10; $i-- ) {
    $file_name = $i;
    $code = "pic_".$i;
    $alt = $ary[$code];

    echo '<a href="http://kome-suki.net/img/'.$file_name.'" rel="lytebox[side_vacation]" title="'.$alt.'"><img src="http://kome-suki.net/img/'.$file_name.'_s" alt="'.$alt.'"></a>';
  }
?>
まずはincludeで『style.php』を読み込む。
(このファイルについては後で記述してます。)

countで『/ 2』(÷2)にしてるのは、同じフォルダ内にファイルを全て入れているから。

新しい画像順に10個だけ表示させたかったので、『for ( $i = $cnt; $i > $cnt-10; $i– ) {』にしていますが、全ての画像を表示させたい場合は『for ( $i = $cnt; $i > 0; $i– ) {』でいけます。
逆に古い順(番号の若い順)にしたい場合は、『for ( $i = 0; $i < $cnt; $i++ ) {』です。

$codeで番号の頭に『pic_』をつけています。
画像にtitleとaltを付けたかったので、別ファイルにて入力しています。
後はechoで出力して終わり。

画像ファイル形式はjpgだったりgifだったりpngだったりするので、拡張子は付けていません。
付けなくても表示されるんですね。
なもんで、これでOKにしました。

『rel="lytebox[side_vacation]"』はLightbox表示させる為のコードです。
必要なければ削除してください。

以下は先に書いていた『style.php』。
ファイルはテーマ内のsidebar.phpと同じ階層に置いています。

style.php (ファイル名は任意)
<?php
  $ary = array(
    "pic_1" => "あいうえお",
    "pic_2" => "かきくけこ",
    "pic_3" => "さしすせそ"
  );
?>

これで1.jpgのtitle、altに『あいうえお』、2.jpgに『かきくけこ』、3.jpgに『さしすせそ』が表示されます。

後はimgフォルダ内にポンポン画像を入れてUPしていくだけで、新しい画像を勝手に表示してくれます。

要は何がしたかったかと言うと・・・、
(1) 画像をUPするだけで、自動で新しい画像を表示して欲しかった。
(2) title、altを別ファイルで管理(入力)したかった。
  ⇒ sidebar.phpは触りたくなかった。

次に、ページ内のコード。
基本的には変わりありませんが、サイドバーと違ってincludeで読み込む時の記述、全ての画像を表示させると、ちょっと違います。
sidebar.phpと違う箇所は赤字で表記しています。

ページ内
<?php
  include( "wp-content/themes/default/style.php" );
  $handle = opendir( "img/" );

  while ( $fl = readdir($handle) ) {
    if ( $fl == "." || $fl == ".." || !preg_match("/(\.)(jpg|jpeg|gif|png)/i", $fl) ) continue;
    $fileAry[] = $fl;
  }

  closedir( $handle );
  $cnt = count($fileAry) / 2;

  for ( $i = $cnt; $i > 0; $i-- ) {
    $file_name = $i;
    $code = "pic_".$i;
    $alt = $ary[$code];

    echo '<a href="http://kome-suki.net/img/'.$file_name.'" rel="lytebox[picture_vacation]" title="'.$alt.'"><img src="http://kome-suki.net/img/'.$file_name.'_s'.$fl.'" alt="'.$alt.'"></a>';
  }
?>

使わない場合は良いけど、Lightboxのrelをサイドバーと別コードにしなければいけない点。
同じだとページ内+サイド部の画像数になってしまいます。

私のやりたい事は出来ました。
これで忌まわしい(?)手作業から開放されます。(´ω`)

最後に、PHP全く分からない私にコードを教えてくれた兄に感謝。
※私が考えたコードじゃないんですねー。www

Tag : , ,

【WordPress】コメントURLを「_blank」にする方法

『【WordPress】コメントURLを「_blank」にする方法』をはてなブックマーク

コメントWordPressのフォーラムで、エントリー内のコメントされた際、リンクを別ウィンドウ(タブ)で開きたいと言うのがありまして、それの回答をしたら「自分のリンクは同窓、他人のリンクは別窓が良い」って言われたんで、頑張ってやってみました。

『wp-includes/comment-template.php』を開きます。
145行目以降を、以下の様に変更。(2.7 日本語版の場合)

if ( empty( $url ) || 'http://' == $url )
  $return = $author;
else
  $return = "<a href='$url' rel='external nofollow' class='url'>$author</a>";
return apply_filters('get_comment_author_link', $return);
 ↓
if ( empty( $url ) || 'http://' == $url )
  $return = $author;
else
  if ($url == '***')
   $return = "<a href='$url' rel='external nofollow' class='url'>$author</a>";
  else
   $return = "<a href='$url' rel='external nofollow' class='url' target='_blank'>$author</a>";
  return apply_filters('get_comment_author_link', $return);
要するに、if文の入れ子です。
元々あるif文の中に、もし(if)このURLだったらターゲット指定なし。
それ以外(else)だったらターゲット指定あり。
ってな具合にしてます。
***は該当するURLを入力。
私の場合、『$url == ‘http://kome-suki.net/’』になります。

めちゃくちゃ簡単に記述したけど、間違ってたらどーしよう…。w

Tag :