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

質問編集履歴

16

追記_2022/02/26 22:45

2022/02/26 11:44

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -76,7 +76,8 @@
76
76
 
77
77
  }
78
78
  ```
79
+ ### 追記_2022/02/26 22:45
80
+ functions.phpが3回、header.phpが2回、という違いについてですが、これは私が別途AJAXを実行しているためでした。この処理をなくしたらfunctions.phpも2回になりました。tabuuさんありがとうございます。
81
+ 質問内容には特に変わりございません。
79
82
 
80
83
 
81
-
82
-

15

修正

2022/02/26 07:42

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -14,7 +14,7 @@
14
14
  ```
15
15
 
16
16
  ### 調べたこと
17
- ググると類似の質問が2つあり、挙動はWordPressの平常運転であると知りましたが、解決方法の記載はありませんでした。
17
+ ググると類似の質問が2つあり、functions.phpを複数回読むというのはWordPressの平常運転であると知りましたが、解決方法の記載はありませんでした。
18
18
  > [WordPressで、functions.php が複数回読まれるのは正常なのでしょうか?](https://teratail.com/questions/284189)
19
19
  > [WordPressにおける呼び出しの重複?](https://teratail.com/questions/204756)
20
20
 

14

関数名を変更

2022/02/26 07:33

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -62,8 +62,8 @@
62
62
  これは絶対にやりたくないのですが、functions.phpで以下を実行し、フロントでXMLHttpRequestを投げてis_processedをfalseに戻す。という方法ならなんとか解決はできますが、ここまで面倒なことをしなければならないでしょうか???
63
63
  ```php
64
64
  // functioins.php
65
- add_action( 'init', 'update_is_processed' );
65
+ add_action( 'init', 'once_process' );
66
- function update_is_processed() {
66
+ function once_process() {
67
67
 
68
68
  if( get_option('is_processed') === false ){
69
69
 

13

wp_insert_postを簡略化

2022/02/26 07:31

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -8,12 +8,7 @@
8
8
  ### 該当のソースコード
9
9
  ```php
10
10
  // functioins.php
11
- $my_post = array(
12
- 'post_title' => 'My post',
11
+ wp_insert_post( [ 'post_title'=>'a', 'post_content'=>'b' ] );
13
- 'post_content' => 'This is my post.',
14
- 'post_author' => 1
15
- );
16
- wp_insert_post( $my_post );
17
12
 
18
13
  error_log('この文はサイト読み込みにおいて3回表示されてしまう');
19
14
  ```
@@ -27,12 +22,7 @@
27
22
  なので自力で解決するしかないと思い、1回しか読み込まれないテンプレートを求めて同じコードを試しにheader.phpに書いてみたところ、3回ではなく2回になりました。(1回しか読み込まれないテンプレートはないのでしょうか?)
28
23
  ```php
29
24
  // header.php
30
- $my_post = array(
31
- 'post_title' => 'My post',
25
+ wp_insert_post( [ 'post_title'=>'a', 'post_content'=>'b' ] );
32
- 'post_content' => 'This is my post.',
33
- 'post_author' => 1
34
- );
35
- wp_insert_post( $my_post );
36
26
 
37
27
  error_log('この文はサイト読み込みにおいて2回表示されてしまう');
38
28
  ```
@@ -48,12 +38,7 @@
48
38
  // header.php
49
39
  global $is_processed;
50
40
  if( $is_processed === false ){
51
- $my_post = array(
52
- 'post_title' => 'My post',
41
+ wp_insert_post( [ 'post_title'=>'a', 'post_content'=>'b' ] );
53
- 'post_content' => 'This is my post.',
54
- 'post_author' => 1
55
- );
56
- wp_insert_post( $my_post );
57
42
 
58
43
  $is_processed = true; // wp_insert_postは1回しか実行しないでほしい → 効果なし
59
44
 
@@ -68,12 +53,7 @@
68
53
  ```
69
54
  ```php
70
55
  // insert.php
71
- $my_post = array(
72
- 'post_title' => 'My post',
56
+ wp_insert_post( [ 'post_title'=>'a', 'post_content'=>'b' ] );
73
- 'post_content' => 'This is my post.',
74
- 'post_author' => 1
75
- );
76
- wp_insert_post( $my_post );
77
57
 
78
58
  error_log('require_onceは効果なく、この文はサイト読み込みにおいて2回表示されてしまう');
79
59
  ```
@@ -87,12 +67,7 @@
87
67
 
88
68
  if( get_option('is_processed') === false ){
89
69
 
90
- $my_post = array(
91
- 'post_title' => 'My post',
70
+ wp_insert_post( [ 'post_title'=>'a', 'post_content'=>'b' ] );
92
- 'post_content' => 'This is my post.',
93
- 'post_author' => 1
94
- );
95
- wp_insert_post( $my_post );
96
71
 
97
72
  update_option( 'is_processed', true );
98
73
 

12

修正

2022/02/26 07:28

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -3,7 +3,7 @@
3
3
  WordPressです。サイト読み込みにおいて、テーマ内ファイルに書いた関数を1回しか実行させない方法を知りたいです。
4
4
 
5
5
  ### 発生している問題
6
- wp_insert_postをfunctions.phpに書くと、なぜか3回実行され、3件のレコードがINSERTされてしまいます。
6
+ 例えばwp_insert_postをfunctions.phpに書くと、なぜか3回実行され、3件のレコードがINSERTされてしまいます。(wp_insert_postに限りません)
7
7
 
8
8
  ### 該当のソースコード
9
9
  ```php

11

目を背けたくなるほど面倒な解決策を追加

2022/02/26 07:27

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -78,4 +78,30 @@
78
78
  error_log('require_onceは効果なく、この文はサイト読み込みにおいて2回表示されてしまう');
79
79
  ```
80
80
 
81
+ ### 目を背けたくなるほど面倒な解決策
82
+ これは絶対にやりたくないのですが、functions.phpで以下を実行し、フロントでXMLHttpRequestを投げてis_processedをfalseに戻す。という方法ならなんとか解決はできますが、ここまで面倒なことをしなければならないでしょうか???
83
+ ```php
84
+ // functioins.php
85
+ add_action( 'init', 'update_is_processed' );
86
+ function update_is_processed() {
81
87
 
88
+ if( get_option('is_processed') === false ){
89
+
90
+ $my_post = array(
91
+ 'post_title' => 'My post',
92
+ 'post_content' => 'This is my post.',
93
+ 'post_author' => 1
94
+ );
95
+ wp_insert_post( $my_post );
96
+
97
+ update_option( 'is_processed', true );
98
+
99
+ error_log('is_processedは効果あり、この文はサイト読み込みにおいて1回だけの表示となる');
100
+ }
101
+
102
+ }
103
+ ```
104
+
105
+
106
+
107
+

10

誤字

2022/02/26 07:06

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -19,7 +19,7 @@
19
19
  ```
20
20
 
21
21
  ### 調べたこと
22
- ググると類似の質問2つあり、この挙動はWordPressの平常運転であると知りましたが、解決方法の記載はありませんでした。
22
+ ググると類似の質問2つあり、この挙動はWordPressの平常運転であると知りましたが、解決方法の記載はありませんでした。
23
23
  > [WordPressで、functions.php が複数回読まれるのは正常なのでしょうか?](https://teratail.com/questions/284189)
24
24
  > [WordPressにおける呼び出しの重複?](https://teratail.com/questions/204756)
25
25
 
@@ -67,7 +67,7 @@
67
67
  require_once('insert.php'); // wp_insert_postは1回しか実行しないでほしい → 効果なし
68
68
  ```
69
69
  ```php
70
- // insert.php'
70
+ // insert.php
71
71
  $my_post = array(
72
72
  'post_title' => 'My post',
73
73
  'post_content' => 'This is my post.',

9

修正

2022/02/26 07:04

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  WordPressです。サイト読み込みにおいて、テーマ内ファイルに書いた関数を1回しか実行させない方法を知りたいです。
4
4
 
5
- ### 発生している問題・エラーメッセージ
5
+ ### 発生している問題
6
6
  wp_insert_postをfunctions.phpに書くと、なぜか3回実行され、3件のレコードがINSERTされてしまいます。
7
7
 
8
8
  ### 該当のソースコード
@@ -14,6 +14,7 @@
14
14
  'post_author' => 1
15
15
  );
16
16
  wp_insert_post( $my_post );
17
+
17
18
  error_log('この文はサイト読み込みにおいて3回表示されてしまう');
18
19
  ```
19
20
 

8

試したこを3を追加

2022/02/26 07:02

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -14,6 +14,7 @@
14
14
  'post_author' => 1
15
15
  );
16
16
  wp_insert_post( $my_post );
17
+ error_log('この文はサイト読み込みにおいて3回表示されてしまう');
17
18
  ```
18
19
 
19
20
  ### 調べたこと
@@ -31,10 +32,12 @@
31
32
  'post_author' => 1
32
33
  );
33
34
  wp_insert_post( $my_post );
35
+
36
+ error_log('この文はサイト読み込みにおいて2回表示されてしまう');
34
37
  ```
35
38
 
36
39
  ### 試したこと2
37
- さらに思いついた方法は、次のグローバル変数でフラグを立てる方法(フラグがfalseの場合だけ実行し、回実行したらtrueに変更する方法)ですが、これも2回実行されてしまいました。
40
+ さらに思いついた方法は、次のグローバル変数でフラグを立てる方法(フラグがfalseの場合だけ実行し、1回実行したらtrueに変更する方法)ですが、これも2回実行されてしまいました。
38
41
 
39
42
  ```php
40
43
  // functioins.php
@@ -51,11 +54,27 @@
51
54
  );
52
55
  wp_insert_post( $my_post );
53
56
 
54
- $is_processed = true; // もうwp_insert_postは実行しないでほしい → 効果なし
57
+ $is_processed = true; // wp_insert_postは1回しか実行しないでほしい → 効果なし
55
58
 
56
59
  error_log('$is_processedのフラグは効果なく、この文はサイト読み込みにおいて2回表示されてしまう');
57
60
  }
58
61
  ```
62
+ ### 試したこと3
63
+ さらにrequire_onceも試しましたがやはり2回実行されました…
64
+ ```php
65
+ // header.php
66
+ require_once('insert.php'); // wp_insert_postは1回しか実行しないでほしい → 効果なし
67
+ ```
68
+ ```php
69
+ // insert.php'
70
+ $my_post = array(
71
+ 'post_title' => 'My post',
72
+ 'post_content' => 'This is my post.',
73
+ 'post_author' => 1
74
+ );
75
+ wp_insert_post( $my_post );
59
76
 
77
+ error_log('require_onceは効果なく、この文はサイト読み込みにおいて2回表示されてしまう');
78
+ ```
60
79
 
61
80
 

7

構成変更

2022/02/26 06:53

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -3,12 +3,11 @@
3
3
  WordPressです。サイト読み込みにおいて、テーマ内ファイルに書いた関数を1回しか実行させない方法を知りたいです。
4
4
 
5
5
  ### 発生している問題・エラーメッセージ
6
- WordPressでwp_insert_postをfunctions.phpに書くと、なぜか3回実行され、3件のレコードがINSERTされてしまいます。
6
+ wp_insert_postをfunctions.phpに書くと、なぜか3回実行され、3件のレコードがINSERTされてしまいます。
7
7
 
8
-
9
8
  ### 該当のソースコード
10
- ###### functions.php
11
9
  ```php
10
+ // functioins.php
12
11
  $my_post = array(
13
12
  'post_title' => 'My post',
14
13
  'post_content' => 'This is my post.',
@@ -17,14 +16,25 @@
17
16
  wp_insert_post( $my_post );
18
17
  ```
19
18
 
20
- ### 試したこと
19
+ ### 調べたこと
21
- 検索で類似の質問を2つ見つけたところ、この挙動はWordPressの平常運転であると知りましたが、解決方法の記載はありませんでした。
20
+ ググると類似の質問を2つあり、この挙動はWordPressの平常運転であると知りましたが、解決方法の記載はありませんでした。
22
21
  > [WordPressで、functions.php が複数回読まれるのは正常なのでしょうか?](https://teratail.com/questions/284189)
23
22
  > [WordPressにおける呼び出しの重複?](https://teratail.com/questions/204756)
24
23
 
24
+ ### 試したこと1
25
- なので自力で解決するしかないと思い、1回しか読み込まれないテンプレートを求めて試しにheader.phpに書いてみたところ、3回ではなく2回になりました。(1回しか読み込まれないテンプレートはないのでしょうか?)
25
+ なので自力で解決するしかないと思い、1回しか読み込まれないテンプレートを求めて同じコードを試しにheader.phpに書いてみたところ、3回ではなく2回になりました。(1回しか読み込まれないテンプレートはないのでしょうか?)
26
+ ```php
27
+ // header.php
28
+ $my_post = array(
29
+ 'post_title' => 'My post',
30
+ 'post_content' => 'This is my post.',
31
+ 'post_author' => 1
32
+ );
33
+ wp_insert_post( $my_post );
34
+ ```
26
35
 
36
+ ### 試したこと2
27
- さらに思いついた方法は、次のように、グローバル変数でフラグを立てておくこと(フラグがfalseの場合だけ実行し、1回実行したらtrueに変更しておく)ですが、これも同様で2回実行されてしまいました。
37
+ さらに思いついた方法は、次のグローバル変数でフラグを立てる方法(フラグがfalseの場合だけ実行し、1回実行したらtrueに変更する方法)ですが、これも2回実行されてしまいました。
28
38
 
29
39
  ```php
30
40
  // functioins.php

6

誤字

2022/02/26 06:34

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -43,7 +43,7 @@
43
43
 
44
44
  $is_processed = true; // もうwp_insert_postは実行しないでほしい → 効果なし
45
45
 
46
- error_log('$is_processedのフラグは効果なく、この文はサイト読み込みにおいて2回表示回表示されてしまう');
46
+ error_log('$is_processedのフラグは効果なく、この文はサイト読み込みにおいて2回表示されてしまう');
47
47
  }
48
48
  ```
49
49
 

5

誤字

2022/02/26 06:34

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -22,9 +22,9 @@
22
22
  > [WordPressで、functions.php が複数回読まれるのは正常なのでしょうか?](https://teratail.com/questions/284189)
23
23
  > [WordPressにおける呼び出しの重複?](https://teratail.com/questions/204756)
24
24
 
25
- なので自力で解決するしかないと思い、1回しか実行しない場所を求めてheader.phpに書いてみたところ、3回ではなく2回になりました。(1回だけ読み込まれテンプレートはないのでしょうか?)
25
+ なので自力で解決するしかないと思い、1回しか読み込まれないテンプレートを求めて試しにheader.phpに書いてみたところ、3回ではなく2回になりました。(1回しか読み込まれないテンプレートはないのでしょうか?)
26
26
 
27
- さらに思いついた方法は、次のように、グローバル変数でフラグを立てておくこと(フラグがtrueの場合だけ実行し、1回実行したらfalseに変更しておく)ですが、これも同様で2回実行されてしまいました。
27
+ さらに思いついた方法は、次のように、グローバル変数でフラグを立てておくこと(フラグがfalseの場合だけ実行し、1回実行したらtrueに変更しておく)ですが、これも同様で2回実行されてしまいました。
28
28
 
29
29
  ```php
30
30
  // functioins.php
@@ -41,7 +41,9 @@
41
41
  );
42
42
  wp_insert_post( $my_post );
43
43
 
44
- $is_processed = true; // もうwp_insert_postは実行しないでほしい
44
+ $is_processed = true; // もうwp_insert_postは実行しないでほしい → 効果なし
45
+
46
+ error_log('$is_processedのフラグは効果なく、この文はサイト読み込みにおいて2回表示回表示されてしまう');
45
47
  }
46
48
  ```
47
49
 

4

グローバル変数を用いた方法を記載

2022/02/26 06:31

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- WordPressでテーマ内ファイルに書いた関数を1回しか実行させない方法
3
+ WordPressです。サイト読み込みにおいて、テーマ内ファイルに書いた関数を1回しか実行させない方法を知りたいです。
4
4
 
5
5
  ### 発生している問題・エラーメッセージ
6
6
  WordPressでwp_insert_postをfunctions.phpに書くと、なぜか3回実行され、3件のレコードがINSERTされてしまいます。
@@ -10,9 +10,9 @@
10
10
  ###### functions.php
11
11
  ```php
12
12
  $my_post = array(
13
- 'post_title' => 'My post',
13
+ 'post_title' => 'My post',
14
- 'post_content' => 'This is my post.',
14
+ 'post_content' => 'This is my post.',
15
- 'post_author' => 1
15
+ 'post_author' => 1
16
16
  );
17
17
  wp_insert_post( $my_post );
18
18
  ```
@@ -22,13 +22,28 @@
22
22
  > [WordPressで、functions.php が複数回読まれるのは正常なのでしょうか?](https://teratail.com/questions/284189)
23
23
  > [WordPressにおける呼び出しの重複?](https://teratail.com/questions/204756)
24
24
 
25
- なので自力で解決するしかないと思い、1回しか実行しない場所を求めてheader.phpに書いてみたところ、3回ではなく2回になりました。
25
+ なので自力で解決するしかないと思い、1回しか実行しない場所を求めてheader.phpに書いてみたところ、3回ではなく2回になりました。(1回だけ読み込まれるテンプレートはないのでしょうか?)
26
26
 
27
- 最終的に思いついた解決策としては、
28
- 1. index.phpでwp_insert_postすることと(index.phpならさすがに1回しか実行されない)
29
- 2. グローバル変数でフラグを立てておくこと(フラグがtrueの場合だけ実行し、1回実行したらfalseに変更しておく)
27
+ さらに思いついた方法は、次のように、グローバル変数でフラグを立てておくこと(フラグがtrueの場合だけ実行し、1回実行したらfalseに変更しておく)ですが、これも同様で2回実行されてしまいました。
30
- です。が、しかしどう考えてもそれらの方法には違和感があるので、正しい方法があるのではないかと思っています。
31
28
 
29
+ ```php
30
+ // functioins.php
31
+ $is_processed = false;
32
+ ```
33
+ ```php
34
+ // header.php
35
+ global $is_processed;
36
+ if( $is_processed === false ){
32
- ご存じの方よろしくお願い致します。
37
+ $my_post = array(
38
+ 'post_title' => 'My post',
39
+ 'post_content' => 'This is my post.',
40
+ 'post_author' => 1
41
+ );
42
+ wp_insert_post( $my_post );
33
43
 
44
+ $is_processed = true; // もうwp_insert_postは実行しないでほしい
45
+ }
46
+ ```
34
47
 
48
+
49
+

3

誤字

2022/02/26 05:35

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  最終的に思いついた解決策としては、
28
28
  1. index.phpでwp_insert_postすることと(index.phpならさすがに1回しか実行されない)
29
- 2. グローバル数でフラグを立てておくこと(フラグがtrueの場合だけ実行し、1回実行したらfalseに変更しておく)
29
+ 2. グローバル数でフラグを立てておくこと(フラグがtrueの場合だけ実行し、1回実行したらfalseに変更しておく)
30
30
  です。が、しかしどう考えてもそれらの方法には違和感があるので、正しい方法があるのではないかと思っています。
31
31
 
32
32
  ご存じの方よろしくお願い致します。

2

修正

2022/02/26 05:35

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -18,13 +18,13 @@
18
18
  ```
19
19
 
20
20
  ### 試したこと
21
- 検索で類似の質問を2つ見つけましたが解決方法の記載ありませんでした。
21
+ 検索で類似の質問を2つ見つけたところ、この挙動はWordPressの平常運転であると知りましたが解決方法の記載ありませんでした。
22
22
  > [WordPressで、functions.php が複数回読まれるのは正常なのでしょうか?](https://teratail.com/questions/284189)
23
23
  > [WordPressにおける呼び出しの重複?](https://teratail.com/questions/204756)
24
24
 
25
25
  なので自力で解決するしかないと思い、1回しか実行しない場所を求めてheader.phpに書いてみたところ、3回ではなく2回になりました。
26
26
 
27
- 思いついた解決策としては、
27
+ 最終的に思いついた解決策としては、
28
28
  1. index.phpでwp_insert_postすることと(index.phpならさすがに1回しか実行されない)
29
29
  2. グローバル関数でフラグを立てておくこと(フラグがtrueの場合だけ実行し、1回実行したらfalseに変更しておく)
30
30
  です。が、しかしどう考えてもそれらの方法には違和感があるので、正しい方法があるのではないかと思っています。

1

解決策を追加

2022/02/26 05:33

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -24,7 +24,10 @@
24
24
 
25
25
  なので自力で解決するしかないと思い、1回しか実行しない場所を求めてheader.phpに書いてみたところ、3回ではなく2回になりました。
26
26
 
27
+ 思いついた解決策としては、
28
+ 1. index.phpでwp_insert_postすることと(index.phpならさすがに1回しか実行されない)
29
+ 2. グローバル関数でフラグを立てておくこと(フラグがtrueの場合だけ実行し、1回実行したらfalseに変更しておく)
27
- 最終手段としてindex.phpwp_insert_postるしかないか?と考えてはいますが、どう考えてもその方法は違和感があるので、正しい方法があるのではないかと思っています。
30
+ ですが、しかしどう考えてもそれらの方法は違和感があるので、正しい方法があるのではないかと思っています。
28
31
 
29
32
  ご存じの方よろしくお願い致します。
30
33