TLDR: How can I get the post type within the functions.php file?

I am trying to add the following code only when the post type is a 'page' and not when it is a 'post.' However, I am not able to call either $post or get_post_type() within the file functions.php

For example, here is what I would like to do:

if($post->post_type == 'page') {
    remove_filter('the_content', 'wpautop');
} elseif ($post->post_type == 'post') {
    add_filter('the_content', 'wpautop');

However, I have tried a myriad of different ways to get the actual post type, to no avail.

I have tried:

global $post;
echo $post_type;
echo $post_type_object;

printf( __( 'The post type is: %s', 'textdomain' ), get_post_type( get_the_ID() ) );

global $post;
echo get_post_type($post->ID);
global $post_type;
$post_type = get_post_type();
echo $post_type;
print_r (get_post_type());
echo $post->post_type;

I think that I have pretty much tried everything :(

None of these will give me a post type for either the pages or the posts.

Any idea how I could get this information?

Thanks a lot!

  • Have you tried is_page() ? Feb 5, 2019 at 19:13

1 Answer 1


You have to create the function and call it when post ID is already set. Otherwise it will be empty. E.g. wp_head meets this requirement, init is too early.

function my_selective_wpautop() {
    global $post;

    if( is_singular() ) {
        if( 'page' == $post->post_type ) {
            remove_filter( 'the_content', 'wpautop' );
        } elseif ( 'post' == $post->post_type ) {
            add_filter( 'the_content', 'wpautop' );

add_action( 'wp_head', 'my_selective_wpautop' );
  • Good point! Yes, it was always showing up empty. You're exactly right. Thanks for the help! :) Feb 6, 2019 at 9:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.