以下是我最近为客户编写的一个类的一部分:
if ( is_admin() )
RevenueCalculatorAdminSettings::init();
/**
* Call this class with:
*
* RevenueCalculatorAdminSettings->init();
*
* or
*
* RevenueCalculatorAdminSettings->init( \'text_domain\' );
*
*/
class RevenueCalculatorAdminSettings {
public static $text_domain = \'\';
/**
* Add actions to produce new settings.
*
* @param string $text_domain The text domain to use for localization. Default is \'\'.
*/
public static function init( $text_domain = \'\' ) {
self::$text_domain = $text_domain;
add_action( \'admin_menu\', array( __CLASS__, \'admin_settings_section\' ) );
add_action( \'admin_init\', array( __CLASS__, \'register_settings\' ) );
}
/**
* Register new settings.
*/
public static function register_settings() {
register_setting( \'general\', \'commissions_calculator_commission\', array( __CLASS__, \'validate_commission\' ) );
register_setting( \'general\', \'commissions_calculator_month_format\', array( __CLASS__, \'validate_month_format\' ) );
}
/**
* Adds new settings section to the Settings - General page.
*/
public static function admin_settings_section() {
add_settings_section( \'commissions-calculator\', __( \'Commissions Calculator\', self::$text_domain ), array( __CLASS__, \'commissions_calculator_fields\' ), \'general\' );
}
/**
* Adds new settings field(s).
*/
public static function commissions_calculator_fields() {
add_settings_field( \'commissions-calculator-commission\', __( \'Commission\', self::$text_domain ), array( __CLASS__, \'commission\' ), \'general\', \'commissions-calculator\', array( \'label_for\' => \'commissions-calculator-commission\' ) );
add_settings_field( \'commissions-calculator-month_format\', __( \'Month Format\', self::$text_domain ), array( __CLASS__, \'month_format\' ), \'general\', \'commissions-calculator\', array( \'label_for\' => \'commissions-calculator-month-format\' ) );
}
/**
* Echo markup for Commission setting field.
*/
public static function commission() {
/**
* id commissions-calculator-commission
* value get_option( \'commissions_calculator_commission\' )
*/
printf( \'<input id="commissions-calculator-commission" name="commissions_calculator_commission" type="text" value="%s" class="small-text" /><label for="commissions-calculator-commission">%s</label>\', get_option( \'commissions_calculator_commission\' ), __( \' For 60%, use 0.60.\', self::$text_domain ) );
}
/**
* Validate Commission option.
*
* @param string|array $tainted_input Tainted input from the admin form. Do not use this data without cleaning.
*/
public static function validate_commission( $tainted_input ) {
if ( is_numeric( $tainted_input ) )
return $tainted_input;
add_settings_error( \'commissions-calculator\', \'commissions-calculator-commission\', __( \'Commission must be numeric. Defaulting to 60%\', self::$text_domain ) );
return \'0.60\';
}
/**
* Echo markup for Month Format setting field.
*/
public static function month_format() {
/**
* id commissions-calculator-month_format
* value get_option( \'commissions_calculator_month_format\' )
*/
/** Use \'F\' in date for full long Month names.
Use \'M\' in date for short, 3-letter Month names. */
printf(
\'<label><input name="commissions_calculator_month_format" type="radio" value="F" %s/> <span>%s</span></label><br />
<label><input name="commissions_calculator_month_format" type="radio" value="M" %s/> <span>%s</span><label>\',
checked( get_option( \'commissions_calculator_month_format\' ), \'F\', false ),
__( \'Full month names (January, Februrary, etc.) in top row.\', self::$text_domain ),
checked( get_option( \'commissions_calculator_month_format\' ), \'M\', false ),
__( \'Short month names (Jan, Feb, etc.) in top row.\', self::$text_domain )
);
}
/**
* Validate Month Format option.
*
* @param string|array $tainted_input Tainted input from the admin form. Do not use this data without cleaning.
*/
public static function validate_month_format( $tainted_input ) {
/** Default to \'M\'. Convert formats other than \'M\' and \'F\' to \'M\'. */
if ( \'F\' == $tainted_input )
return \'F\';
else
return \'M\';
}
}