回答編集履歴

1

修正しました

2019/08/08 04:40

投稿

yukikp
yukikp

スコア797

test CHANGED
@@ -4,10 +4,224 @@
4
4
 
5
5
 
6
6
 
7
+ 【追記】雰囲気が分かるようにしてみました。
8
+
9
+
10
+
7
11
  ・ログインユーザーのみアクセス可能なpage-editlist.phpを用意し、編集専用ユーザーがログインすると、そのページに強制リダイレクトするように設定。
8
12
 
13
+ =>省略
14
+
15
+
16
+
9
17
  ・編集専用ユーザーは管理画面に入ろうとしても、page-editlist.phpのページにリダイレクトするように設定。
10
18
 
19
+ =>省略
20
+
21
+
22
+
11
23
  ・page-editlist.phpでは、カスタムフィールドで事前に割り振られた担当ユーザーIDを基に、「自分が編集することができる記事リスト一覧(およびリンク)」を表示させ、リンクをクリックするとその製品ページへと飛ぶ。
12
24
 
25
+ ※カスタムフィールド名をwriter_idとします。
26
+
27
+ ```PHP
28
+
29
+ <?php
30
+
31
+ if( !is_user_logged_in() ) header('Location: ' . get_bloginfo('url') );
32
+
33
+ get_header();
34
+
35
+ ?>
36
+
37
+ <div class="container">
38
+
39
+ <h2>あなたが担当する記事リスト</h2>
40
+
41
+ <?php
42
+
43
+ $user_id = get_current_user_id();
44
+
45
+ $args = array(
46
+
47
+ 'post_type' => 'product',
48
+
49
+ 'posts_per_page' => -1,
50
+
51
+ 'meta_query' => array(
52
+
53
+ 'relation' => 'AND',
54
+
55
+ array(
56
+
57
+ 'key' => 'writer_id',
58
+
59
+ 'value' => $user_id,
60
+
61
+ 'type' => 'NUMERIC',
62
+
63
+ 'compare' => '='
64
+
65
+ ),
66
+
67
+ )
68
+
69
+ );
70
+
71
+ if( $products = get_posts( $args ) ){
72
+
73
+ ?>
74
+
75
+ <ul>
76
+
77
+ <?php
78
+
79
+ foreach( $products as $p ){
80
+
81
+ ?>
82
+
83
+ <li><a href="<?php echo get_the_permalink( $p->ID );?>"><?php echo get_the_title( $p->ID );?></a></li>
84
+
85
+ <?php
86
+
87
+ }
88
+
89
+ ?> </ul>
90
+
91
+ <?php
92
+
93
+ }
94
+
95
+ ?>
96
+
97
+ </div>
98
+
99
+ <?php
100
+
101
+ get_footer();
102
+
103
+ ```
104
+
105
+
106
+
13
107
  ・single-product.phpでは、ログインユーザーIDとカスタムフィールドで事前に割り振られた担当ユーザーIDが一致している場合、編集させたいカスタムフィールドのフォームパーツを表示させ、編集・保存ができるようにしておく
108
+
109
+
110
+
111
+ single-product.php
112
+
113
+ ```PHP
114
+
115
+ <?php
116
+
117
+
118
+
119
+ //通常の製品紹介の下に追記
120
+
121
+ $writer_id = get_post_meta( $post->ID, 'writer_id', true );
122
+
123
+ $user_id = get_current_user_id();
124
+
125
+ if( is_user_logged_in() && $user_id == $writer_id ){
126
+
127
+ ?>
128
+
129
+ <div id="ProductInfoForm">
130
+
131
+ <h2>商品情報更新</h2>
132
+
133
+ <form name="ProductInfo" id="ProductInfo">
134
+
135
+ <input type="hidden" name="post_id" value="<?php echo $post->ID;?>" >
136
+
137
+ <?php
138
+
139
+ wp_nonce_field( 'UPDATEPRODUCTINFO');
140
+
141
+ カスタムフィールドに保存したい項目をフォームで作成
142
+
143
+ ?>
144
+
145
+ </form>
146
+
147
+ <script type="text/javascript">
148
+
149
+ jQuery(function($){
150
+
151
+
152
+
153
+ $('#ProductInfo').submit( function(e){
154
+
155
+ e.preventDefault();
156
+
157
+ var action = 'update_productinfo';
158
+
159
+ var $Form = $('#ProductInfo').append('<input type="hidden" name="action" value="' + action + '" >');
160
+
161
+ $.ajax({
162
+
163
+ url: '<?php echo admin_url('admin-ajax.php');?>',
164
+
165
+ type: 'POST',
166
+
167
+ data: $Form.serialize(),
168
+
169
+ success: function(msg){
170
+
171
+ alert('製品が更新されました');
172
+
173
+ }
174
+
175
+ });
176
+
177
+ });
178
+
179
+ );
180
+
181
+ </script>
182
+
183
+ </div>
184
+
185
+ <?php
186
+
187
+ }
188
+
189
+ ?>
190
+
191
+ ```
192
+
193
+
194
+
195
+ functions.phpに追記
196
+
197
+ ```PHP
198
+
199
+ add_action( 'wp_ajax_update_productinfo', 'update_productinfo');
200
+
201
+ function update_productinfo(){
202
+
203
+ $my_nonce = isset($_POST['_wpnonce']) ? $_POST['_wpnonce'] : null;
204
+
205
+ if( wp_verify_nonce( $my_nonce, 'UPDATEPRODUCTINFO' ) ){
206
+
207
+ //製品概要についてproduct_descというキーのカスタムフィールドがあったとする
208
+
209
+ $product_desc = filter_input( INPUT_POST, 'product_desc', FILTER_SANITIZE_STRING );
210
+
211
+ $post_id = filter_input( INPUT_POST, 'post_id', FILTER_SANITIZE_NUMBER_INT );
212
+
213
+ if( !empty( $product_desc ) ){
214
+
215
+ return update_post_meta( $post_id, 'product_desc', $product_desc );
216
+
217
+ }
218
+
219
+
220
+
221
+ }
222
+
223
+
224
+
225
+ }
226
+
227
+ ```