Прежде всего, я хочу извиниться за этот очень большой вопрос, но все эти вопросы беспокоили мой маленький мозг (или не мозг!) В течение прошлых нескольких дней, поскольку я не получил никакого подходящего ответа.Я попрошу сначала прочитать это медленно, и кто бы ни знал какую-либо его часть, пожалуйста, попробуйте ответить на нее только для этой части.Я действительно буду благодарен любому, кто ответит на любую его часть.
Я разрабатываю плагин (используя ООП), где игроки могут зарегистрироваться здесь и сыграть в какую-нибудь игру в регби онлайн.Для этого я создал таблицу базы данных (wp_rugby_players
) таким образом, чтобы при использовании API регистрации хуков эта таблица автоматически создавалась и удалялась при активации и деактивации плагина, соответственно.
Однако я должен упомянутьчто такого рода создание таблицы базы данных является плохим способом использования WordPress, поскольку она сама предоставляет множество опций (которые включают использование опций, пользовательских полей, таксономий и т. д.) для использования в таких целях.
Тем не менее, так как это мой первый раз, я хотел бы знать, как действовать в таких случаях, используя ООП способ программирования плагинов WordPress.Проблема в том, что моя регистрация хуков не работает полностью, и возникают некоторые проблемы.Так что, если кто-нибудь может мне помочь, пожалуйста, это будет просто здорово.Ниже приведен мой фрагмент кода: -
// Placeholder - #1
class class_play_rugby_game
{
function __construct() {
// Placeholder - #2
register_activation_hook( __FILE__, array( &$this, 'database_setup' ) );
register_deactivation_hook( __FILE__, array( &$this, 'database_uninstall' ) );
add_action( 'admin_menu', array( &$this, 'admin_actions' ) );
}
function database_setup() {
global $wpdb;
// Placeholder - #3
$table_name = $wpdb->prefix . "top_rugby_players";
$current_year = date('Y');
if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {
$sql = "CREATE TABLE `".$table_name."`......"; // Database Table Creation Code correct, as I have checked it using "phpMyAdmin"
/**
* This code snippet is actually taken from a non-OOP Plugin code,
* but still I would want to use it in case anything goes wrong.
*/
if( !require_once(ABSPATH . 'wp-admin/includes/upgrade.php') ) {
die('Foolish Plugin has added its own maybe_upgrade* Function');
}
// Placeholder - #4
dbDelta($sql);
$welcome_name = "Mr. Wordpress";
$welcome_text = "Congratulations, you just completed the installation!";
// Just for testing
$rows_affected = $wpdb->insert( $table_name, array(
'name' => $welcome_name,
'time' => current_time('mysql'),
'text' => $welcome_text
) );
}
}
function database_uninstall() {
global $wpdb;
// Placeholder - #5
$table_name = $wpdb->prefix . "top_rugby_players";
$wpdb->query("DROP TABLE IF EXISTS $table_name");
}
function admin_actions() {
// Placeholder - #6
if( function_exists('add_menu_page') ) {
add_menu_page( __("Play Rugby Game"), __("Top Rugby Players"), 'edit_plugins', "list-top-players" );
}
// Placeholder - #7
if( function_exists('add_submenu_page') ) {
add_submenu_page( "list-top-players", __("List of Top Players"), __("Top Rugby Players"), 'edit_plugins', "list-top-players", array($this, "list_top_players_page"));
add_submenu_page( "list-top-players", __("Add Top Players"), __("Add New"), 'edit_plugins', "add-new-player-page", array($this, "add_new_player_page"));
}
}
}
$obj_play_rugby_game = new class_play_rugby_game();
Теперь я расскажу все проблемы, одну за другой.
Placeholder - #1
: -
Есть ли проблемы смоя структура именования классов?Если да, пожалуйста, дайте мне знать, чтобы я мог следовать стандартам.
Placeholder - #2
: -
Я немного сбит с толку относительно того, где и как правильно использовать объект этого класса в функциях "register_activation_hook
" & "register_deactivation_hook
».Кроме того, они синтаксически правильно расположены внутри конструктора?
Placeholder - #3
& Placeholder - #5
: -
Есть несколько случаев, когда мне приходится писать одну и ту же строку (в данном случае имя таблицы) в каждом методе, хотя я бы оченьтак же, как это хранить в некотором свойстве класса вместо этого.Какова была бы целесообразность этого обходного пути для работы с API "register_activation_hook
", "register_deactivation_hook
", "add_action
", "add_filter
", "add_menu_page
" и "add_submenu_page
"?Будет ли доступно значение свойств класса при вызове только что упомянутых API.
Placeholder - #4
: -
Как узнать, работает ли dbDelta($sql)
или нет?Если нет, то как заставить его работать в этом методе класса?
Placeholder - #6
& Placeholder - #7
: -
Я видел в плагине не-OOP, использующем эти 2 проверки "function_exists('add_menu_page')
"&" function_exists('add_submenu_page')
".Работают ли эти проверки и стоит ли проверять эти два API?
Placeholder - #6
& Placeholder - #7
: -
Как я уже говорил, существует несколько экземпляров одного и того же текста.здесь.Еще несколько примеров из них - параметр «menu_slug» главного меню и параметр «parent_slug» подменю.То же самое относится и к параметру «возможности» меню.Если возможно, как я могу использовать значения свойств класса здесь, вместо того, чтобы писать один и тот же текст снова и снова?
Некоторые общие вопросы : -
- Мне нужно иметь регистрационную форму игрока в панели администратора, поэтому мне, вероятно, потребуются вид, контроллер и модель.Так может кто-нибудь предложить, пожалуйста, возможный способ сделать это надлежащим образом, так как это самая тривиальная часть этого плагина?
- Всякий раз, когда я активирую плагин из области диспетчера плагинов, я получаюследующее сообщение "
The plugin generated 585 characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.
" Кто-нибудь может сказать, пожалуйста, из написанного выше, что может вызвать такого рода предупреждающее сообщение?
Любой, кто знает какую-либо небольшую часть этого, пожалуйста, ответьте только на эту часть,Последние несколько дней я ломаю голову, не отвечая на эти вопросы.Пожалуйста, помогите мне.Заранее спасибо.