東京で、ホームページをWordPressを使って作成しているけど、関数とかどーするのかとか忘れてしまうからちょとした内容をまとめてみました。
get_posts()だと総ページ数が取得できない
それなのでページネーションを使う場合は「new WP_Query()」を利用する
固定ページでページネーションしたい
page.phpなどページテンプレートでページネーションを作ることが可能
自作したページネーションでarchiveをページ移動したら、404ページが表示される(記事表示件数を変更している場合)
function.phpで記事表示件数を変更している場合は、「pre_get_posts」でhookをかけて記事一覧の件数を変更します。
function change_posts_per_page($query) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( $query->is_archive() ) { /* アーカイブページの時に表示件数を5件にセット */
$query->set( 'posts_per_page', 5;
}
}
add_action( 'pre_get_posts', 'change_posts_per_page' );
必ず日付を表示したい場合はthe_time()を使う
the_dateでは、「同じ日に複数の記事がある場合は、最初の記事とともに一度だけ出力される。」というこ動作仕様なので、毎回日付を表示したい場合は「the_time( ‘Y-m-d’ ); 」を利用する
投稿記事0件では、get_post_type()でPOST TYPEを取得することができない
そんな場合は「get_query_var( ‘post_type’ );」でPOST TYPEを取得する
taxonomy.phpで現在のタクソノミー名を取得したい
「get_query_var」を使って取得する。あとは「get_taxonomy( $taxonomy )」でタクソノミーの詳細情報を取得
$taxonomy = get_query_var('taxonomy');
var_dump($taxonomy);
taxonomy.phpで現在のターム名を取得したい
「get_query_var」もしくは「single_term_title()」(名前で取得。taxonomy.php)を使って取得する
get_query_var( 'term' )
var_dump(single_term_title())
WordPressのクエリで全件取り出したい時は「posts_per_page」を「-1」とする
例:
$arg = array(
'post_type'=>'page',
'posts_per_page' => -1,
);
$posts = get_posts($arg);
※用途的には、テーマ設定等で固定ページの全件の一覧を表示して設定を作る場合に利用
サムネイルの有無判定を「has_post_thumbnail」で行った場合で、記事にアクセス制限に気を付ける
サムネイル判定に「has_post_thumbnail」を利用しますが、記事自体にアクセス制限がついている場合は、アクセス制限が許可されていないアカウントに対しては、サムネイルが無いよって判断となる。
→非会員でもサムネイルだけ見せたい場合は「has_post_thumbnail」を使えないので「get_the_post_thumbnail」で判定するのが良いかと思う。
WordPressはセッションを利用していない
もしワードプレスでセッションを利用したい場合は、PHPのセッション関数で利用することは可能。
ホームページ作成に関するちょこっとまとめのページ更新は、随時ついか。
.htaccessが勝手に書き換えられる
設定を更新すると勝手に.htaccessが書き換えられることがあります。あれ、設定入れていたのに消えた?ってならないようにするためには「# BEGIN WordPress~# END WordPress」の中に記載しないようにします。
特定のページを検索結果から除外したい。プラグインで実施
「Search Exclude」っていうプラグインがあるからそれをインストールして、各ページで設定すればOK
カスタム投稿毎の検索結果を作成したい
function.phpに「search-カスタム投稿名」のテンプレートを利用するよという登録が必要。
あとは、「search-カスタム投稿名」テンプレートファイルを作成していく。
function.phpに以下を記述
add_filter('template_include','custom_search_template');
function custom_search_template($template){
if ( is_search() ){
$post_types = get_query_var('post_type');
foreach ( (array) $post_types as $post_type )
$templates[] = "search-{$post_type}.php";
$templates[] = 'search.php';
$template = get_query_template('search',$templates);
}
return $template;
}
検索フォームにhiddenでpost_typew追記する
<form id="search" method="get" action="<?php echo home_url( '/' ); ?>">
<input type="text" value="<?php the_search_query(); ?>" name="s">
<input type="hidden" value="post" name="post_type" id="post_type">
<input type="submit" value="Search">
</form>
ただこれで検索かどうか判定するとアーカイブっぽいので注意
URL的には、「/カスタム投稿名?s=」でもいけるみたい。「?s=」が無いとアーカイブが表示される