В настоящее время я создаю плагин класса для почтовой системы.php class - Создайте крошечную обертку
Однако я хотел бы сделать своего рода классную оболочку, чтобы использовать ее как простую функцию. Но мне нужно зарегистрировать в своем классе некоторые скрипты и константу, а затем запустить класс.
С помощью текущей оболочки я запустил функцию _contruct для класса. Я хочу инициализировать класс, а затем, когда я называю крошечную оболочку, он не выполнит экземпляр contrucct и не получит правильную функцию класса.
Как это сделать? Это имеет смысл?
Вот мой пример кода:
if(!class_exists('Post_Like')) {
class Post_Like {
static private $instance = null;
static public function getInstance() {
if(self::$instance == null) {
self::$instance = new self;
}
return self::$instance;
}
public function __construct() {
$this->define_constants();
// Load public/admin CSS and JS.
add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts'));
add_action('admin_enqueue_scripts', array($this, 'enqueue_scripts'));
// register actions for ajax
add_action('wp_ajax_nopriv_post_like', array($this, 'post_like'));
add_action('wp_ajax_post_like', array($this, 'post_like'));
}
public function define_constants() {
define('POST_LIKE_PATH', trailingslashit(str_replace('\\', '/', dirname(__FILE__))));
define('POST_LIKE_URL', site_url(str_replace(trailingslashit(str_replace('\\', '/',ABSPATH)), '', POST_LIKE_PATH)));
}
public function enqueue_scripts() {
// enqueue js scripts
}
public function post_like() {
// do some stuff
}
public function post_already_like() {
// do some stuff
}
// I want to wrap this function to use it anywhere easily
public function get_post_like() {
// do some stuff
}
}
}
new Post_Like();
if(!function_exists('Post_Like')) {
/**
* Tiny wrapper function
*/
function get_post_like() {
$Post_Like = Post_Like::getInstance();
return $Post_Like->get_post_like(); // it execute _contruct, I want to avoid that
}
}
Спасибо за ваш ответ. Однако без запуска класса new Post_Like(); он не может работать. Сценарии не регистрируются, потому что фильтр вызывается до того, как запускается сообщение get. Но если я сохраню строку, она работает, но у меня все еще есть двойное или несколько объявлений конструктора. Так что это не решило мою проблему. Я сделал класс extends, чтобы он наконец-то работал. – freaky