2016-04-20 7 views
2

Я пытаюсь удалить пользовательский тип сообщения, который был настроен с помощью другой темы в Wordpress, теперь все эти сообщения назначаются post_type из portfolio. После многого поиска я нашел код ниже, однако он не работает. Я попытался добавить его как к новой теме, так и к старым темам functions.php.Unregister custom post type from Wordpress

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

Код для uregister поста типа

if (! function_exists('unregister_post_type')) : 
function unregister_post_type() { 
global $wp_post_types; 
if (isset($wp_post_types[ 'portfolio' ])) { 
    unset($wp_post_types[ 'portfolio' ]); 
    return true; 
} 
return false; 
} 
endif; 

add_action('init', 'unregister_post_type'); 

Кода, который зарегистрирован почтового типа

register_post_type('portfolio', 
    array(
     'labels' => array(
      'name' => __('Portfolio Items'), 
      'singular_name' => __('Portfolio Item'), 
      'add_new_item' => __('Add New Portfolio Item'), 
      'edit_item' => __('Edit Portfolio Item'), 
      'new_item' => __('New Portfolio Item'), 
      'view_item' => __('View Portfolio Item'), 
      'search_items' => __('Search Portfolio Items'), 
      'not_found' => __('No portfolio items found'), 
      'not_found_in_trash' => __('No portfolio items found in Trash') 
     ), 
     'public' => true, 
     'show_ui' => true, 
     'hierarchical' => false, 
     'menu_position' => 7, 
     //'rewrite' => array('slug' => 'portfolio'), 
     'rewrite' => true, 
     '_built_in' => false, 
     'taxonomies' => array('post_tag','category','portfolio_tag', 'portfolio_category', 'client'), 
     'supports' => array('title','editor','author','thumbnail','excerpt','trackbacks','custom-fields','comments','revisions') 
    ) 
); 

ответ

0

Попробуйте этот код (с большим номером приоритета)

function custom_unregister_theme_post_types() { 
    global $wp_post_types; 

     if (isset($wp_post_types["portfolio"])) { 
     unset($wp_post_types[ "portfolio" ]); //UPDATED 
     } 

} 
add_action('init', 'custom_unregister_theme_post_types', 20); 

Примечание: убедитесь, что зарегистрированное название типа записи - portfolio или portfolios (с) , Register_post_type ($ post_type, $ арг)

ОБНОВЛЕНО:unset($wp_post_types[ "portfolio" ]); //UPDATED

+0

@Nikki Mather все еще не работает? – Meathanjay

+0

Все еще не работает, к сожалению. Я добавил его в functions.php как новой темы, так и старой темы, которая зарегистрировала тип сообщения. –

+0

Это исходит из другой темы, можете ли вы изменить 'init' на' after_setup_theme'? и если из любого плагина используйте «plugins_loaded» hook. – Meathanjay

0

Ваш код хорошо выглядеть! Но если вы отмените регистрацию post_type ... сообщения в ней уйдут ... Так что не откладывайте ее слишком рано. Прежде чем отменить регистрацию типа сообщения, перенесите сообщения из post_type в обычные сообщения. Этот плагин удобен для этого: https://wordpress.org/plugins/post-type-switcher/

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

function add_custom_post_type_to_query($query) { 
    if ($query->is_home() && $query->is_main_query()) { 
     $query->set('post_type', array('post', 'portfolio')); 
    } 
} 
add_action('pre_get_posts', 'add_custom_post_type_to_query'); 

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

3

я был в состоянии удалить его в WordPress 4.6.1, используя этот код:

function delete_post_type(){ 
    unregister_post_type('portfolio'); 
} 
add_action('init','delete_post_type', 100);