teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

ソースコード変更しました。

2017/07/24 02:05

投稿

pekopoko
pekopoko

スコア11

title CHANGED
File without changes
body CHANGED
@@ -3,67 +3,79 @@
3
3
  カスタムフィールドスイートで入力した値を
4
4
  投稿などのプレビューでも表示できるようにしたいです。
5
5
 
6
- 以下のソースコードはカスタムフィールドテンプレートを
6
+ 以下のソースコードはアドバンスカスタムフィールドテンプレートを
7
7
  プレビュー表示するためのソースコードです。
8
8
  カスタムフィールドスイート用にカスタマイズしてできないかと考えています。
9
9
 
10
10
  ###ソースコード
11
11
  ```ここに言語を入力
12
+
13
+ // カスタムフィールドをプレビュー対象にする
14
+
12
- // 下書きのpost_IDを取得
15
+ // preview用に保存された下書き情報(post)IDを取得する
13
- function get_preview_id( $post_id ) {
16
+ function get_preview_id($postId)
17
+ {
14
18
  global $post;
15
- $preview_id = 0;
19
+ $previewId = 0;
20
+
16
- if ( $post->ID == $post_id && is_preview() && $preview = wp_get_post_autosave( $post->ID ) ) {
21
+ if (($post->ID == $postId) && $_GET['preview'] == true && ($postId == url_to_postid($_SERVER['REQUEST_URI']))) {
22
+ // プレビュー表示の際に、自動保存されたpostの下書き情報を取得する
23
+ $preview = wp_get_post_autosave($postId);
17
- $preview_id = $preview->ID;
24
+ if ($preview != false) { $previewId = $preview->ID; }
18
25
  }
26
+
19
- return $preview_id;
27
+ return $previewId;
20
28
  }
21
-
22
- // プレビュー時、meta情報をプレビュー用のmeta情報に置き換え
29
+
23
- function get_preview_postmeta( $return, $post_id, $meta_key, $single ) {
30
+ function get_preview_postmeta($metaValue, $postId, $metaKey, $single)
31
+ {
32
+ // プレビュー表示のときにmeta情報(custom fileds情報)を、
33
+ // プレビュー用のmeta情報に置き換える
24
- if ( $preview_id = get_preview_id( $post_id ) ) {
34
+ if ($previewId = get_preview_id($postId)) {
25
- if ( $post_id != $preview_id ) {
35
+ if ($postId != $previewId) {
26
- $return = get_post_meta( $preview_id, $meta_key, $single );
36
+ $metaValue = get_post_meta($previewId, $metaKey, $single);
27
37
  }
28
38
  }
39
+
29
- return $return;
40
+ return $metaValue;
30
41
  }
31
- add_filter( 'get_post_metadata', 'get_preview_postmeta', 10, 4 );
42
+ add_filter('get_post_metadata', 'get_preview_postmeta', 10, 4);
43
+
44
+
32
-
45
+ // 下書き情報を作成するときに、対応するcustom filed情報も作成する
33
- // カスタムフィールドテンプレートの送信形式による値を取得してプレビューのmeta情報を書き換え
46
+ // プレビューの際には、この時作ったcustom filed情報を読み出す
47
+ // (読み出しているのが、get_preview_postmetaの部分)
34
- function save_preview_postmeta( $post_ID ) {
48
+ function save_preview_postmeta($postId)
49
+ {
35
- global $wpdb;
50
+ global $wpdb, $acf; // $acfがadvanced custom filedsのglobal 変数
36
-
51
+
37
- if ( wp_is_post_revision( $post_ID ) ) {
52
+ if (wp_is_post_revision($postId)) {
38
-
53
+ if (count($_POST['fields']) != 0) {
54
+ foreach ($_POST['fields'] as $key => $value) {
39
- $cft = new custom_field_template();
55
+ $field = $acf->get_acf_field($key);
56
+
57
+ if (count(get_metadata('post', $postId, $field['name'], $value)) != 0) {
58
+ update_metadata('post', $postId, $field['name'], $value);
40
- if ( !empty($_REQUEST['custom-field-template-id']) && is_array($_REQUEST['custom-field-template-id']) ){
59
+ update_metadata('post', $postId, "_" . $field['name'], $field['key']);
60
+ } else {
61
+ add_metadata('post', $postId, $field['name'], $value);
41
- foreach ( $_REQUEST['custom-field-template-id'] as $cft_id ) {$fields = $cft->get_custom_fields();}
62
+ add_metadata('post', $postId, "_" . $field['name'], $field['key']);
42
- }
63
+ }
43
-
44
- foreach($fields as $val2){
45
- if(is_array($_POST[mb_strtolower(rawurlencode(key($val2)))])){
46
- foreach( $_POST[mb_strtolower(rawurlencode(key($val2)))] as $cft_val ){
47
- if (count(get_metadata('post', $post_ID, key($val2), $cft_val)) != 0) {
48
- update_metadata( 'post', $post_ID, key($val2), $cft_val[0] );
49
- } else {
50
- add_metadata( 'post', $post_ID, key($val2), $cft_val[0] );
51
- }
52
64
  }
53
- }
54
65
  }
55
- do_action( 'save_preview_postmeta', $post_ID );
66
+ do_action('save_preview_postmeta', $postId);
56
67
  }
57
68
  }
58
- add_action( 'wp_insert_post', 'save_preview_postmeta' );
69
+ add_action('wp_insert_post', 'save_preview_postmeta');
70
+
71
+
59
72
  ```
60
73
 
61
74
  ###試したこと
62
75
  上記コードの
63
- ・custom-field-template → custom-field-suite
64
- $cft$cfs
76
+ acf → cfs
65
77
 
66
- 以上のように変更しましたが、うまくいきませんした。(画面に何も表示されず
78
+ 以上のように変更しましたが、プレビューで表示されずです。
67
79
 
68
80
 
69
81
  分かる方がいらっしゃればご教授ください。