私は自動的に与えられた配列キーと値でショートコードを生成するショートコードを作成しました。関数名は動的には生成されません。
注:配列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"
あなたは次の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