WordPress スニペット その2
この前のよりは少し使用頻度は低いもの
◯PC / スマホ 振り分け
→ functions.php
<?php
function detect_sp() {
$agent = @$_SERVER['HTTP_USER_AGENT'];
if (strpos($agent, "iPhone")) {
return true;
} else if (strpos($agent, "iPod")) {
return true;
} else if (strpos($agent, "Android")) {
if (strpos($agent, "Mobile") !== false) {
return true;
}
}
return false;
}
?>
→ テンプレートファイル
<?php if ( detect_sp() ) : ?>
<!-- スマホ用の記述 -->
<?php else : ?>
<!-- PC用の記述 -->
<?php endif; ?>
◯カスタム投稿タイプ/タクソノミー作成
→ functions.php
<?php
// カスタム投稿タイプ 作成
register_post_type( 'POST_TYPE_NAME',
array(
'labels' => array(
'name' => __( 'POST_TYPE_NAMEの名前' ),
'singular_name' => __( 'POST_TYPE_NAMEの名前' )
),
'public' => true,
'menu_position' => 5,
'supports' => array('title','editor','thumbnail',
'custom-fields','excerpt','author','trackbacks',
'comments','revisions','page-attributes'),
'has_archive' => true
)
);
// タクソノミー 作成
register_taxonomy(
'TAXONOMY_NAME_category',
'POST_TYPE_NAME',
array(
'hierarchical' => true,
'update_count_callback' => '_update_post_term_count',
'label' => 'TAXONOMY_NAMEのラベル',
'singular_label' => 'TAXONOMY_NAMEのラベル',
'rewrite' => array(
'slug' => 'TAXONOMY_NAME'
),
'public' => true,
'show_ui' => true
)
);
?>
◯ウィジェット作成/出力
→ functions.php
<?php
register_sidebar( array(
'name' => 'ウィジェット名',
'id' => 'my_widget',
'description' => 'ウィジェットの説明文が入ります。',
'before_widget' => '',
'after_widget' => '',
'before_title' => '',
'after_title' => ''
) );
?>
→ テンプレートファイル
<?php if ( is_active_sidebar( 'my_widget' ) ) : ?>
<!-- ウィジェットに入力項目がある場合 -->
<?php dynamic_sidebar( 'my_widget'); ?>
<?php else : ?>
<!-- ウィジェットに入力項目がない場合 -->
<?php endif; ?>
◯サイト情報の出力
→ テンプレートファイル
<!-- サイトURLを出力 -->
<?php echo site_url(); ?>
<!-- サイト説明文を出力 -->
<?php bloginfo('description'); ?>
<!-- テンプレートURLを出力 -->
<?php bloginfo('template_url'); ?>
◯カスタム投稿タイプ/タクソノミー/タームの出力
→ テンプレートファイル
<!-- カスタム投稿タイプ名を出力 -->
<?php
$postType = get_query_var( 'post_type' );
$postTypeName = esc_html( get_post_type_object( $postType )->label );
?>
<!-- ターム名、タームスラッグを出力(index.phpなど) -->
<?php
$terms = get_the_terms($post->ID,array('POST_TYPE_NAME'));
if ( $terms && ! is_wp_error( $terms ) ) {
foreach ( $terms as $term ) {
$termName = $term->name;
$termSlug = $term->slug;
}
} else {
// タームが見つからない場合
$termName = '-';
$termSlug = '-';
}
?>
<!-- ターム名、タームスラッグを出力(taxonomy.php) -->
<?php
$taxonomy = get_query_var('taxonomy');
$term = get_term_by('slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
$termName = $term->name;
$termSlug = $term->slug;
?>
◯ターム一覧の出力
→ テンプレートファイル
<!-- ターム一覧を出力 -->
<?php
$taxonomy = 'TAXONOMY_NAME';
$args = array(
'hide_empty' => true
);
$terms = get_terms( $taxonomy , $args );
if ( count( $terms ) != 0 ) {
echo '<ul>';
foreach ( $terms as $term ) {
$term = sanitize_term( $term, $taxonomy );
$term_link = get_term_link( $term, $taxonomy );
if ( is_wp_error( $term_link ) ) {
continue;
}
echo '<li><a href="' . esc_url( $term_link ) . '">' . $term->name . '(' . $term->count . ')</a></li>';
}
echo '</ul>';
}
?>
◯is_main_query
→ functions.php
<?php
function mont_posts_per_page( $wp_query ) {
if (!is_admin()) {
if ( $wp_query->is_main_query() && $wp_query-> is_front_page() ) {
$wp_query->set( 'post_type', array('POST_TYPE_NAME') );
$wp_query->set( 'posts_per_page', 15 );
}
}
}
add_action( 'pre_get_posts', 'mont_posts_per_page' );
?>
→ テンプレートファイル
<?php if($wp_query -> have_posts()): ?>
<?php while($wp_query -> have_posts()): $wp_query->the_post();?>
<?php the_permalink(); ?>
<?php the_title(); ?>
<?php endwhile; ?>
<?php endif; ?>
◯ページ送り関連
→ テンプレートファイル
<!-- 最大ページ数を表示 -->
<?php echo $wp_query->max_num_pages; ?>
<!-- 次のページがある場合の処理 -->
<?php $next_link = get_next_posts_link(); ?>
<?php if ( isset( $next_link ) ) : ?>
<!-- 次のページがある場合 -->
<?php endif; ?>
◯検索関連タグ
→ テンプレートファイル
<!-- 検索フォーム -->
<form role="search" method="get" id="searchform" action="<?php echo home_url(); ?>">
<?php if ( is_search() ) : ?>
<input type="text" placeholder="検索" name="s" id="s" value="<?php the_search_query(); ?>">
<?php else : ?>
<input type="text" placeholder="検索" name="s" id="s">
<?php endif; ?>
<input type="submit">
</form>
<!-- 検索キーワードを出力 -->
「<?php the_search_query(); ?>」の検索結果
<!-- 検索件数を出力 -->
<?php echo $wp_query->found_posts; ?>件
◯管理画面設定
→ functions.php
<?php
// 管理画面のメニューを非表示
function remove_admin_menus() {
global $menu;
unset($menu[2]); // ダッシュボード
unset($menu[5]); // 投稿
unset($menu[10]); // メディア
unset($menu[20]); // 固定ページ
unset($menu[25]); // コメント
unset($menu[60]); // 外観
unset($menu[65]); // プラグイン
unset($menu[70]); // ユーザー
unset($menu[75]); // ツール
unset($menu[80]); // 設定
}
add_action('admin_menu', 'remove_admin_menus');
?>
→ functions.php
<?php
// 管理画面 ダッシュボードにカスタム投稿タイプの投稿数を表示
function dashboard_customposttype_items( $elements ) {
foreach ( array( 'POST_TYPE_NAME','POST_TYPE_NAME' ) as $post_type ) {
$num_posts = wp_count_posts( $post_type );
if ( $num_posts && $num_posts->publish ) {
$text = number_format_i18n( $num_posts->publish ).' 件';
$postTypeLabel = get_post_type_object( $post_type )->label;
$elements[] = sprintf( '<a href="edit.php?post_type=%1$s" class="%1$s-count"><b>%3$s</b>:%2$s</a>', $post_type, $text, $postTypeLabel );
}
}
return $elements;
}
add_filter( 'dashboard_glance_items', 'dashboard_customposttype_items' );
// 管理画面 ダッシュボードにカスタム投稿タイプの投稿数を表示 アイコン
function dashboard_style() {
?>
<style>
#dashboard_right_now .POST_TYPE_NAME-count:before,
#dashboard_right_now .POST_TYPE_NAME-count:before {
content: "\f109";
}
</style>
<?php
}
add_action( 'admin_print_styles', 'dashboard_style' );
?>