カスタム投稿の記事一覧でページネーションがおかしい場合の対処法

デフォルトのページ数は管理画面の設定>表示設定>1ページに表示する最大投稿数に入っている数字(デフォルトでは10)になっています。

目的のカスタム投稿の記事一覧で5記事ごとに表示したい場合
archive-{slug}.php


            $page_count =5;
            $offset = 0;
            $now_page = get_query_var('paged');

            //オフセット計算
            if ($now_page > 1) {
                $offset = ($page_count * $now_page) - $page_count;
            }

            $arg = array(
                'post_type' => 'カスタム投稿のスラッグ'
                'orderby' => 'post_date',
                'order' => 'DESC',
                'offset' => $offset,
     
            );

            $myposts = get_posts($arg);
…
…記事出力
…

//ページネーション
the_posts_pagination(array(
'prev_text'=>'«',
'next_text'=>'»',
	));


function.phpに以下のアクションを入れます


function change_posts_per_page($query) {
    /* 表示件数を5件にセット */
  if ( $query->is_post_type_archive('カスタム投稿のスラッグ') ) {
        $query->set( 'posts_per_page', '5' );
    }
}
add_action( 'pre_get_posts', 'change_posts_per_page' );

これでページネーションは期待通りに動きました。

複数のカスタム投稿の月間アーカイブ一覧を作りたい

wp_get_archivesではpost_typeがひとつしか設定できなかったのでfunction.phpにフィルタを追加することで解決出来ました。
getarchives_whereフィルタでSQL呼び出しの部分の呼び出し条件をINを使って複数設定して呼び出せばOKでした。

以下コードです。

/*アーカイブ取得*/
function add_all_posttype($where,$r){
if( is_post_type_archive('設定したいカスタム投稿のスラッグ')){

$types= ”'aaaa','bbbbb','ccccc','ddddd'”;
return str_replace(
"post_type = 'post' ",
"post_type IN(". $types.")" ,
$where
);
}else{
return $where;
}
}
add_filter('getarchives_where','add_all_posttype',10,2);

/*アーカイブリンク変更*/
function my_link($link_html){
if( is_post_type_archive('設定したいカスタム投稿のスラッグ')){
return str_replace(home_url('/'), home_url('/').'設定したいカスタム投稿のスラッグ/', $link_html);
}
else{
return $link_html;
}
}
add_filter("get_archives_link","my_link");

PDOで2回目以降のクエリが失敗するときの対処法

PDOのエラーメッセージを出すには
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

を入れると詳細なエラーが出るようです。
参考:最近PDOを使っていてハマったこと2つ。

今回$sth = $pdo->query($sql);が数カ所あったのですが、一回$sthをクリアしないとダメでした。
参考:このエラーの意味は? – PHP | 教えて!goo

$sth->closeCursor();だけでいけるかと思いましたが$sth = NULL;もいりました。

FileZillaからSublime Text にFTP設定を移行するプラグインSublimeZilla

こちらのプラグインが便利でしたのでご紹介いたします。(SFTPプラグインが入っていることが前提)
ment4list/SublimeZilla

Package ControlからSublimeZillaを探してインストールします。
インストールできたらコマンドパレットでfzと入力して「Import Fillezilla Server」を選択します。
すると画面下にFileZillaの設定ファイルへのパスが表示されるので
あっていればリターンキーを押して確定します。

FTPの設定がリスト表示されるので選択します。
このリストを再度出すショートカットはCtrl+Alt+z/Cmd+Alt+zになっているようです。
SFTPプラグイン用のsftp-config.jsonファイルが開かれるので設定項目を書き換えます。
今回はtype、upload_on_save、password、remote_pathなどを書き換えました。
設定ファイルをプロジェクトルートに保存したら設定完了です。

ファイルを保存したらすぐにアップロードできるようになりました。

Flash Professional CC 2014のHTML5 Canvas書き出ししたらAndroid2.xで表示されない現象

表題の件ですが、
プロジェクト名.js内を見たところ
this.addEventListener(“tick”,fl_RotateContinuously.bind(this));
という記述でひっかかっていたようです。
Function.bindはAndroid4.xで使用可能のようです。
Function.prototype.bind() – JavaScript | MDN

bindはES5から使えるようですのでライブラリを読み込み時にes5-shimをロードします。
es5-shim – cdnjs.com – the missing cdn for javascript and css

以下の様なコードで動作確認できました。





http://”プロジェクト名.js”

OSXのsafariでselenium(WebDriver)を使う

まず必要なものをダウンロードします。
JDKが入っていなければ入れてください。
Selenium Server のセクションからDownload version x.x.xをクリックしてjarファイルを落とします。

SafariDriverのセクションからLatest releaseをクリックしてSafari機能拡張を入れます。

FirefoxにSelenium IDEプラグインを入れて
オプション>設定>WebDriverと進み以下のようにします。

Selenium IDEをいったん閉じます。

Selenium Server を起動します。
ターミナルでSelenium Serverのある階層に移動し
java -jar ./selenium-server-standalone-x.xx.x.jar
といれます。
起動するとメッセージが流れます。

FirefoxのSelenium IDEに戻って、作成してあればテストスイートを読み込んでください。
テストケースを実行するとSafariのウィンドウが開かれてテストが始まります。

なお、テストのスピードがFastだと処理が追いつかないず止まってしまいますので少し遅く調整してください。
またWindows IE11でページの拡大が100でないとエラーで止まります。

Swift入門|Sprite Kitでアナログ時計を作成する


Apple、Appsレビューガイドラインに、Watchアプリで時計が主のアプリは承認されないことを追記 | Watch | Macお宝鑑定団 blog(羅針盤)
というニュースを横目に見ながらそろそろSwiftを触っておかなければということで時計アプリを作ってみることにしました。

ググったらアクションを作ってupdate内でアクションを適用というコードが多かったのですが、それだと時計の針が正確になりませんでした。
時間を正確に取るためNSDateをupdate内でいちいち宣言しています。何かいい方法はないでしょうか。。。

コードは以下の通りです。Xcodeは6.3 Swiftは1.2です。

import SpriteKit

class GameScene: SKScene {
let sHand=SKSpriteNode(color: UIColor.blackColor(), size: CGSizeMake(2, 180));
let mHand=SKSpriteNode(color: UIColor.blackColor(), size: CGSizeMake(5, 180));
let hHand=SKSpriteNode(color: UIColor.blackColor(), size: CGSizeMake(5, 140));

var last:CFTimeInterval!;
var lastM:CFTimeInterval!;
var lastH:CFTimeInterval!;
var myDate:NSDate!;
var myComponetns:NSDateComponents!;
var myCalendar: NSCalendar!;
var _sec:Double!;
var _min:Double!;
var _hour:Double!;

func DegreeToRadian(Degree:Double)->CGFloat{
return CGFloat(Degree)/CGFloat(180.0*M_1_PI)
}

override func didMoveToView(view: SKView) {
/* Setup your scene here */

myDate = NSDate();
//カレンダーを取得.
myCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!

//取得するコンポーネントを決める.
myComponetns = myCalendar.components(
NSCalendarUnit.CalendarUnitHour |
NSCalendarUnit.CalendarUnitMinute |
NSCalendarUnit.CalendarUnitSecond ,
fromDate: myDate)
_sec=Double(myComponetns.second * -6 );
_min=Double(myComponetns.minute * -6);
_hour=Double((myComponetns.hour-12) * -30);

//盤面
// ShapeNodeを作成.
let Circle = SKShapeNode(circleOfRadius: 190)

// ShapeNodeの座標を指定.
Circle.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame))

// ShapeNodeの塗りつぶしの色を指定.
Circle.fillColor = UIColor.whiteColor()
Circle.zPosition=CGFloat(-2.0)
// sceneにShapeNodeを追加.
self.addChild(Circle)
var cArr:[SKShapeNode]=[];
for i in 1...60 {

let memori=SKSpriteNode(color: UIColor.grayColor(), size: CGSizeMake(1, 14));
// ShapeNodeの座標を指定.
memori.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame))

memori.position=CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame))
memori.zPosition=CGFloat(2.0)
memori.anchorPoint = CGPointMake(0.5, -12);

memori.zRotation = DegreeToRadian(Double(-6 * i))
//cArr.append(Circle2);
self.addChild(memori)

}

for i in 1...12 {

let memori=SKSpriteNode(color: UIColor.blackColor(), size: CGSizeMake(5, 14));
// ShapeNodeの座標を指定.
memori.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame))

memori.position=CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame))
memori.zPosition=CGFloat(2.0)
memori.anchorPoint = CGPointMake(0.5, -12);

memori.zRotation = DegreeToRadian(Double(-30 * i))
//cArr.append(Circle2);
self.addChild(memori)

}

//四角形の描画
//秒
sHand.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));
sHand.anchorPoint = CGPointMake(0.5, 0);
sHand.zRotation=DegreeToRadian(_sec);
self.addChild(sHand)

//分
mHand.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));
mHand.anchorPoint = CGPointMake(0.5, 0);
mHand.zRotation=DegreeToRadian(_min+(6*(_sec/360)));
println(_min+(6*(_sec/360)))
self.addChild(mHand)

//時
hHand.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));
hHand.anchorPoint = CGPointMake(0.5, 0);
hHand.zRotation = DegreeToRadian(_hour + (30*(_min/360)));
println(_hour)
self.addChild(hHand)

}

override func touchesBegan(touches: Set, withEvent event: UIEvent) {
/* Called when a touch begins */
}

override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
myDate = NSDate();
myComponetns = myCalendar.components(
NSCalendarUnit.CalendarUnitHour |
NSCalendarUnit.CalendarUnitMinute |
NSCalendarUnit.CalendarUnitSecond ,
fromDate: myDate)

_sec=Double(myComponetns.second * -6 );
_min=Double(myComponetns.minute * -6);
_hour=Double((myComponetns.hour-12) * -30);

sHand.zRotation=DegreeToRadian(_sec)
mHand.zRotation=DegreeToRadian(_min+(6*(_sec/360)))
hHand.zRotation=DegreeToRadian(_hour + (30*(_min/360)));

}
}

CSSだけでシンプルなツリー状のメニューを作る for IE8+

調べてみるとIE9以上でしか動かないものがほとんどでしたが、今回IE8でも動くものを作成しました。
IE9やjQueryでスタイリングしなければならない理由はCSSのlast-childが使えないことによるものです。

このデモではlast-childを使わずツリーを表現することにチャレンジしました。

デモ:CSSだけでツリーのスタイル

縦の線はulタグの:beforeで、横の線はliタグの:beforeで表現しています。
サブメニュー開閉の動きはjQueryを使っていますが、スタイリングはCSSのみです。

以上参考になれば幸いです。

【wordpress】投稿のカテゴリー表示にCSSでクラス名を付ける

小テーマ等のfunction.phpに以下のコードを付けることでクラスを出力します。
下のコードではcategory-数字になります。



/**
* カテゴリにクラス名を付ける
* @param type $output
* @return string
*/
function add_category_class($output) {
if (!is_admin()) {
$category = get_the_category();
$out = $output;
foreach ($category as $key => $value) {
$cat_name = $value->name;
if (preg_match('/' . $cat_name . '/s', $out)) {
$out = preg_replace('/' . $cat_name . '/s', 'cat_ID . '">' . $cat_name . '', $out);
}
}
return $out;
} else {
return $output;
}
}
add_filter('the_category', 'add_category_class', 10, 1);

処理についてざっくり説明すると、$category_list = get_the_category_list( __( ‘ ‘, ‘テーマ名’ ) );で出力されているカテゴリ名を拾って文字列の置換をしています。
ポイントとしましては$outputが複数行の場合があるため正規表現でsをつけています。

カテゴリーのリストを出力する該当テンプレートファイルはcontent.php,content-single.phpに記述されていることが多いと思います。
簡単なカスタマイズの方法を探したのですが、見つけられませんでしたので泥臭い処理になりました。

console.tableでフォームの送信値をわかりやすく出力してみよう

以下の様なフォームを検査したいとします。

console.tableとjqueryのserializeArray()を組み合わせると簡単に値があっているか検査しやすくなります。
出力結果は以下のようになります。

サンプルはこちら

※注意点

  • console.tableが実装されてないブラウザではエラーが起きます。
  • 膨大なデータを出力するのは避けましょう。重いです。