在WordPress中创建快捷代码,使用3个函数中的一个变量?

时间:2017-02-14 作者:Mangal

我正在使用acfvalue 变量获取值并在多个短代码中使用它,让我解释一下我想在一个变量中存储ACF值,然后在3函数中使用该变量并创建3个短代码。

$acfvalue = get_field( \'short_title\' );
上面的代码是获取ACF值并存储在$acfvalue中,现在我想在3个不同的函数中使用这个变量并创建短代码。我可以声明和定义3倍的$acfvalue及其工作方式,但我不想从post meta获取相同的值。

function hprice(){
    $acfvalue = get_field( \'short_title\' );
    return \'<h2>\'. $acfvalue . " Price list in India" . \'</h2>\';
}
add_shortcode( \'pprice\', \'hprice\' );

function hspecs(){
    $acfvalue = get_field( \'short_title\' );
    return \'<h2>\'. $acfvalue . " Full Specification" . \'</h2>\';
}
add_shortcode( \'pspecs\', \'hspecs\' );

function hreview(){
    $acfvalue = get_field( \'short_title\' );
    return \'<h2>\'. $acfvalue . " Review" . \'</h2>\';
}
add_shortcode( \'preview\', \'hreview\' );
因此,上述代码正在运行。。问题是我想移动$acfvalue=get\\u字段(“short\\u title”);功能外。

2 个回复
SO网友:Sonali

使用函数调用变量

   function give_value(){
      $acfvalue = get_field( \'short_title\' );
     return $acfvalue;
   }
   function hprice(){
      return \'<h2>\'. give_value() . " Price list in India" .\'</h2>\';
   }
   add_shortcode( \'pprice\', \'hprice\' );

   function hspecs(){
     return \'<h2>\'.  give_value() . " Full Specification" . \'</h2>\';
  }
   add_shortcode( \'pspecs\', \'hspecs\' );
   function hreview(){
     return \'<h2>\'.  give_value() . " Review" . \'</h2>\';
   }
   add_shortcode( \'preview\', \'hreview\' );

SO网友:Fayaz

有多种呼叫方式get_field( \'short_title\' ) 仅一次:

使用global 变量:

您可以声明$acfvalue 变量global 然后在函数中使用它。自从global 作用域可能具有相同的变量名称,最好在其前面加前缀,以免产生冲突:

function hprice() {
    global $wpse256370_acfvalue;
    if( ! isset( $wpse256370_acfvalue ) ) {
        $wpse256370_acfvalue = get_field( \'short_title\' );
    }
    return \'<h2>\'. $wpse256370_acfvalue . " Price list in India" . \'</h2>\';
}
add_shortcode( \'pprice\', \'hprice\' );

function hspecs() {
    global $wpse256370_acfvalue;
    if( ! isset( $wpse256370_acfvalue ) ) {
        $wpse256370_acfvalue = get_field( \'short_title\' );
    }
    return \'<h2>\'. $wpse256370_acfvalue . " Full Specification" . \'</h2>\';
}
add_shortcode( \'pspecs\', \'hspecs\' );

function hreview() {
    global $wpse256370_acfvalue;
    if( ! isset( $wpse256370_acfvalue ) ) {
        $wpse256370_acfvalue = get_field( \'short_title\' );
    }
    return \'<h2>\'. $wpse256370_acfvalue . " Review" . \'</h2>\';
}
add_shortcode( \'preview\', \'hreview\' );

使用static 变量:

使用static 函数中的变量将优于global 可变方式。由于它不会污染全局范围,因此在这种情况下无需在变量名称前加前缀:

function wpse256370_acfvalue() {
    static $acfvalue;
    if( ! isset( $acfvalue ) ) {
        $acfvalue = get_field( \'short_title\' );
    }
    return $acfvalue;
}

function hprice() {
    return \'<h2>\'. wpse256370_acfvalue() . " Price list in India" . \'</h2>\';
}
add_shortcode( \'pprice\', \'hprice\' );

function hspecs() {
    return \'<h2>\'. wpse256370_acfvalue() . " Full Specification" . \'</h2>\';
}
add_shortcode( \'pspecs\', \'hspecs\' );

function hreview() {
    return \'<h2>\'. wpse256370_acfvalue() . " Review" . \'</h2>\';
}
add_shortcode( \'preview\', \'hreview\' );

使用class:

最好的方法是使用类,因为使用类还可以避免可能的函数名冲突:

class WPSE_256370_Shortcode {
    private static $instance;
    private $acfvalue;

    public static function init() {
        self::getInstance();
        add_shortcode( \'pprice\', array( self::$instance, \'pprice\' ) );
        add_shortcode( \'pspecs\', array( self::$instance, \'pspecs\' ) );
        add_shortcode( \'preview\', array( self::$instance, \'preview\' ) );
    }

    public static function getInstance() {
        if( ! isset( self::$instance ) ) {
            self::$instance = new self;
        }
        return self::$instance;     
    }

    public function acfvalue() {
        if( ! isset( $this->acfvalue ) ) {
            $this->acfvalue = get_field( \'short_title\' );
        }
        return $this->acfvalue;
    }

    public function pprice() {
        return \'<h2>\'. $this->acfvalue() . " Price list in India" . \'</h2>\';
    }

    public function pspecs() {
        return \'<h2>\'. $this->acfvalue() . " Full Specification" . \'</h2>\';
    }

    public function preview() {
        return \'<h2>\'. $this->acfvalue() . " Review" . \'</h2>\';
    }
}
WPSE_256370_Shortcode::init();

相关推荐

Namespaced shortcode?

我正在改造一个旧的WP站点,该站点有许多自定义的短代码,显然由于代码当前的组织方式,这些短代码在性能方面付出了代价。当然,我可以修复优化不好的代码,使用十几个短代码,并且一天就可以完成,但我想知道如何更好地组织它们。根据WordPress\'documentation, 建议将它们放在插件中并在上初始化init. 我们可以通过这样“命名”它们来减少这个钩子中的负载吗?[com.company shortcode attr=\"attr\" prop=\"prop\"] 有人尝试过这样的解决方案吗