【问题标题】:Defining functions with a for loop使用 for 循环定义函数
【发布时间】:2020-03-14 11:35:38
【问题描述】:

我有一段代码如下所示:

     function macro_ad_short_code_function(){
        return wp_get_attachment_image(get_option('macro_ad_image_uploader'));
    } 

     function pods_ad_short_code_function(){
        return wp_get_attachment_image(get_option('pods_ad_image_uploader'));
    } 

     function live_foods_ad_short_code_function(){
        return wp_get_attachment_image(get_option('live_foods_ad_image_uploader'));
    } 

     function captive_fish_ad_short_code_function(){
        return wp_get_attachment_image(get_option('captive_fish_ad_image_uploader'));
    } 

     function captive_inverts_ad_short_code_function(){
        return wp_get_attachment_image(get_option('captive_inverts_ad_image_uploader'));
    } 

     function refugium_ad_short_code_function(){
        return wp_get_attachment_image(get_option('refugium_ad_image_uploader'));
    } 

     function coral_ad_short_code_function(){
        return wp_get_attachment_image(get_option('coral_ad_image_uploader'));
    } 

     function cleanup_ad_short_code_function(){
        return wp_get_attachment_image(get_option('cleanup_ad_image_uploader'));
    } 

     function saltwater_ad_short_code_function(){
        return wp_get_attachment_image(get_option('saltwater_ad_image_uploader'));
    } 

     function shipping_ad_short_code_function(){
        return wp_get_attachment_image(get_option('shipping_ad_image_uploader'));
    } 

     function white_ad_short_code_function(){
        return wp_get_attachment_image(get_option('white_ad_image_uploader'));
    } 

     function wholesale_ad_short_code_function(){
        return wp_get_attachment_image(get_option('wholesale_ad_image_uploader'));
    } 




     function add_shorty() {



         add_shortcode(get_option('macro_ad_short_code'), 'macro_ad_short_code_function');
         add_shortcode(get_option('pods_ad_short_code'), 'pods_ad_short_code_function');
         add_shortcode(get_option('live_foods_ad_short_code'), 'live_foods_ad_short_code_function');
         add_shortcode(get_option('captive_fish_ad_short_code'), 'captive_fish_ad_short_code_function');
         add_shortcode(get_option('captive_inverts_ad_short_code'), 'captive_inverts_ad_short_code_function');
         add_shortcode(get_option('refugium_ad_short_code'), 'refugium_ad_short_code_function');
         add_shortcode(get_option('coral_ad_short_code'), 'coral_ad_short_code_function');
         add_shortcode(get_option('cleanup_ad_short_code'), 'cleanup_ad_short_code_function');
         add_shortcode(get_option('saltwater_ad_short_code'), 'saltwater_ad_short_code_function');
         add_shortcode(get_option('shipping_ad_short_code'), 'shipping_ad_short_code_function');
         add_shortcode(get_option('white_ad_short_code'), 'white_ad_short_code_function');
         add_shortcode(get_option('wholesale_ad_short_code'), 'wholesale_ad_short_code_function');


    }




    add_action('plugins_loaded', 'add_shorty');

有没有更简洁的方法来用 for 循环编写这个? (我了解如何为函数 add_shorty 执行此操作,但我不确定如何创建一个循环来定义函数 macro_ad_short_code_function、pods_ad_short_code_function 等。

看起来这(https://stackoverflow.com/a/2112337/5439315)可能是一种可行的方法,但那是 2 个 PHP 版本之前

【问题讨论】:

    标签: php wordpress for-loop


    【解决方案1】:

    我认为您可以使用anonymous functions 来实现这一点。我还没有测试过,但我认为你可以应用这个概念:

    function add_shorty()
    {
        $shortcodes = ['macro_ad', 'pods_ad', 'live_foods_ad', 'captive_fish', 'refugium_ad', 'coral_ad', 'cleanup_ad', 'saltwater_ad', 'shipping_ad', 'white_ad', 'wholesale_ad'];
        foreach ($shortcodes as $s) {
            add_shortcode(get_option($s . '_short_code'), function () use ($s) {
                return wp_get_attachment_image(get_option($s . '_image_uploader'));
            });
        }
    }
    
    add_action('plugins_loaded', 'add_shorty');
    

    【讨论】:

      【解决方案2】:

      因此,您可以使用 function alias 来重命名函数,但这对您的 get_option 参数没有帮助。如果函数不是类的一部分,您发布的解决方案似乎是最佳答案。如果您在一个类中,请使用神奇的 __call() 方法并检查函数名称是否与 ^(.+)_ad_short_code_function$ 匹配,然后在 get_option 参数中使用匹配,如下所示:return wp_get_attachment_image(get_option("{$match}_ad_image_uploader"));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-27
        • 2021-05-10
        • 1970-01-01
        • 2020-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多