Скройте meta поле для всего КРОМЕ определенного пользовательского типа сообщения

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

Существует ли способ удалить это meta поле для всего, НО?


remove_meta_box('tagsdiv-post_tag', 'post', 'normal');

Удалит теги из нормальных (желаемых) сообщений, но это означает, что они также удалены из ВСЕХ пользовательских типов сообщения. Я могу удалить meta поле для отдельных пользовательских типов сообщения, как так:

remove_meta_box('tagsdiv-post_tag', 'cars', 'normal');

remove_meta_box('tagsdiv-post_tag', 'hotels', 'normal');

и т.д.

Но это означает, что я должен оставить теги, доступные на нормальных (нежелательных) сообщениях.

Таким образом, я предполагаю, что хочу что-то вроде этого, для удаления meta поля из всего кроме (например). airports:

remove_meta_box('tagsdiv-post_tag', '!airports', 'normal');

Какие-либо идеи?

0
06.06.2014, 17:53
3 ответа

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

http://codex.wordpress.org/Function_Reference/register_taxonomy

register_taxonomy(
  'my_custom_post_type_tags',
  'my_custom_post_type',
  array(
    'label'        => __( 'Tags' ),
    'rewrite'      => false,
    'hierarchical' => false,
    'capabilities' => array( 'edit_terms' => 'manage_categories' )
  )
);
0
20.02.2020, 00:07
  • 1
    Это - технически улучшение - не совсем, что я попросил - но это - лучший способ достигнуть того, в чем я нуждаюсь так, я собираюсь отметить, это корректно. Для любого, который должен сделать точно, что я запросил затем @The ответ суфия, делает задание (с моим исправлением). Спасибо Joey, работы как очарование! –  Nathan Hornby 10.06.2014, 18:02

Можно достигнуть метаполей удаления со всех экранов типа сообщения кроме определенных. Это то, как я сделано это. Мог бы быть немного переоценен, lol

Во-первых, необходимо будет получить список всего зарегистрированного типа общедоступной публикации. Это сделано при помощи get_post_types. Необходимо будет использовать параметр 'public' => true, иначе все типы сообщения будут возвращены, который является ненужным.

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

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

<?php
if (is_admin()) :
function my_remove_meta_boxes() {
    if( current_user_can('manage_options') ) {
    $custom_post_types = get_post_types( array( 'public' => true ), 'objects');

        foreach ( $custom_post_types as $custom_post_type ) {

            $exclude = array( 'information' ); //<---Replace information with your own post type

            if( TRUE === in_array( $custom_post_type->name, $exclude ) )
            continue;

            $posttypes = $custom_post_type->name;

            remove_meta_box('tagsdiv-post_tag', $posttypes, 'normal');
        }
    }
}
endif;

add_action( 'admin_menu', 'my_remove_meta_boxes' );
1
20.02.2020, 00:07
  • 1
    Определенно немного по сложному :) –  Nathan Hornby 10.06.2014, 18:04
  • 2
    Ха-ха-ха, думал так. Большой, что один из других ответов помог :-) –  Pieter Goosen 10.06.2014, 18:05

Необходимо проверить любого, который текущее сообщение airports или нет.

Это может быть сделано как это:

function custom_remove_tag_box() {
    global $current_screen;
    if ( $current_screen->post_type != 'airports' ) {
        remove_meta_box('tagsdiv-post_tag', 'post', 'normal');
    }
}
add_action('admin_head', 'custom_remove_tag_box');

Протестированный и работа.

0
20.02.2020, 00:07
  • 1
    , простой как это, Спасибо!, я просто оставляю пост в течение выходных (плохо синхронизирующий), но буду брать это снова в понедельник, так сообщит тогда о ;) –  Nathan Hornby 06.06.2014, 18:29
  • 2
    , Это не может работать. admin_init не передает a WP_Post объект. –  fuxia♦ 06.06.2014, 18:43
  • 3
    @toscho справки спасибо за указание. Я обновил свой код, и похож, он работает на меня (протестированный). –  тнє Sufi 06.06.2014, 22:54
  • 4
    Замена add_action('admin_head', 'custom_remove_tag_box'); с add_action('admin_menu', 'custom_remove_tag_box'); получил его работа. –  Nathan Hornby 10.06.2014, 17:56

Теги

Похожие вопросы