【WordPress】脱 Advanced Custom Fieldsプラグイン

  • 投稿 : 2018-09-29

WordPress標準のカスタムフィールド機能に変更

Advanced Custom Fieldsの機能を全然使ってないのに等しいので、あまり参考にはなりませんが・・。逆に、これから使おうと思ってる人は、簡単なケースでは使わないほうが「Advanced Custom Fields」に縛られないのでよいと思う。

検索で調べるとAdvanced Custom Fieldsの事例が多くて、初心者でよくわからなかった僕は、そのまま使って現在にいたるわけです。実際は、必要なかったといっても過言じゃないですね。

DBの中身に関して

画像URL(img_url)というテキストボックスのフィールドを1つ使っていた場合の事例です。

フィールド構造のレコードが1件だけある

"88","3305","field_51a8dc6255e02","a:10:{s:3:""key"";s:19:""field_51a8dc6255e02"";s:5:""label"";s:9:""画像URL"";s:4:""name"";s:7:""img_url"";s:4:""type"";s:4:""text"";s:12:""instructions"";s:0:"""";s:8:""required"";s:1:""0"";s:13:""default_value"";s:0:"""";s:10:""formatting"";s:4:""none"";s:17:""conditional_logic"";a:3:{s:6:""status"";s:1:""0"";s:5:""rules"";a:1:{i:0;a:2:{s:5:""field"";s:4:""null"";s:8:""operator"";s:2:""=="";}}s:8:""allorany"";s:3:""all"";}s:8:""order_no"";i:0;}"

wp_postmetaテーブルに上記のようなものが1件だけ存在します。

SELECT * FROM wp_postmeta WHERE meta_key like 'field_%';

phpMyAdminとかで、SQLを実行できるのなら、上記を実行すれば1レコードヒットするかと思います。グループ定義の数だけあるので、複数使ってるのなら複数件ヒットするかと思います。

記事毎に1レコード

"8855","4450","_img_url","field_51a8dc6255e02"

"8854","4450","img_url","https://3.bp.blogspot.com/-rHhImkTH0zE/W6u2NQuiDfI/AAAAAAAACvQ/tczYtlW_xiQH8l2EVhRB43VSWZBjFLftQCKgBGAs/s1600/no2-brbrbr01.png"

こちらがデータの本体です。
_img_urlというキーで、field_51a8dc6255e02というのでフィールド名が別定義?されてます。あと、img_urlのままでデータの中身があります。

SELECT * FROM wp_postmeta WHERE meta_key='_img_url';
SELECT * FROM wp_postmeta WHERE meta_key='img_url';

SQL実行してみるなら上記で、ヒットするかと思います。

今回の場合

DB

img_urlのレコードがそのまま、Wordpressのカスタムフィールドとして使えるので、そのまま使います。ほかは必要ないので、好みによりますが削除します。

delete FROM wp_postmeta WHERE meta_key='_img_url';

SQL文で消したい場合は、こんな感じ。

投稿画面の入力表示

Wordpress標準の機能でもカスタムフィールドを表示できますが、やぼったくなるので自身で表示・更新できるといいなという話で実際にやってみました。Step 1:投稿画面にカスタム

ブログ運営のためのブログカスタマイズ

投稿画面での表示は、上記のような感じで可能です。

PHPコードについて

Advanced Custom Fields機能をつかったPHPコードを書いていたので、それをWordpress標準の関数に置きかえます。

データの取得

$url = get_field("img_url");

↑ Advanced Custom Fields
↓ Wordpress標準

$url = get_post_meta($post_id,"img_url",true);

get_post_metaのほうは、記事ID($post_id)が必要なので要注意

データの更新

$first_img = "https://blog.example.com/img/no-img.png";

$field = get_field_object("img_url");
$field_key =$field['key'];
update_field($field_key,$first_img, $post_id);

↑ Advanced Custom Fields
↓ Wordpress標準

$first_img = "https://blog.example.com/img/no-img.png";

update_post_meta( $post_id, "img_url", $first_img);

update_post_metaに置き換えますが、引数の順番とかにも気を付けてください

スポンサーリンク