简体   繁体   中英

Setup a hook inside functions to use within another function

I'm trying to setup IF statements within a function to determine if an outside function is being used. I guess one way my question could go .. how could I set up hook in the outside functions (app1, app2) to build the IF statement off of? Wrap them in a class? If so, how could I construct the statement?

The logic doesn't really seem to make sense, at least from my level of PHP knowledge. The purpose of this, I've got 2 functions (app1 and app2), each creating a different set of options for two separate admin panels. The constructors and markup of the options in each panel is the same, which would be in the "wrapper" function. But currently, having to use two separate "wrapper" functions to handle this. One function for Panel1 and another for Panel2.

So I've been tasked with combining the two wrapper functions as it is kind of redundant to have two seperate functions that basically do the same thing. Here's a summarized bit of the code. As you can see, the only difference in each is the "$panel_type = ..." bit

function app1() {
    $app1_options = array();

    $app1_options[] = array(
        'type' => 'text',
        'name' => 'Text Field',
        'id' => 'text_field_one'
    );

    return $app1_options;
}

function app2() {
    $app2_options = array();

    $app2_options[] = array(
        'type' => 'text',
        'name' => 'Text Field',
        'id' => 'text_field'
    );

    return $app2_options;
}

function wrapper_panel1() {
    $panel_type = app1();

    foreach( $panel_type as $value ) {
        switch ( $value[ 'type' ] ) {
            case 'text':
                // input stuff
            break;
        }
    }
}

function wrapper_panel2() {
    $panel_type = app2();

    foreach( $panel_type as $value ) {
        switch ( $value[ 'type' ] ) {
            case 'text':
                // input stuff
            break;
        }
    }
}

So really looking for some kind of way to merge those two functions together, something like:

function wrapper() {
    if ( app1() ) {
        $panel_type = app1();
    }

    if ( app2() ) {
        $panel_type = app2();
    }

    foreach( $panel_type as $value ) {
        switch ( $value[ 'type' ] ) {
            case 'text':
                // input stuff
            break;
        }
    }
}

Could something be done with setting up a class/object on this? Or any type of change that could achieve this.

Really appreciate any help that can be provided on this. Thanks!

Just pass the app id to the wrapper function:

function wrapper_panel ($appId) {

    $optsFunc = 'app'.$appId;
    $panel_type = $optsFunc();

    foreach( $panel_type as $value ) {
        switch ( $value[ 'type' ] ) {
            case 'text':
                // input stuff
            break;
        }
    }

}

// In app1:
wrapper_panel(1);

// In app2:
wrapper_panel(2);

...or better, pass the options into the wrapper function when you call it:

function wrapper_panel ($panel_type) {

    foreach( $panel_type as $value ) {
        switch ( $value[ 'type' ] ) {
            case 'text':
                // input stuff
            break;
        }
    }

}

// In app1
wrapper_panel(app1());

// In app2
wrapper_panel(app2());

EDIT

Given the constraints imposed by Wordpress, I think the easiest and least horrible thing to do is to call wrapper_panel() from within the app1() and app2() functions:

function app1() {

    $app1_options = array();

    $app1_options[] = array(
        'type' => 'text',
        'name' => 'Text Field',
        'id' => 'text_field_one'
    );

    wrapper_panel($app1_options);

}
function app2() {

    $app2_options = array();

    $app2_options[] = array(
        'type' => 'text',
        'name' => 'Text Field',
        'id' => 'text_field'
    );

    wrapper_panel($app2_options);

}

function wrapper_panel ($panel_type) {

    foreach( $panel_type as $value ) {
        switch ( $value[ 'type' ] ) {
            case 'text':
                // input stuff
            break;
        }
    }

}

...and register the app1 and app2 functions with Wordpress, instead of the wrapper_panel function.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM