我正在创建一个插件,它将在数量输入字段周围添加“-”和“+”增量按钮。我留下了一些要点,以便更清楚地说明问题。
我创建了类qty_increment_buttons_settings
使用设置API,在管理、数值和复选框中有2个设置。该数值作为变量传递给js文件。我以前写过类似的插件,它也能工作,但这里更复杂-我想在我的其他函数中使用这个类的新实例,例如qib_create_button
通过公共函数访问复选框值qib_get_settings
在此类中定义。
还有,我有什么办法可以说明true
和false
在内部add_action
钩子,所以我不需要创建2个额外的函数?
add_action( \'template_redirect\', \'run_qib\' );
function run_qib() {
if (! is_cart() && ! is_product()) return; // Only if it\'s product or cart page.
add_action( \'wp_enqueue_scripts\', \'qty_increment_buttons\' );
}
function qty_increment_buttons( ) {
$plugin_slug = \'qty-increment-buttons-for-woocommerce\';
$plugin_short_slug = \'qty-increment-buttons\';
add_action(\'wp_head\', \'qib_apply_styles\', 20);
wp_enqueue_script( $plugin_short_slug, plugins_url() . \'/\' . $plugin_slug . \'/js/\' . $plugin_slug . \'.js\', array(\'jquery\'), \'\', true);
$qib_settings_page = new qty_increment_buttons_settings();
add_action( \'woocommerce_before_add_to_cart_quantity\', \'qib_create_button_before\' );
add_action( \'woocommerce_after_add_to_cart_quantity\', \'qib_create_button_after\' );
// js variable name => variable value
$data = array (
\'qib_button_size\' => $qib_settings_page->qib_get_settings(\'qib_button_size\'),
);
wp_localize_script( $plugin_short_slug, \'phpVars\', $data );
}
function qib_create_button_before() {
echo qib_create_button( true );
}
function qib_create_button_after() {
echo qib_create_button( false );
}
function qib_create_button( $is_before ) {
$sign = ( 1 == $qib_settings_page->qib_get_settings(\'qib_minus_first\') && $is_before === true ? \'-\' : \'+\' );
return sprintf(\'<button type="button" class="%1$s" >%2$s</button>\', $sign === \'-\' ? \'minus\' : \'plus\', $sign );
}
最合适的回答,由SO网友:Ryszard Jędraszyk 整理而成
我找到了解决办法。在我的另一个项目中,我在设置类中使用此函数:
public function lal_get_settings( $index = false ) {
$defaults = array ( \'lal_display_type\' => \'icon\', \'lal_add_fa\' => false);
$settings = get_option( \'lal_settingz\', $defaults );
if ( $index && isset( $settings[ $index ] ) ) {
return $settings[ $index ];
}
return $settings;
}
然后在主php文件的类外:
$args = array (
\'display_type\' => $lal_settingz_page->lal_get_settings(\'lal_display_type\'),
\'add_fa\' => $lal_settingz_page->lal_get_settings(\'lal_add_fa\')
);
每当我想将这些设置作为参数传递时,我都会使用以下结构:
add_action(\'wp_enqueue_scripts\', function() use ( $args ) { login_account_logout( $args ); }, 1);
function login_account_logout( $args ) {
if ( $args[\'display_type\'] === \'icon\' && $args[\'add_fa\'] == 1 )
wp_enqueue_style(\'lal-CDN-font-awesome\', \'//use.fontawesome.com/releases/v5.8.2/css/all.css\');
}
我可以以同样的方式将这些参数进一步传递给嵌套操作。