Quantcast
Channel: hijiriworld Web
Viewing all articles
Browse latest Browse all 46

Intuitive Custom Post Order ver.2.1.0 リリースノート

$
0
0

Intuitive Custom Post Order ver.2.1.0 をリリースしました。

WordPress > Intuitive Custom Post Order / WordPress Plugins

主に以下2点の問題点がフィックスされています。

1. バックエンド処理の高速化
2. ユーザ指定のクエリの優先

バックエンド処理の高速化

いままでは admin_init のフックしてリフレッシュ処理を走らせていました。
リフレッシュ処理とは、並び替えが有効になっている全オブジェクト(投稿タイプ)の menu_order を再構築する処理のことを指します。
admin_init にフックしているため、管理画面のどのページに遷移してもこの処理が走ることになり、レコード数が増えれば増えるほど、処理がバカ重くなっていました。最悪の場合サーバエラーになる。。

この致命的な問題を改善しました。

line 180

$result = $wpdb->get_results( "SELECT count(*) as cnt, max(menu_order) as max, min(menu_order) as min FROM $wpdb->posts WHERE post_type = '".$object."' AND post_status IN ('publish', 'pending', 'draft', 'private', 'future')" );
if ( count( $result ) > 0 && $result[0]->cnt == $result[0]->max && $result[0]->min != 0 ) {
	continue;
}

menu_order の最大値とレコード数が一致して、かつ、最小値が 0 じゃない時はリフレッシュ処理がスキップされます。

つまり、リフレッシュ処理が走るのは、新規に記事が投稿された時、記事が削除された時、そのオブジェクトだけ、に限定され、バックエンドの処理を劇的に改善しました。

ユーザ指定のクエリの優先

ディフォルトの並び順は orderby=date, order=DESC となりますが、有効化されたオブジェクトは orderby=menu_order, order=ASC に自動的に並び変えられます。

ただし、特にサブクエリを生成する時、テンプレート側で明示的に orderby と order パラメーターを指定したい場合があります。
その場合は、ユーザ指定のクエリを優先する仕様にしました。

いままでもそうしてたつもりなのですが、多くの方からのレポートをまとめたところ、パラメーターの指定方法に問題があった、というか、すべての指定方法に対応していなかった、といえます。

メインクエリを改変する時、サブクエリを生成する時、ユーザ指定のパラメーター指定方法には2種類の記述があります。

/* 配列型 */

$args = array(
	'orderby' => 'date',
	'order' => 'DESC',
);

/* 連結型 */

$args = 'orderby=date&order=DESC';

いままでは配列型のみサポートしていましたが、今回のアップデートにより、連結型でも正常に動作するようにしました。
クエリの発行方法は、以下4パターンで検証済みとなります。

/* default main query */

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
	<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php endwhile; endif; ?>
		
/* query_posts */
		
<?php query_posts( $args ); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
	<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php endwhile; endif; ?>
		
/* WP_Query */
		
<?php $query = new WP_Query( $args ) ?>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
	<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php endwhile; wp_reset_postdata(); ?>
		
/* get_posts */
		
<?php $hoges = get_posts( $args ); ?>
		
<?php foreach( $hoges as $post ) : setup_postdata( $post ); ?>
	<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php endforeach; wp_reset_postdata(); ?>

その他のバグフィックス

メディアファイルの並び順への影響

管理画面のメディアファイル( post_type=attachment )の並び順がおかしくなる不具合がありました。
これは menu_order がすべて 0 のオブジェクトに対して order=ASC のみが効いていたことで、タイトルをキーに昇順表示されてしまうのが原因でした。
改修し、メディアファイルの並び順には一切影響しなくしました。

マルチサイトでの Warning 対応

マルチサイトで新規サイトを作成した場合、初回だけ Warning 警告が表示されていました。
動作には影響しませんが、警告が表示されないように改修しました。

初回有効化オブジェクトの並び順の整合性

すでに存在するオブジェクトに対して、初回に並び替えを有効化すると、それまでの並び順がおかしくなる不具合がありました。
これは menu_order がすべて 0 のオブジェクトに対して order=ASC のみが効いていたことで、タイトルをキーに昇順表示されてしまうのが原因でした。
これも改修し、初回に有効化されたオブジェクトの場合、ディフォルトの orderby=post_date, order=DESC に従って menu_order を振り分ける処理にしました。


Viewing all articles
Browse latest Browse all 46

Trending Articles