ACFの投稿オブジェクト参照で、現在の投稿と同じ言語のもののみを出力させる【Bogo・ACF】

多言語プラグインのBogoを使用していると、多言語の投稿も、普通の投稿と同じ扱いなので、
特に日本語と中国語で、タイトルが全く一緒になってどの言語か見分けがつかなくなることがあります。

このままでは利便性が悪いので、各言語の投稿に絞り込めるよう、クエリーを制御します。

実装

ACF側で投稿オブジェクトのクエリーを制御するフックが用意されているのでそれを使用します。
ACF | acf/fields/post_object/query

1
2
3
4
5
6
7
8
9
10
function my_post_object_query( $args, $field, $post_id ) {
$locale = get_post_meta( $post_id, '_locale', true );

$args['post_status'] = 'publish';
$args['meta_key'] = '_locale';
$args['meta_value'] = $locale;

return $args;
}
add_filter('acf/fields/post_object/query', 'my_post_object_query', 10, 3);

↑このコード例ではすべての投稿オブジェクトに反映されます

管理画面でget_locale()すると、現在のユーザーが選択している言語情報で取得してしまうので、
記事に紐付いているBogoの_localeのカスタムフィールドを確認して、
Bogoのmeta_keyに代入し、絞り込んでいます。

文字コードを一括で変換する【Mac】

Homebrewからnkfをインストール

【前提】Homebrewのインストール
インストールがまだの方はこちらからインストールしてください。

文字コードを変換するのに、Homebrew経由でnkfをインストールします。

1
$ brew install nkf

nkfのオプション一覧

文字コードの変換

1
2
3
4
-j  JISに変換する
-e EUCに変換する
-s Shift-JISに変換する
-w UTF8に変換する

その他よく使うオプション

1
2
-g 文字コードの結果を表示
–overwrite 引数のファイルに直接上書き

一括変換

cdでカレントディレクトリまで移動した後、入力することでそこに存在するファイルをすべてを書き換えます。

Shift-JISに変換

1
$ nkf -s --overwrite ./*

UTF8に変換する

1
$ nkf -w --overwrite ./*

変換されたかの確認

1
$ nkf -g hoge.html

期待通りの文字コードの結果が返ってきていれば成功です。

Hexoのテーマ:icarusインストール時に出たエラーの解決法

icarusの導入時につまずく

themesディレクトリにicarusをインストールしたまではよかったものの、

1
$ hexo server

すると、以下のようなエラーを吐いてしまいました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
ERROR Script load failed: themes/icarus/scripts/index.js
/Users/xxxx/project/blog/blog/themes/icarus/includes/specs/config.spec.js:14
...require('./meta.spec'),
^^^
SyntaxError: Unexpected token ...
at Object.exports.runInThisContext (vm.js:76:16)
at Module._compile (module.js:542:28)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/Users/xxxx/project/blog/blog/themes/icarus/includes/tasks/check_config.js:8:18)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (/Users/xxxx/project/blog/blog/node_modules/hexo/lib/hexo/index.js:227:21)
at /Users/xxxx/project/blog/blog/themes/icarus/scripts/index.js:3:1
at fs.readFile.then.script (/Users/xxxx/project/blog/blog/node_modules/hexo/lib/hexo/index.js:240:12)
at tryCatcher (/Users/xxxx/project/blog/blog/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/Users/xxxx/project/blog/blog/node_modules/bluebird/js/release/promise.js:512:31)
at Promise._settlePromise (/Users/xxxx/project/blog/blog/node_modules/bluebird/js/release/promise.js:569:18)
at Promise._settlePromise0 (/Users/xxxx/project/blog/blog/node_modules/bluebird/js/release/promise.js:614:10)

nodeをアップデート

どうやらnodeのバージョンが古いためエラーを吐いている様子なので、nodebrewでアップデート。

1
$ nodebrew use latest

use v11.10.0にすることで、無事コンパイルが通りました。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×