Лучшая практика WordPress для вызова функций при активации - PullRequest
0 голосов
/ 28 февраля 2020

Я создаю плагин для списка каталогов, используя PHP class, и метод __construct() недоступен.

final class ShibbirDirectoryListing
{
    /**
     * create pages and setup the plugin tables
     * 
     * @since 1.0.0 
     */
    public function initial_setup()
    {

        $login_page_title = 'login';
        $login_page_content = 'login page content';
        $login_page_check = get_page_by_title($login_page_title);
        $login_page = array(
            'post_type' => 'page',
            'post_title' => $login_page_title,
            'post_content' => $login_page_content,
            'post_status' => 'publish',
            'post_author' => 1,
            'post_slug' => 'login'
        );
        if (!isset($login_page_check->ID) && ! $this->is_slug_exists('login')) {
            $login_page_id = wp_insert_post($login_page);
        }
    }

    /**
     * Check if the page is eixst
     * 
     * @since 1.0.0 
     */
    public function is_slug_exists($post_name)
    {
        global $wpdb;
        $table_name = $wpdb->prefix . 'posts';
        if ($wpdb->get_row("SELECT post_name FROM {$table_name} WHERE post_name = '" . $post_name . "' ", ARRAY_A)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Main ShibbirDirectoryListing Instance
     * 
     * Ensure only one instance of ShibbirDirectoryListing is loaded
     *      
     * @since 1.0.0
     * @static
     * @return ShibbirDirectoryListing - Main instance
     */
    public static function instance()
    {
        if (is_null(self::$instance)) {
            self::$instance = new self();
            self::$instance->setup();
        }

        return self::$instance;
    }

}


/**
 * Register plugin settings
 */
register_activation_hook( __FILE__, array( 'ShibbirDirectoryListing', 'initial_setup' ) );

/**
 * Get the instance of the plugin 
 */
function shibbir_directory_listing()
{
    return ShibbirDirectoryListing::instance();
}

// Let's start the Engine
shibbir_directory_listing();

Здесь вы видите, что мне нужно создать несколько страниц на register_activation_hook и его вызов initial_setup метода class.

В initial_setup методе мне нужно вызвать другой метод с именем is_slug_exists , но У меня есть ошибка для этого вызова, потому что в то время он еще не находится в контексте класса.

Итак, каков наилучший способ вызова метода is_slug_exists?

1) Должен ли я использовать код функции is_slug_exists в * Метод 1025 *?
2) Должен ли я использовать register_activation_hook в методе __construct, а затем вызвать метод is_slug_exists?
3) Если I go с 2) , то действительно ли нужен instance() stati c метод?
4) ИЛИ я должен вызывать функцию на register_activation_hook вместо вызова метода класса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...