简体   繁体   中英

(Wordpress) How to add a simple text to the contents of a specific category (php)

the following code in my function.php can almost do the job nice and clean to all single pages. the problem is I want it to be filtered for a specific category ID:

function wp_add_to_content( $content ) {
    if( is_single() && ! empty( $GLOBALS['post'] ) ) {
        if ( $GLOBALS['post']->ID == get_the_ID() ) {
            $content .= 'Your new content here';
        }
    }
    return $content;
}
add_filter('the_content', 'wp_add_to_content');

Modified your code idealy this condition is never making any sense because it always getting the id. $GLOBALS['post']->ID == get_the_ID()

function wp_add_to_content( $content ) {
    if( is_single() && ! empty( $GLOBALS['post'] ) ) {
        if ( $GLOBALS['post']->ID == get_the_ID() ) {
            $content .= 'Your new content here';
        }
        //getting the current post
        global $post;
        $category_detail=get_the_category( $post->ID );
        if(!empty($category_detail))
        {
            $catId = $category_detail[0]->term_id;
            // instead of 2 put your category id 
            if($catId == 2 && $catId != 0 )
            {
                $content .= 'Your new content here';
            }
        }
    }
    return $content;
}
add_filter('the_content', 'wp_add_to_content');

Note : above code is for only default post not for custom taxonomy for custom taxonomy

You don't need to use get_the_category and examine the results - Wordpress already has a function to check if your post is in a category: has_category . The advantage of this over get_the_category is that

  1. you don't need the code to loop through all results to comparing the id (this is the part that is wrong in the other answer - it will only work if your post has one single category)
  2. You can use not just the ID, but also the slug or name
  3. You can check for multiple categories

The code you need is very simple, you just need to change one line!

function wp_add_to_content( $content ) {
    if( is_single() && ! empty( $GLOBALS['post'] ) ) {

        /* pass an array with the IDs/names/slugs of the categories to check for, e.g. */
        if ( has_category( array(12) ) )
            $content .= 'Your new content here';
    }
    return $content;
}
add_filter('the_content', 'wp_add_to_content');

UPDATE:

Even though it wasn't in your question, if you actually want to include the content on all posts as well , you just need to do this:

function wp_add_to_content( $content ) {
    if( is_single() && ! empty( $GLOBALS['post'] ) ) {

        $content .= 'Your new content here';

        if ( has_category( array(12) ) )
            $content .= '<br>Your new content here';
    }
    return $content;
}
add_filter('the_content', 'wp_add_to_content');

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM