WordPressによるCMS

WordPressをCMSとして利用するときによく使う設定やコードなど。

パーマリンクの種類

WordPress管理画面、左カラムの「設定>パーマリンク設定」
カスタム構造のテキストボックス内に入力すると使用できます。
下記のように記述しますが、勿論此れ以外にも自由に組み合わせて書き換える事もできます。

  • 投稿ID:/%post_id%/
  • 投稿名:/%postname%/
  • 投稿名+.html:/%postname%.html:
  • 日付+投稿名:/%year%/%monthnum%/%day%/%postname%/:
  • カテゴリ+投稿ID:/%category%/%post_id%/
  • カテゴリ+投稿名:/%category%/%postname%/

「カテゴリ+投稿名:/%category%/%postname%/」が構造的に推奨されていますが、後々カテゴリの整理をしづらくなります。
そのため「投稿名:/%postname%/」が推奨される事もあるようです。

WordPressの埋め込み

<?php require './wp/wp-blog-header.php'; ?>

(埋め込むページからの相対パスを記述、この場合は同階層にwpというフォルダ名でWordPressを設置した際の記述です)。
htmlファイルの1行目(DOCTYPEより上)に上記を記述後、拡張子をhtmlからphpに変更。

WordPressをhtmlファイル内で動かす

.htaccessに下記内容を記述後、ルートフォルダへアップロードします。

AddType application/x-httpd-php .php .html

ロリポップサーバーをご使用の場合、上記記述では動作しませんので、下記記述に書き換えてアップロードします。

AddHandler php5.2-script html

記事一覧に詳細ページの1枚目の画像を抽出

WordPressの投稿記事内の画像の最初の1枚をサムネイルとして表示する方法│memocarilog様

記事一覧の画像を非表示

<?php
	$my_content = get_the_content();
	$my_content = preg_replace("|(<img[^>]+>)|si","",$my_content);
	echo $my_content;
?>

新着情報などに。

WordPress内でのjQueryの記述

下記コメント部分に記述すれば普段の「$」でも動作します。

jQuery(function($) {
	// foo
});

もしくは下記をheader.php内のwp_head();より前に記述する事でも普段通りに動作するようになります。

<?php
	wp_deregister_script('jquery');
	wp_enqueue_script('jquery','https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js');
?>

googleにホスティングされているjQueryを読み込む際にはバージョンも確認してください。
https://developers.google.com/speed/libraries/#jquery

投稿、固定ページへのphpファイルの読み込み

下記をfunctions.phpへ追記。

function Include_my_php($params = array()) {
    extract(shortcode_atts(array(
        'file' => 'default'
    ), $params));
    ob_start();
    include(STYLESHEETPATH . "/$file.php");
    return ob_get_clean();
} 

add_shortcode('myphp', 'Include_my_php');

「example.php」というファイルを読み込ませたい場合、投稿や固定ページの埋め込みたい場所に下記コードを記述。

[myphp file='example']

.phpは省略します。

カテゴリ名の取得

<?php $category = get_the_category(); echo $category[0]->cat_name; ?>
<?php $category = get_the_category(); echo $category[1]->cat_name; ?>

1行目 親カテゴリ名のみ取得。
2行目 子カテゴリ名のみ取得。

所属する全てのカテゴリのスラッグ名を取得

半角スペース区切り、最後のスペースは削除します。
クラス属性などに。

<?php
$cats = get_the_category();
$str = '';
foreach( ( array )$cats as $cat ) {
	if( !in_array( $cat->cat_ID, $exclude ) ) {
		$str .=  $cat->slug . ' ';
	}
}
echo rtrim( $str, ' ' );
?>">

尚、6行目「slug」を「cat_name」に変更すると配列の内容がスラッグからカテゴリ名になります。

子カテゴリのスラッグ名から画像を出力

<img src="<?php bloginfo('template_url'); ?>/images/<?php
    $cats = get_the_category();
    foreach($cats as $cat):
    if($cat->parent)
    echo $cat->slug;
    endforeach;
;?>.png">
  • テーマフォルダ > images > 子カテゴリのスラッグ名.png

新着記事などのアイコンを表示させる時など。

singleページのbody_classにカテゴリ名を追加

singleページのbodyタグのクラス属性にカテゴリスラッグ名を追加します。
function.phpに下記を追記。

add_filter('body_class','add_category_to_single');
function add_category_to_single($classes, $class) {
		if (is_single() ) {
				global $post;
				foreach((get_the_category($post->ID)) as $category) {
						$classes[] = 'category-'.$category->category_nicename;
				}
		}
		return $classes;
}

「category-カテゴリ名」が付与されます。
ここではカテゴリページでのクラス名と同じものにしていますが、6行目「category-」にて独自のものに変更可能です。

body_classの使い方

header.phpのbodyタグにbody_classを追記します。

<body <?php body_class(); ?>>

single カテゴリーごとにデザインを変更

single.phpをsingle-normal.phpにリネームし、新たに下記内容のsingle.phpを作成します。

<?php
if ( in_category(array('works')) ) {
   get_template_part( 'works' , false );
} elseif ( in_category( array('information') )  )  {
   get_template_part( 'information' , false );
} else {
    get_template_part( 'single' , 'normal');
}
?>

2行目「works」にカテゴリ名、3行目「works」に読み込むファイル名を記述します。
4行目「elseif~」から6行目「} 」までを増減する事で対応させたいカテゴリを増減できます。
カテゴリページのデザイン変更の場合は「category-カテゴリ名.php」のファイル名に変更するだけでオーケーです。
テーマファイルによってはcategory.phpが存在しないものもありますが、上記の通りで切り替え可能です。

ループ処理

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
	View article
<?php endwhile; ?><?php else : ?>
	When there are no articles
<?php endif; ?>

新着情報などに使う時用

<dl>
<?php
	$posts = get_posts('numberposts=5&category=7');
	global $post;
?>
<?php if($posts): foreach($posts as $post): setup_postdata($post); ?>
	<dt><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></dt>
	<dd><? the_time('Y/n/j H:i');?><br><?php the_content(); ?></dd>
<?php endforeach; endif;?>
</dl>

dlの中にdt、ddを繰り返し展開していくので、スクリプトをdlで囲います
numberposts=5は表示させる記事数
category=7は表示させたいカテゴリのID
the_time(‘Y/n/j H:i’)は年(year)/月(month)/日(day)の表示形式、順番や間のスラッシュの変更も自由です
日付フォーマットに関する詳しい情報は小粋空間さんの「5.フォーマット文字一覧」にて記載されています
↓以下引用させて頂いたフォーマット一覧↓

出力される日付文字列の書式
単位 フォーマット文字 意味 表示例
Y 4桁の数字 1999, 2003
y 2桁の数字 99, 03
m 2桁の数字 01 – 12
n 1桁または2桁の数字 1 – 12
F フルスペル January – December
M 3文字の省略形式 Jan – Dec
d 2桁の数字 01 – 31
j 1桁または2桁の数字 1 – 31
曜日 D 3文字の省略形式 Mon – Sun
l フルスペル Sunday – Saturday
午前/午後 a 小文字 am / pm
A 大文字 AM / PM
h 2桁の数字・12時間表示 01 – 12
g 1桁または2桁の数字
12時間表示
1 – 12
H 2桁の数字・24時間表示 00 – 23
G 1桁または2桁の数字
24時間表示
0 – 23
i 先頭にゼロをつける 00 – 59
s 先頭にゼロをつける 00 – 59

以下は年月日・時分秒の設定早見表です。

年月日の設定早見表
設定例 表示
4桁 Y 2桁 m 2桁 d Y/m/d 2007/01/01
0なし j Y/m/j 2007/01/1
0なし n 2桁 d Y/n/d 2007/1/01
0なし j Y/n/j 2007/1/1
2桁 y 2桁 m 2桁 d y/m/d 07/01/01
0なし j y/m/j 07/01/1
0なし n 2桁 d y/n/d 07/1/01
0なし j y/n/j 07/1/1
時分秒の設定早見表
設定例 表示
12時間表記・2桁 h 2桁 i 2桁 s h:i:s 01:02:03
12時間表記・0なし g g:i:s 1:02:03
24時間表記・2桁 H H:i:s 13:02:03(01:02:03)
24時間表記・0なし G G:i:s 13:02:03(1:02:03)

条件分岐

<?php if (is_home()) { ?>
	<body id="index" <?php body_class(); ?>>
<?php } elseif (is_search()) { ?>
	<body id="search" <?php body_class(); ?>>
<?php } elseif (is_archive()) { ?>
	<body id="archive" <?php body_class(); ?>>
<?php } elseif (is_category()) { ?>
	<body id="cat-<?php the_category_ID(); ?>" <?php body_class(); ?>>
<?php } elseif (is_page()) { ?>
	<body id="<?php function get_page_uri2($page_id) {$page = get_page($page_id); return $page->post_name;} ?><?php echo get_page_uri2($wp_query->post->ID);?>" <?php body_class(); ?>>
<?php } elseif ( is_single()) {?>
	<body id="single" <?php body_class(); ?>>
<?php } else { ?>
	<body <?php body_class(); ?>>
<?php } ?>

勿論bodyのIDを変更する以外にも使用できます。
TOPのヘッダーのみにカルーセルいれたりとか。

自動改行を解除

WordPressにより自動で挿入される「p」「br」タグの解除。

固定ページ

page.php内get_header直後に下記を挿入。

<?
	remove_filter('the_content', 'wpautop');
	the_content();
?>

brBrbrプラグイン使用時には一行追加します。

<?
	remove_filter('the_content', 'wpautop');
	remove_filter('the_content','brBrbr');
	the_content();
?>

Contact Form 7

config.php内に下記を記述します。

define ('WPCF7_AUTOP', false);

※require_once(ABSPATH . ‘wp-settings.php’);より上に記述します。

コメント

タイトルとURLをコピーしました