admin管理员组文章数量:1426072
I'm creating a plugin which will add "-" and "+" increment buttons around quantity input field. I left some essential lines to more clearly present the problem.
I created class qty_increment_buttons_settings
with 2 settings in admin, numeric value and checkbox, using settings API. This numeric value is passed as a variable to js file. I wrote similar plugin before and it worked, but here it's more complex - I would like to use this new instance of class in my other functions, for example within qib_create_button
to access checkbox value, through public function qib_get_settings
defined within this class.
Also, is there any way I could specify true
and false
within add_action
hooks, so I don't need to create 2 extra functions?
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 );
}
I'm creating a plugin which will add "-" and "+" increment buttons around quantity input field. I left some essential lines to more clearly present the problem.
I created class qty_increment_buttons_settings
with 2 settings in admin, numeric value and checkbox, using settings API. This numeric value is passed as a variable to js file. I wrote similar plugin before and it worked, but here it's more complex - I would like to use this new instance of class in my other functions, for example within qib_create_button
to access checkbox value, through public function qib_get_settings
defined within this class.
Also, is there any way I could specify true
and false
within add_action
hooks, so I don't need to create 2 extra functions?
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 );
}
Share
Improve this question
edited May 6, 2019 at 7:34
Ryszard Jędraszyk
asked May 6, 2019 at 5:15
Ryszard JędraszykRyszard Jędraszyk
3244 silver badges17 bronze badges
1
- Possible duplicate of wordpress.stackexchange/q/332656/30597 – norman.lol Commented Jun 10, 2019 at 9:23
1 Answer
Reset to default 0I found a solution to this. In my other project I use this function in my settings class:
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;
}
Then outside the class in the main php file:
$args = array (
'display_type' => $lal_settingz_page->lal_get_settings('lal_display_type'),
'add_fa' => $lal_settingz_page->lal_get_settings('lal_add_fa')
);
Whenever I want to pass these settings as arguments, I use the following construction:
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/releases/v5.8.2/css/all.css');
}
I can pass these arguments further, to nested actions in the same way.
本文标签: plugin developmentUsing the same class across multiple functions
版权声明:本文标题:plugin development - Using the same class across multiple functions 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745420835a2657892.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论