カテゴリー
Pinboard

Docker for Macで始めるお手軽WordPress環境の様々なカスタマイズ – OTTAN.XYZ

カテゴリー
Pinboard

Fully Cache WordPress (HTML pages included) with AWS CloudFront CDN – Brian Petro

設定いろいろ

カテゴリー
Pinboard

WordPressサイトをCloudFrontで配信する – Qiita

カテゴリー
Pinboard

Carbon Fields – WordPress developer-friendly custom fields for post types, taxonomy terms, users, comments, widgets, options and more.

プログラマフレンドリーなカスタムフィールドプラグイン

カテゴリー
Pinboard

Facebook のキャッシュを URL Linter で更新するのが面倒なので記事の公開・更新時に自動的にキャッシュを更新させる。 | モンキーレンチ

カテゴリー
Pinboard

High Art | THEME SUPPLY Co.

アーティスト用WPテーマ

カテゴリー
Pinboard

サイト内検索の範囲を拡大するWordPressプラグイン「Search Everything」 | ワードプレステーマTCD

カテゴリー
log

WordPressに日本語ファイル名をアップする

WP Multibyte Patch プラグインがOnになってると日本語部分勝手にリネームしてくれるんだね。
すげー。

カテゴリー
log

WordPressのファイルアップロード保存先を変更する

表題の件、wp-config.phpdefine('UPLOADS', 'uploads'); とか書いとくとよいのだけど、
それとは別の方法だと以下。

screen 2015-01-30 20.21.25

  1. 〜/wp-admin/options.php にアクセス
  2. upload_pathwp-admin からみた階層を指定
  3. upload_url_path に ルートからのパスを指定

上の図の場合は、

  • wp本体が /wp/ とかドキュメントルートから一階層さげてる
  • /uploads に画像いれたい

という場合の指定。

カテゴリー
Pinboard

VCCWを使ってWordPress環境をチームでまるごと共有する | Firegoby

カテゴリー
Pinboard

wordmove – WordPressの検証環境・本番環境のDB同期をSearch-Replace-DB+Shellで解決!(我流) – Qiita

Search-Replace-DBでシリアライズされたDB内容を正しく書き換える

カテゴリー
Pinboard

Command line interface for WordPress | WP-CLI

カテゴリー
Pinboard

WordMoveを使ってVagrant内のWordPressと本番環境を同期する! | Firegoby

カテゴリー
Pinboard

超倍速でWordPressオリジナルテーマ作成!骨だけ「Bones」の使い方をザックリと

WPのスターターテーマファイルセット。子テーマの存在しらなかったなぁ

カテゴリー
Pinboard

ハッカー(クラッカー)の気持ちで考えるWordPressのセキュリティー対策 | 無料WordPressテーマ BizVektor [ ビズベクトル ]

カテゴリー
Pinboard

[試] WordPressプラグイン SNS Count Cache | シェア数キャッシュで表示速度向上 | 試行錯誤ライフハック

シェア数をキャッシュ、DBに一時保存までするプラグイン

カテゴリー
log

[WordPress] Advanced Custom Fieldsで設定したカスタムタクソノミーのカスタムフィールドの値を取得

// 投稿に設定されているタクソノミー一覧を取得
$terms = get_the_terms($post->ID, '①');

// 複数あるかもなのでforeach
foreach ( $terms as $key => $value ) :
  // カスタムフィールドを出力
  echo get_field('②', '①_'.$value->term_id );
endforeach;
  • ① : カスタムタクソノミーのスラッグ
  • ② : カスタムフィールドのフィールド名

① = books、② = author とすると、

$terms = get_the_terms($post->ID, 'books');
foreach ( $terms as $key => $value ) :
  echo get_field('author', 'books_'.$value->term_id );
endforeach;
カテゴリー
log

WordPress : アップロード画像の画質とサイズ

サムネールの画質の調整

WordPressのアップ後の画像、リサイズかかるわけだけど、以下をテーマの functions.php に記述して画質の調整ができる。

// 画質100%
add_filter('jpeg_quality', function($arg){return 100;});

ただ、GDライブラリでのリサイズで、なんかリサイズ後の色が気に入らんという場合は、ImageMagickでリサイズさせるといいかも。
以下のプラグイン使う。
WordPress › ImageMagick Engine « WordPress Plugins

サムネールのサイズの調整

設定 > メディアで生成するサイズ指定できるのだけど、ソレ以外のサイズつくりたい場合は、

// add_image_size( $name, $width, $height, $crop:true/false );
add_image_size( '[name]', 100, 100, false );

とかくと任意のサイズ(たくさんかけばその分)つくれる。
取得するときは、サムネール取得時の medium とかの代わりに上記で設定した [name] を指定する。

ただ、あんまりいろんなサイズ生成させてると、アップ時にリサイズ失敗する時があるみたいだから、
(上の name 指定してても元画像が返っちゃう)使用には注意が必要。
(特にImageMagickつかっていると、自分のサーバーでは結構失敗する..)

参考:
関数リファレンス/add image size – WordPress Codex 日本語版

サムネールの再生成

運用途中からサムネールのサイズかえたい場合は、
WordPress › Regenerate Thumbnails « WordPress Plugins
つかう。

カテゴリー
log

WordPress : WordPress内のデータ出力と取得

複数のWordPressが動いているサイトで、別のWordPressの内容取得したい時ってどうするのが正解だろう。

例えば、ニュースだけ独立したWPで動いていて、それとは別に全体をWPで管理している。
で、全体管理下のホームにはニュースの最新N件を表示したい時など。
RSSで書きだして取得したりいろいろ方法あるみたいだが、
自分の場合は、以下のようにしてみた。

  • データを書き出したいWP上で保存時に、投稿データを取得してファイルに書き出す
  • 利用するWP側で書き出されたファイルを読み込んで表示

functions.php

function saveAction() {

  //投稿取得、最新5件、公開されているもの
  $posts = new WP_Query( array( 'showposts' => 5, 'post_type' => 'post', 'post_status' => 'publish' ) );

  // serializeしてファイルに書き出し
  file_put_contents('latest-posts.inc', serialize($posts));

}

// 記事保存時に上記のsaveActionを実行
add_action('save_post', 'saveAction');

利用テンプレート

// ファイル読み込んでunserialize
$posts = unserialize(file_get_contents('latest-posts.inc'));
カテゴリー
log

WordPress : 管理画面の一覧にカスタムフィールドの内容表示

WordPressにカスタムフィードの値を表示する。
以下の場合は、Advanced Custom Fieldsでのギャラリーで登録した最初の一枚目の画像を表示。

// 管理画面にサムネール表示追加 ------------------------------
function manage_posts_columns($columns) {
  $columns['Thumb'] = "Thumbnail"; // `Thumbnail`っていうのが列に表示される名称
  return $columns;
}

function add_column($column_name, $post_id) {
  if( $column_name == 'Thumb' ) { // $column['Thumb']の時に以下
    $sThumb = get_field('gallery', $post_id); // カスタムフィールド `gallery` の内容を取得
    $sThumbTag = '<img src="'.$sThumb[0]['sizes']['thumbnail'].'" />'; // ACFのギャラリーの内容で最初の1枚目のサムネールを取得
  }

  if ( isset($sThumbTag) && $sThumbTag ) {
    echo $sThumbTag;
  }

}

// 管理画面の投稿一覧表示の時に上記で定義したfunctionを実行する
add_filter( 'manage_posts_columns', 'manage_posts_columns' );
add_action( 'manage_posts_custom_column', 'add_column', 10, 2 );
カテゴリー
log

WordPress – 現在の投稿の前後を取得

現在の投稿の前後を取得。whileループで利用する

$prevpost = get_adjacent_post(true, '', true);
$nextpost = get_adjacent_post(true, '', false);
  1. 第1引数. true → 同一カテゴリー限定、false → カテゴリー限定なし
  2. 第2引数. 1 がfalse の場合、除外するカテゴリID
  3. 第3引数. true → 前(prev)の投稿、false → 次(next)の投稿

このブログの前日・翌日リンクで使用している。
天気部分以外の投稿の無い日は前後リンクでスキップさせるために。

カテゴリー
log

WordPressのインポート画面でPHP Fatal error: Allowed memory size of 〜 bytes exhausted

タイトル通りで、管理画面からプラグイン:WordPress Importerインストール後、インポートしようとすると、
「PHP Fatal error: Allowed memory size of 〜 bytes exhausted」
がでる。
* 自分の場合はローカル環境ででた。

wp-config.phpに

define('WP_MEMORY_LIMIT', '64M');

を追加してWPの割り当てメモリを増やして解決。

カテゴリー
hatena

[WordPress] 特定のカテゴリを親カテゴリにもつカテゴリーアーカイブ/エントリーの判定

ちょっと状況説明が難しいのだけど、 特定のカテゴリーを親カテゴリーにもつ「カテゴリーアーカイブ」と「エントリー」のみ表示を変えたいときの判定。 カテゴリーアーカイブの場合

カテゴリー
hatena

特定のカテゴリを親カテゴリにもつカテゴリーアーカイブ/エントリーの判定

ちょっと状況説明が難しいのだけど、
特定のカテゴリーを親カテゴリーにもつ「カテゴリーアーカイブ」と「エントリー」のみ表示を変えたいときの判定。

カテゴリーアーカイブの場合

<?php
//現ページのカテゴリーIDを取得 - get_query_var('cat')で現在表示しているカテゴリーアーカイブのIDが返ってくる。
$category_currentID = get_query_var('cat');

//カテゴリーIDからカテゴリー情報を取得 - get_categoryにカテゴリーIDを渡して該当カテゴリの情報を取得
$category_current = get_category($category_currentID);

//親カテゴリのIDを取得 - ->category_parentで親カテゴリの存在確認(親がなければ0が帰る)
$category_parentID = $category_current->category_parent; 

//もし親カテゴリがあれば
if ($category_parentID !== '0' ) {
	//get_categoryに親カテゴリのIDを渡して、親カテゴリの情報を取得
	$category_parent = get_category($category_parentID);
	if ($category_parent->slug === '親カテゴリー「〜」のスラッグ名') {
		echo '親カテゴリーが「〜」の場合の表示処理';
	} else {
		echo '通常処理';
	}
} else {
	echo '通常処理';
}
?>

エントリーの場合 (エントリーでの重複カテゴリーは考慮してないよ)

<?php

//現ページのカテゴリー情報を取得
$category_current = get_the_category();

//親カテゴリのIDを取得、エントリーの場合はget_the_categoryが多次元配列になっているので[0]つける
$category_parentID = $category_current[0]->category_parent;

//もし親カテゴリがあれば
if ($category_parentID !== '0' ) {
	//get_categoryに親カテゴリのIDを渡して、親カテゴリの情報を取得
	$category_parent = get_category($category_parentID);
	if ($category_parent->slug === '親カテゴリー「〜」のスラッグ名') {
		echo '親カテゴリーが「〜」の場合の表示処理';
	} else {
		echo '通常処理';
	}
} else {
	echo '通常処理';
}
?>
カテゴリー
hatena

カレンダーの日本語表記の日付を英語表示にする(jQueryで無理やり)

WordPress

<?php get_calendar(); ?>

で表示されるカレンダーを英語表記にするやつ。
単に文字列を置き換えているだけだけど、
jQuery読み込んでいること前提で。

<script type="text/javascript">
$(document).ready(function(){

	//yyyy年mm月の置換
	$('#wp-calendar caption').each(function() {
		var text = $(this).text().split("年");
		//[Month. Year]
		$(this).text(month_en(text[1]) + '. ' + text[0]);
	});

	//曜日の置換
	$('#wp-calendar th').each(function() {
		if ($(this).text() == "日") { $(this).addClass('sunday'); } 
		if ($(this).text() == "土") { $(this).addClass('saturday'); }
		$(this).text(day_en($(this).text()));
	});

	//前月の置換
	$('#wp-calendar #prev a').each(function() {
		var text = $(this).text().split(" ");
		//[< Month]
		$(this).text('< ' + month_en(text[1]));
	});

	//次月の置換
	$('#wp-calendar #next a').each(function() {
		var text = $(this).text().split(" ");
		//[Month >]
		$(this).text(month_en(text[0]) + ' >');
	});

	function day_en($text) {
		switch ($text) {
			case '日':  $text = 'S'; break;
			case '月':  $text = 'M'; break;
			case '火':  $text = 'T'; break;
			case '水':  $text = 'W'; break;
			case '木': $text = 'T'; break;
			case '金': $text = 'F'; break;
			case '土': $text = 'S'; break;
		}
		return $text;
	}

	function month_en($text) {
		switch ($text) {
			case '12月': $text = 'Dec'; break;
			case '11月': $text = 'Nov'; break;
			case '10月': $text = 'Oct'; break;
			case '9月': $text = 'Sep'; break;
			case '8月': $text = 'Aug'; break;
			case '7月': $text = 'Jul'; break;
			case '6月': $text = 'Jun'; break;
			case '5月': $text = 'May'; break;
			case '4月': $text = 'Apr'; break;
			case '3月': $text = 'Mar'; break;
			case '2月': $text = 'Feb'; break;
			case '1月': $text = 'Jan'; break;
		}
		return $text;
	}

});
</script>
カテゴリー
hatena

本文に続きがある場合の「(more・・・)」の表示を自由に変える(追記の判定)

)","<!--more-->",get_the_content("<!--more-->"));
echo apply_filters('the_content',$get_content);
if (ereg("<!--more-->",$get_content)) { //$get_content内に「<!--more-->」があるなら
	echo '<a href="'.$post->guid.'#more-'.$post->ID.'">続き</a>';//続きのリンク内容
}
?>

1.
get_the_content(“<!–more–>”);
で「(more・・・)」部分を、「<a href=”パーマリンク” class=”more-link”><!–more–></a>」
として本文を取得。

2.
preg_replaceで「<a href=”パーマリンク” class=”more-link”><!–more–></a>」を<!–more–>に書き換えて、$get_contentに入れる。

3.
$get_contentに「<!–more–>」があったら、続きのリンク内容を表示する

としてみた。
ちゃんと動いているようだけど、、正規表現自信なし。

カテゴリー
hatena

テーマファイルのパス

WPをインストールしたパス基準のテーマファイルのパスを出力するテンプレートタグってないのかな。。

bloginfo(‘template_directory’) だと、「http://〜/wp-content/themes/〜」
になるのだけど、
WPインストールディレクトリ基準(/wp-content/themes/〜)で取得したい。

テーマファイル内の、function.phpに、

function theme_url () {
echo str_replace(get_bloginfo('url'), "", get_bloginfo('template_directory'));
}

というのを追加して、
テンプレート内で、

<?php theme_url(); ?>

として取得。

カテゴリー
hatena

任意の内容のxmlを出力させる。

テーマのindex.php

<?php
// /?xml=onでアクセスすると以下の処理。
if ( isset( $_GET["xml"]) == "on" ) {

header('Content-Type: text/xml; charset='.get_option('blog_charset'), true);
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";

//query_postsで指定があればなんか指定。
query_posts('');
if (have_posts()) : while (have_posts()) : the_post();  ?>

〜書き出したいxmlの内容を書く〜

<?
endwhile; else: endif;

} else { ?>

〜 いつものindex 〜

<?php } ?>

とかして、/?xml=onでアクセスすればいいんじゃないのーという話。

カテゴリー
hatena

カスタムフィールドに登録した画像のサムネールやらを取得する。

WPってアップロードした時に、管理画面の設定>メディアで指定したサイズで
・サムネイル
・中サイズ
・大サイズ
それぞれの画像が自動的に生成される。

それを利用してカスタムフィールドで登録した画像の生成されたリサイズ画像を取得する。
より個別具体的にいうと、カスタムフィールドで画像登録してlightbox的な事したいんだけど、という時の対応。
これでできたけどスマートかどうかはわからない。

前提

  • カスタムフィールドの数は10コとする(仮に)。
  • フィールド名はimage01〜image10。
  • フィールド内にはオリジナル画像のURLが入力される。

やってる事

  1. カスタムフィールドの画像(値/URL)とその個数を取得
  2. 表示しているエントリーに紐付けられてる画像(URL)とその個数を取得 ※ギャラリーで表示される画像群
  3. 1と2の値(URL)を比較して、カスタムフィールドに登録した画像のattachmentIDを取得する
  4. wp_get_attachment_image( or wp_get_attachment_image_src)にattachmentIDとサムネールの種類をわたして画像ゲット。

※コレ、訳あって画像登録のフロントエンドをカスタムフィールドにしてるけど、
並び替えの手軽さや管理しやすさ(一括アップロードなど)を考えるとギャラリーで管理するのが良いですね。

<?php  if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php
//1. カスタムフィールドの値を取得する。
for($i=1;$i<=10;$i++) { //前提でフィールド最大10としたので10回繰り返し
	$numb=sprintf("%02d",$i); //$iの数を1桁の場合、0(n)と2桁に
	$custom = post_custom('image'.$numb.''); //image0(n)を取り出して$customに格納
	if($custom) { //custom
  		$image_list[] = $custom;
	} else {
		break;
		//値がないならbreakしてるけど、image01とimage03は値あり、image02は空欄みたいな事があるなら、breakしないほうがいいか。
	}
}

//$image_listの数を取得
$image_list_count = count($image_list);


//2. このポストに関連付けされた画像ファイルを取得。
$attachments = get_children(array('post_parent' => get_the_ID(), 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order',  'order' => 'ASC'));
//↑このエントリーの編集画面のメディアアップロードダイアログ内、ギャラリー部分に表示される画像群を取得。
//'orderby' => 'menu_order'はギャラリー部分で指定した表示順。

//確認用:print_r($attachments); 
//$attachmentsの中身は
//[attachmentID][post_author、その他いろいろ]みたいな感じになってる。


//3. 1と2の値(URL)を比較して、カスタムフィールドに登録した画像のattachmentIDを取得する
for ($i=0; $i<=$image_list_count; $i++) {
	
	foreach ( $attachments as $key => $value ) { //$attachmentを展開する
		if ($attachments[$key]->guid == $image_list[$i] ) { //attachmentsの画像URLとカスタムフィールドの値を比較、一致したら以下。

			//4. wp_get_attachment_image( or wp_get_attachment_image_src)にattachmentIDとサムネールの種類をわたして画像ゲット。
			$large_url =  wp_get_attachment_image_src($key,'large'); //attachmentIDが$keyの大サイズ(large)の画像の値を取得、large以外は、thumbnail,medium,full。

			echo "<a href=\"".$large_url[0]."\">";//[0]がurl、[1]が幅、[2]が高さ、[3]はなんだろ。
			echo wp_get_attachment_image($key,'thumbnail');//attachmentIDが$keyのサムネイルサイズ(thumbnail)の画像の表示タグ(<img>)を取得
			echo "</a>";
		}
	}
}

// 繰り返し用に配列削除しとく - 2010.07.01 追加 - 
unset($attachments);
unset($image_list);

?>
<?php endwhile; endif: ?>

※バックスラッシュが「\」マークになってる。。
カテゴリー
hatena

月別アーカイブ表示に年区切りを入れる。

wp_get_archives();で表示される
・2010年3月
・2009年6月
というのを

2010年

・3月

2009年

・6月

みたいな表示にする。

2010年3月等と表示される日本語環境のみ、March 2010とか表示される英語環境だと要修正。

<h3>ARCHIVES</h3>
<div class="navi-archives">
<?php 
//1. 年を抽出して配列に格納
$archives_year = strip_tags(wp_get_archives('type=yearly&show_count=0&format=custom&echo=0')); //wp_get_archivesに対してタグを除去して年数のみ抽出。
$archives_year_array = split("\n",$archives_year); //年数ごとに配列$archives_year_arrayに格納
array_pop($archives_year_array);//配列内の最後に空の配列ができてるので削除。
//$archives_year_array = array_merge(array_diff($archives_year_array, array(""))); で空の配列削除してもOKだった。

//2. アーカイブ一覧を取得して配列に格納
$archives = wp_get_archives('type=monthly&show_post_count=1&use_desc_for_title=0&echo=0'); //月別アーカイブを取得。
$archives_array = split("\n",$archives); //同様に改行ごとに配列に格納。

foreach ($archives_year_array as $year_value){ //1で抽出した年数分繰り返し
	echo "<h4>".ltrim($year_value)."</h4>\n"; //<h4>で年を表示
	echo "<ul>\n";
	
	foreach ( $archives_array as $archives_value) { //月別アーカイブ数分繰り返し
		
		if ( intval(strip_tags($archives_value)) == intval($year_value) ) { //1で取得した年と、2の各月別アーカイブの文字列を比較
			echo  str_replace(intval($year_value)."","",ltrim($archives_value))."\n";//2の月別アーカイブの各行のhtmlからYYYY年部分を除去して表示。
			array_shift($archives_array); //表示した配列を削除。なんとなくこのほうが次のforeachまわるとき処理早くなるかなと思って。
		}
		
	}
	echo "</ul>\n";	
}

?>
</div>