web-dev-qa-db-ja.com

配列を使用してワードプレスのショートコードを自動生成しますか?

私は自動的に与えられた配列キーと値でショートコードを生成するショートコードを作成しました。関数名は動的には生成されません。

注:配列KEY = ShortcodeNameおよび値= Wordpress Optionフィールド。

add_shortcode("auto_gen", "auto_gen");
function auto_gen() {
    $a = array(
        "get_address"       =>  "mg_admin_address",
        "get_phone"         =>  "mg_admin_phone",
        "get_fax"           =>  "mg_admin_fax",
        "get_email"         =>  "mg_admin_email",
        "get_hrs_mon"       =>  "mg_work_hrs_mon_frd",
        "get_hrs_sat"       =>  "mg_work_hrs_sat"
    );
    foreach ($a as $k => $v) {
        if(has_shortcode($k)) {
            echo "<br>Found: ". $k;
        } else {
            add_shortcode($k,  $k. "_init");
            function $k. "_init"() {
                return get_option[$v, ''];
            }
        }
        add_shortcode();
        echo $k ." -> ". $v. "<br />";
    }
}

これを行うには可能な方法があります。

注:

ここで、get_address配列キーはショートコードです。そしてそれはループを通過するときに動的に生成されます。 get_addressは変更可能です。 get_user_addressでget_addressを変更すると、get_user_addressが生成されます。 「get_address」、「get_phone」はEND LEVELで変更可能です。

開発者はget_optionsを使用して作成されたwp_optionsにアクセスするためのショートコードも生成します。単純に配列の要素をプッシュします。例えば"shortcode_name" => "option_name"

4
maheshwaghmare

配列からショートコードを自動生成する:

あなたは次のShortcode Automatを試すことができます。

/**
 * Setup the Shortcode Automat
 *
 */

function shortcode_automat_setup()
{   
    $settings = array(
        "get_address"   =>  "mg_admin_address",
        "get_phone"     =>  "mg_admin_phone",
        "get_fax"       =>  "mg_admin_fax",
        "get_email"     =>  "mg_admin_email",
        "get_hrs_mon"   =>  "mg_work_hrs_mon_frd",
        "get_hrs_sat"   =>  "mg_work_hrs_sat"
    );

    $sc = new ShortCodeAutomat( $settings );
    $sc->generate();
}

add_action( 'wp_loaded', 'shortcode_automat_setup' );

あなたはそれからあなたのテーマ/プラグインからそれをテストすることができます:

echo do_shortcode( "[get_address]" );
echo do_shortcode( "[get_phone]" );
echo do_shortcode( "[get_fax]" );

またはそれを使ってテストします。

[get_address]
[get_phone]
[get_fax]

あなたの投稿/ページのコンテンツの中に。

これがデモクラスの定義です。

/**
 * class ShortCodeAutomat
 */

class ShortCodeAutomat
{
    protected $settings = array();

    public function  __construct( $settings = array() )
    {
        $this->settings = $settings;
    }

    public function __call( $name, $arguments )
    {
        if( in_array( $name, array_keys( $this->settings ) ) )
        {
            return get_option( sanitize_key( $this->settings[$name] ), '' );
        }
    }

    public function generate()
    {
        foreach( $this->settings as $shortcode => $option )
        {
            add_shortcode( $shortcode, array( $this, $shortcode ) );
        }
    }
} // end class
2
birgire