2016-05-11 2 views
1

Я создаю плагин Wordpress, где я хочу, чтобы некоторые настройки были применены. Каждая установка имеет очень схожую функциональность, так что моя мысль была использовать ту же функцию при проверке и объект изменения, поэтому некоторые атрибуты объекта могут быть доступны:

//Width and margins section 
add_settings_section(
    'pdfcrowd_section_dimension', // ID 
    'PDF widths and margins', // Title 
    array($this, 'dimension_section_info'), // Callback 
    'pdfcrowd_options' // Page 
); 

$this->field_id = 'pdfcrowd_pdf_width'; 
$this->field_type = 'number';   
add_settings_field(
    $this->field_id, // ID 
    'PDF with in units', // Title 
    array($this, 'sanitizefield'), // Callback 
    'pdfcrowd_options', // Page 
    'pdfcrowd_section_dimension' // Section   
); 

$this->field_id = 'pdfcrowd_pdf_height'; 
$this->field_type = 'number';   
add_settings_field(
    $this->field_id , // ID 
    'PDF page height in units. -1 for a single page PDF.', // Title 
    array($this, 'sanitizefield'), // Callback 
    'pdfcrowd_options', // Page 
    'pdfcrowd_section_dimension' // Section   
    );    

$this->field_id = 'pdfcrowd_pdf_margin_top'; 
$this->field_type = 'number';   
add_settings_field(
    $this->field_id, // ID 
    'Top PDF page margin in units.', // Title 
    array($this, 'sanitizefield'), // Callback 
    'pdfcrowd_options', // Page 
    'pdfcrowd_section_dimension' // Section   
);   

Есть много больше настроек, но моя мысль, что sanitizefield как функцию обратного вызова для каждого параметра, а затем изменить field_id и field_type объекта. Проблема в том, что значения field_id и field_type - это значения, установленные последним в коде.

Так что мой вопрос: возможно ли отправить field_type и field_id каким-то образом и использовать функцию обратного вызова для дезинфекции. Или мне действительно нужно сделать одну функцию обратного вызова для каждой настройки параметра?

$this->field_id = 'pdfcrowd_pdf_width'; 
$this->field_type = 'number';   
add_settings_field(
    $this->field_id, // ID 
    'PDF with in units', // Title 
    array($this, 'sanitizefield1'), // Callback 
    'pdfcrowd_options', // Page 
    'pdfcrowd_section_dimension' // Section   
); 

$this->field_id = 'pdfcrowd_pdf_height'; 
$this->field_type = 'number';   
add_settings_field(
    $this->field_id , // ID 
    'PDF page height in units. -1 for a single page PDF.', // Title 
    array($this, 'sanitizefield2'), // Callback 
    'pdfcrowd_options', // Page 
    'pdfcrowd_section_dimension' // Section   
    ); 

и т.д.

ответ

1

Вы можете передать аргументы функции обратного вызова, используя саму функцию, вы оставляете вне $args

add_settings_field(
    $this->field_id , // ID 
    'PDF page height in units. -1 for a single page PDF.', // Title 
    array($this, 'sanitizefield2'), // Callback 
    'pdfcrowd_options', // Page 
    'pdfcrowd_section_dimension', // Section 
    array('key'=> 'variable') 
); 

теперь это то, где я мог бы быть не понять вас. Вы хотите, чтобы данные были доступны за пределами обратного вызова?

Вы не сможете изменить переменные с большим успехом, но вы можете создать собственный фильтр и использовать, чтобы внести изменения

public function sanitizefield2($array){ 
    $array= apply_filters('hook_name', $array); 
} 

и вклиниться в него обычным способом

add_filter('hook_name', 'function'); 
+0

ага , Большое спасибо! На самом деле я просто искал способ отправки необязательных параметров. Я смотрел на https://codex.wordpress.org/Creating_Options_Pages # example2, и этот кодx не сделал этого очень ясно, что это было возможно. БОЛЬШОЕ СПАСИБО! – bestprogrammerintheworld

+0

плюс 1 для пользовательского фильтра. – bestprogrammerintheworld