【问题标题】:Looping through arrays within classes to create wordpress metaboxes循环遍历类中的数组以创建 wordpress 元框
【发布时间】:2016-03-22 20:59:45
【问题描述】:

我的 Wordpress functions.php 中有一个课程。最终它将在插件文件夹中结束,但一次一步。以下是它的缩略版:

class metaboxClass {

    $them_meta_boxes = array (
        array (
            "1a_myplugin_box_id_1",
            "1b_Custom Meta Box Title 1"
        ),
        array (
            "2a_myplugin_box_id_2",
            "2b_Custom Meta Box Title 2"            
        )
    );

    public function __construct() {
        add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
    }

    public function add_meta_box( $post_type ) { 

        $post_types = array( 'page', 'my_cpt' );
        if ( in_array( $post_type, $post_types )) { // *** IF $POST_TYPE IS IN THE ARRAY $POST_TYPES

            foreach ($this->them_meta_boxes as $level_1) {

                add_meta_box (
                foreach ($this->level_1 as $level_2) {
                    echo $level_1 . ",";
                }
                array( $this, 'render_form'),
                $post_type
                )
            }
        }
    }
}

从上面可以看出,我正在尝试使用数组中的信息构造 add_meta_boxes 函数的各种迭代。

我觉得这里有很多问题,我会一次解决一个问题,但第一个是当从类实例化一个对象时,我得到:“语法错误,意外'foreach'”。我知道这通常是由缺少分号引起的。在这种情况下,分号存在且正确。我觉得这与阵列的放置有关,但是当它放在外面时我遇到了类似的问题。任何人都可以给我任何指点 - 我对 OO PHP 的世界还很陌生,而且我对 wordpress 后端也很陌生,所以任何指点都将不胜感激。

提前致谢, 史蒂夫

【问题讨论】:

    标签: php arrays wordpress foreach meta-boxes


    【解决方案1】:

    您不能将foreach 循环作为参数传递给函数。首先构造您的参数字符串,然后将构造的字符串作为参数传递给您的 add_meta_box 函数。

    尽管如此,我不确定您要调用什么,因为您的 add_meta_box 函数只接受一个参数。

    【讨论】:

      【解决方案2】:

      整理好记录了……结果是这样的:

      class initialise_meta_boxes {
      
          public $meta_boxes_array = array (
              array (
                  "1a_myplugin_box_id_1",
                  "1b_Custom Meta Box Title 1",
                  "render_dropdown"
              ),
              array (
                  "2a_myplugin_box_id_2",
                  "2b_Custom Meta Box Title 2",
                  "render_dropdown"       
              )
          );
      
      
          public function __construct() {
              add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
              add_action( 'save_post', array( $this, 'save' ) );
          }
      
          public function make_meta_box($meta_id, $meta_title, $meta_callback) { 
              return add_meta_box ($meta_id, $meta_title, $meta_callback, $post_type );
          }
      
           public function add_meta_box( $post_type ) { // *** $post_type is global variable!!!
              $post_types = array( 'page', 'my_cpt' );
              if ( in_array( $post_type, $post_types )) { // *** IF $POST_TYPE IS IN THE ARRAY $POST_TYPES
      
                  foreach ($this->meta_boxes_array as $value) {
                          $this->make_meta_box($value[0], $value[1], array( $this, $value[2]));
                  }
              }
          }
      } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-08
        • 1970-01-01
        • 1970-01-01
        • 2018-09-09
        • 1970-01-01
        • 2020-12-04
        • 1970-01-01
        • 2018-07-17
        相关资源
        最近更新 更多