#THE QUESTION

Hello!

Currently, my permalink settings are set to *"Post Name"* so that the default wordpress posts which are used for articles will have a pretty urls.

But then, I have this job post (custom post type as "thjb_job") that needs to have these kinds for permalink structures:

For viewing a single job post

1.) **(rootURI) / job-post / %job_id%**

and for listing based on employers (employer as a kind of taxonomy)

2.) **(rootURI) / %taxonomy% / job-post / %job_id%**

My priority is the item no. 1 as I haven't added the employer taxonomy yet.

I have already used wordpress methods like
add_rewrite_tag() and add_permastruct() but they seems to not work properly. 

I have also tried using add_filter('post_type_link') wordpress hook but it seems to just manipulate the permalink string record as it returns 404 when I tried to view the post (by clicking on the permalink while editing the custom post thjb_job).

Also, I have read a lot of answers that involves modification of .htaccess. I'm hoping that I won't need to touch .htaccess just to achieve this custom permalink structure.

**Thanks in advance for your help on how to achieve the permalink structures above.**

---

#THE CODES

Here are the ways I'm using the methods mentioned above


    /**
     * AddCustomPostJob = Add Custom Post labeled as Job
     *   : this class registers a new custom post type called thjb_job (Job)
     */
    class AddCustomPostJob {

    /**
     * init() = Initializer Method
     *   : this method is the class engine starter
     *
     */
    public static function init() {

        // Register the custom post type
        add_action( 'init', array(get_called_class(), 'registerPostType') );

        // Register custom rewrite rules for this custom post type
        add_action( 'init', array(get_called_class(), 'rewriteRules') );

        // Register custom url tag translations
        add_filter( 'post_type_link', array(get_called_class(), 'translateTags'), 10, 2 );

    }



    /**
     * registerPostType = Register Post Type callback
     *   : this method defines the properties for the custom post type
     */
    public static function registerPostType() {

        // Define custom type child options

        // Labels
        $labels = array(
            'name' => __( 'Jobs' ),
            'singular_name' => __( 'Job' )
        );

        // Default fields
        $supports = array( 'title', 'editor' );

        // Turn off wordpress permalink rewrite
        $rewrite = false;

        // Define the options for the custom post type
        $opts = array(
            'labels'              => $labels,
            'public'              => true,
            'has_archive'         => true,
            'show_ui'             => true,
            'show_in_menu'        => false,
            'show_in_nav_menus'   => false,
            'show_in_admin_bar'   => true,
            'supports'            => $supports,
            'rewrite'             => $rewrite,
        );

        // Register the post type with key => thjb_job
        register_post_type( 'thjb_job', $opts);

    } // registerPostType()



    /**
     * rewriteRules() = Custom rewrite rules method
     *   : this method creates a custom rewrite rules exclusively for thjb_job post type
     *
     */
    public static function rewriteRules() {

        // Define the custom permalink structure
        $structure = '/job-post/%job_id%';

        // Map the equivalent query var
        add_rewrite_tag("%job_id%", '([^/]+)', "p=");

        // Add the custom permalink structure to wordpess
        add_permastruct('thjb_job', $structure, false);
    }




    /**
     * translateTags() = Translate url tags method
     *   : this method translates tags (%tags%) to its original value
     *
     * @param $url
     *   : this param is the current url to be modified
     *
     * @param $post
     *   : this param is the current post being processed
     *
     * @return modified $url
     *
     */
    public static function translateTags($url, $post) {

        // Apply only for thjb_job post type
        if ( $post->post_type == 'thjb_job') {

            // If %job_id% exists, then insert the original value
            if ( strpos($url, '%job_id%') ) {

                return str_replace('%job_id%', $post->ID, $url);
            }
        }

        return $url;

    }


    } // AddCustomPostJob class

    AddCustomPostJob::init();