Пользовательский метабокс Wordpress, загрузка сообщений, страниц и всех пользовательских типов сообщений?

Я пытаюсь загрузить свое настраиваемое поле для всех сообщений, страниц и всех настраиваемых типов сообщений, которые являются общедоступными.

Но я не знаю, как это совместить.

Это переменная, которую я установил для загрузки настраиваемого поля в сообщение и страницу.

public function vf_add_meta_box( $post_type ) {

    if (in_array( $post_type, $this->post_types )) {
        add_meta_box( 
            $this->option_name,
            $this->metabox_name,
            array( $this, 'meta_box_display' ),
            $post_type,
            'normal',
            'high'
        );
    }
}

$ post_type определен в другой функции и вставлен в __construct, и он установлен следующим образом

$post_types = array('post', 'page' );

И из инструкций кодекса wordpress, чтобы получить все настраиваемые типы сообщений, вы можете использовать этот код.

$args = array(
   'public'   => true,
   '_builtin' => false
);

$output = 'names'; // names or objects, note names is the default
$operator = 'and'; // 'and' or 'or'

$custom_types = get_post_types( $args, $output, $operator ); 

foreach ( $custom_types  as $post_type ) {

   return $post_type ;
}

Итак, я предположил, что если я добавлю $ post_type в массив $ post_types

$post_types = array('post', 'page', $post_type );

он будет отображать метабокс в настраиваемом типе сообщения, но он не работает.


person lonerunner    schedule 14.01.2014    source источник


Ответы (1)


Попробуйте заменить последний foreach на это:

$post_types = array_merge($post_types, $custom_types);

Это должно объединить ваш массив пользовательских типов сообщений с массивом по умолчанию $post_types.

person Ovidiu Iacomi    schedule 14.01.2014
comment
Выдает ли это какую-то ошибку или не добавляет мета-поле? - person Ovidiu Iacomi; 14.01.2014
comment
Еще один быстрый вопрос: отправляете ли вы массив функции, которая добавляет мета-блоки в функцию __construct, или вы выполняете цикл в конструкции и отправляете переменную в цикле функции? Я пытаюсь понять, может быть, проблема в другом. - person Ovidiu Iacomi; 14.01.2014
comment
Ответ на 1-й комментарий: он ничего не показывает, просто не загружает мета-поле, даже на пост или страницу по умолчанию. И по 2-му комментарию: это немного сложно. $ post_types определяется внутри function1, чем в конце function1 я вызываю новый class_metabox. Затем я создаю класс class_metabox, внутри я использую __construct для определения различных переменных, таких как $ this- ›option_name, $ this-› metabox_name, $ this- ›post_types, а затем внутри того же класса я создаю функцию, которую вы видите в вопросе. иначе работает, даже когда я пробую $ post_types = array ('post', 'page', 'project','folio '); но мне это нужно динамично - person lonerunner; 14.01.2014
comment
Оказывается, он работает, мне, честно говоря, жаль, что я слишком устал, так что я, вероятно, допустил опечатку где-то во время предыдущей попытки. - person lonerunner; 14.01.2014