在多个函数中使用相同的类

时间:2019-05-06 作者:Ryszard Jędraszyk

我正在创建一个插件,它将在数量输入字段周围添加“-”和“+”增量按钮。我留下了一些要点,以便更清楚地说明问题。

我创建了类qty_increment_buttons_settings 使用设置API,在管理、数值和复选框中有2个设置。该数值作为变量传递给js文件。我以前写过类似的插件,它也能工作,但这里更复杂-我想在我的其他函数中使用这个类的新实例,例如qib_create_button 通过公共函数访问复选框值qib_get_settings 在此类中定义。

还有,我有什么办法可以说明truefalse 在内部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 );  
}

1 个回复
最合适的回答,由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\');
}
我可以以同样的方式将这些参数进一步传递给嵌套操作。

相关推荐