Как включить все пользовательские типы сообщений вместо только сообщений

$this->add_meta_box( 'select_post_template', __( 'Post Template', 'custom-post-templates' ), 'select_post_template', 'post', 'side', 'default' );

Чтобы плагин работал с настраиваемыми типами сообщений, мне сказали изменить «сообщение» на имя настраиваемого типа сообщений. Кто-нибудь знает, могу ли я заставить его работать со всеми пользовательскими типами сообщений (включая обычные сообщения), изменив как-то эту строку?

К вашему сведению, я нашел это по адресу: http://wordpress.org/support/topic/custom-post-templates-with-custom-post-types-in-wp-30?replies=5#post-1679398

И это относится к плагину Custom Post Template: http://wordpress.org/extend/plugins/custom-post-template/

Заранее спасибо!

РЕДАКТИРОВАТЬ:

Я пробовал:

$post_types = get_post_types(array("public" => true));
foreach ($post_types as $post_type) {
  $this->add_meta_box("select_post_template", __("Post Template", "custom-post-templates"), "select_post_template", $post_type, "side", "default");
}

Но пользовательские типы сообщений по-прежнему не получают меню выбора шаблона. Посты работают так же, как и с исходным кодом. Спасибо за предложение ... у кого-нибудь есть другой?

Примечание: концептуально подход надежен. Если я создам свой собственный массив со списком моих настраиваемых типов сообщений, этот код добавит к ним шаблон.


person Matrym    schedule 07.09.2010    source источник


Ответы (1)


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

$post_types = get_post_types(array("public" => true));
foreach ($post_types as $post_type) {
  add_meta_box("select_post_template", __("Post Template", "custom-post-templates"), "select_post_template", $post_type, "side", "default");
}

Что касается конкретно плагина Custom Post Template, я думаю, проблема в том, что ваши пользовательские типы сообщений регистрируются после его инициализации (поскольку он не использует ловушку). Итак, $post_types (см. Выше) не содержит ваших типов, и для них нельзя добавить мета-блоки. Вы можете попробовать добавить этот хак (в конце custom-post-templates.php):

add_action('init', 'hack_add_meta_boxes');
function hack_add_meta_boxes() {
  global $CustomPostTemplates;
  $post_types = get_post_types(array('public' => true));
  foreach ($post_types as $post_type) {
    $CustomPostTemplates->add_meta_box( 'select_post_template', __( 'Post Template', 'custom-post-templates' ), 'select_post_template', $post_type, 'side', 'default' );
  }
}
person Richard M    schedule 07.09.2010
comment
Спасибо за попытку, но это не расширилось до пользовательских типов сообщений :( - person Matrym; 10.09.2010
comment
Я думаю, ваша проблема, вероятно, в том, что ваши пользовательские типы сообщений регистрируются после инициализации плагина Custom Post Template (поскольку он не использует ловушку). Итак, $post_types не содержит ваших типов сообщений, и для них не добавляются мета-блоки. - person Richard M; 10.09.2010