如果看不到更多的代码,很难说为什么。因此,如果您有兴趣了解原因,那么我鼓励您分享更多代码。
如果您只是在寻找一个解决方案,那么下面的方法可能会奏效。(我说可能是因为我不知道,因为我没有你的代码。)我们要做的是确保插入表的代码只执行一次。因为我们要在init
钩子register()
方法将只触发一次,因为init
只开火一次。因此,条件检查实际上是不必要的,但现在我们可以更加肯定地知道,该表只会被添加一次。
功能。php
require_once( PATH_TO . \'/class-wpse106269.php\' );
add_action( \'init\', [ wpse106269::getInstance(), \'register\' ] );
wpse106269级。php
<?php
class wpse106269 {
private static $instance;
protected $table_already_inserted;
protected function __construct() {}
protected function __clone() {}
protected function __wakeup() {}
public static function getInstance() {
if( ! isset( self::$instance ) ) {
self::$instance = new self;
}
return self::$instance;
}
public function register() {
if( ! $table_already_inserted ) {
$this->insert_table();
$this->table_already_inserted = true;
}
}
protected function insert_table() {
//* Insert table here
}
添加:
我把它放在了我的函数中。仅激活ACF(免费)的php。init钩子只运行一次。因此,这要么是ACF(pro)的问题,要么是另一个仍然处于活动状态的插件不能很好地与ACF(pro?)配合使用。
//* Don\'t access this file directly
defined( \'ABSPATH\' ) or die();
add_action( \'init\', [ new wpse106269(), \'init\' ] );
class wpse106269{
protected $n = 1;
public function init() {
echo $this->n;
$this->n = 1 + $this->n;
}
}