#wordpress
#wordpress
Вопрос:
Я пишу плагин, создающий страницы параметров администратора, используя комбо «register_setting», «add_settings_section», «add_settings_field». У меня есть родительское меню и 2 подменю. Создание страниц администратора в WordPress довольно просто … это начинается, когда вы создаете страницу администратора. Вот мои параметры для него. (это делается в ООП)
'parent_slug' => 'Tee_Off',
'page_title' => 'Tee-Off Reports',
'menu_title' => 'Tee-Off Reports',
'capability' => 'manage_options',
'menu_slug' => 'tee_offs_reports',
'callback' => 'path to my template file goes here'; //this is correct in my code
итак, помните, что мой список меню «tee_offs_reports», опубликованный выше, необходим для следующего шага…
class ClubHouseReports
{
function register()
{
add_action( 'admin_init', array( $this, 'teeoff_report_sellector') );
}
function teeoff_report_sellector() {
register_setting( 'my_options_group', 'timer_month' );
register_setting( 'my_options_group', 'timer_day' );
register_setting( 'my_options_group', 'timer_year' );
add_settings_section( 'teeoff-club-options', 'Get Monthy Report', array( $this, 'teeoff_month_section'), 'tee_offs_reports');
add_settings_field( 'timer_month', 'Month', array( $this, 'teeoff_month'), 'tee_offs_reports', 'teeoff-club-options');
add_settings_field( 'timer_day', 'Day', array( $this, 'teeoff_day'), 'tee_offs_reports', 'teeoff-club-options');
add_settings_field( 'timer_year', 'Year', array( $this, 'teeoff_year'), 'tee_offs_reports', 'teeoff-club-options');
}
function teeoff_month_section() {
echo '<p>Reports</p>';
}
function teeoff_month() {
$timer_month = esc_attr( get_option( 'timer_month' ) );
echo '<input type="text" class="regular-text" name="timer_month" value="'.$timer_month.'" placeholder="Month" />';
}
function teeoff_day() {
$timer_day = esc_attr( get_option( 'timer_day' ) );
echo '<input type="text" class="regular-text" name="timer_day" value="'.$timer_day.'" placeholder="Day" />';
}
function teeoff_year() {
$timer_year = esc_attr( get_option( 'timer_year' ) );
echo '<input type="text" class="regular-text" name="timer_month" value="'.$timer_year.'" placeholder="Year" />';
}
}
Этот класс выше вызывается из корневого файла плагина, точно так же, как тот, который работает. Создается экземпляр, после чего вызывается метод «register()».
В моем файле шаблона я делаю это…. точно так же, как тот, который работает.
<?php settings_errors(); ?>
<form method="post" action="options.php">
<?php settings_fields( 'my_options_group' ); ?>
<?php do_settings_sections('teeoff-club-options'); ?>
<?php submit_button(); ?>
</form>
ИТАК, моя проблема в том, что … за исключением случаев, когда значения должны меняться при повторении одного и того же кода, в данном случае, например, вам нужно назначить новый модуль меню, новое имя для «register_setting» и убедиться, что он нацелен на правильный обратный вызов, и, уверяю вас, все правильноустановите правильно … по какой-то причине это не будет отображаться.
Я не получаю ошибок, все, что я вижу, это кнопка отправки, и если я использую ее, я получаю сообщение «успех», так что все в рамках… но на странице «tee_offs_reports» ничего не отображается, кроме кнопки отправки… что имеет смысл, поскольку оно там жестко запрограммировано.
Все это, чтобы сказать… Я десятки раз просматривал свой код, чтобы найти самую маленькую / глупую синтаксическую ошибку или что-нибудь, почему эта область администрирования не будет работать, в то время как другая, которая использует точно такую же структуру и логику, работает на 100%. Вы видите что-то неправильное в этом коде? Не обращайте внимания на большой пробел между приведенным выше кодом, это произошло только тогда, когда я вставил его сюда…. Есть ли ограничение в WordPress, о котором я еще не знаю? Почему это не работает? Хотя синяя печать этого работает просто отлично.
Ответ №1:
Хорошо, теперь я действительно сбит с толку… Я заставил его работать, но я очень сомневаюсь, что следую правилам кодекса… или я?????
вот код, который работает на 100%
function teeoff_report_sellector() {
register_setting( 'my_options_group', 'timer_month' );
register_setting( 'my_options_group', 'timer_day' );
register_setting( 'my_options_group', 'timer_year' );
add_settings_section('tee-off-reports', 'Get Monthy Report', array( $this, 'teeoff_month_section'), 'tee-off-reports');
add_settings_field('timer_month', 'Month', array( $this, 'teeoff_month'), 'tee-off-reports', 'tee-off-reports');
add_settings_field('timer_day', 'Day', array( $this, 'teeoff_day'), 'tee-off-reports', 'tee-off-reports');
add_settings_field('timer_year', 'Year', array( $this, 'teeoff_year'), 'tee-off-reports', 'tee-off-reports');
}
function teeoff_month_section() {
echo '<p>Reports</p>';
}
function teeoff_month() {
$timer_month = esc_attr( get_option( 'timer_month' ) );
echo '<input type="date" class="regular-text" name="timer_month" value="'.$timer_month.'" placeholder="Month" />';
}
function teeoff_day() {
$timer_day = esc_attr( get_option( 'timer_day' ) );
echo '<input type="text" class="regular-text" name="timer_day" value="'.$timer_day.'" placeholder="Day" />';
}
function teeoff_year() {
$timer_year = esc_attr( get_option( 'timer_year' ) );
echo '<input type="text" class="regular-text" name="timer_year" value="'.$timer_year.'" placeholder="Year" />';
}
То, что я сделал, это … вместо того, чтобы использовать меню, как говорит вам кодекс, …(и первая страница администратора, которую я создал, хорошо работает таким образом) Я заменил его идентификатором «add_settings_section» … поэтому, если вы посмотрите на предпоследний параметр для каждого «add_settings_field», теперь им присваивается идентификатор раздела, предполагается, что codex ищет меню… Я всегда так думал… опять же, первый, который я сделал, работает потрясающе таким образом … так что 2 последних параметра «add_settings_field» одинаковы. Странно! Нигде в приведенном выше коде не упоминается страница slug, но это работает на 100% и не нарушает какой-либо другой код.
Теперь мне интересно… я нашел ошибку в API настроек? это будет исправлено позже, и мой плагин перестанет работать? Или я наткнулся на решение, отчаявшись попробовать целую кучу вещей???
Я не понимаю … если есть настоящий гуру WordPress, который может мне это объяснить, я был бы очень признателен!