yuheijotaki.com

2015/12/01 : 
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' );

?>