1

I have problem with custom post type. In BO url's are ok example: page.pl/post_type_name/post_title. When I try use get_the_permalink() or the_permalink() it return url like: /?post_type=cpt_wydarzenia&p=258

Code:

    $args = array(
            "label" => __( "Wydarzenia", "vilo" ),
            'labels' => $labels,
            'hierarchical' => false,
            'supports' => array('title', 'editor'),
            //'taxonomies' => array( 'category', 'post_tag' ),
            'public' => true,
            'show_ui' => true,
            'show_in_menu' => true,
            'menu_position' => 5,
            'show_in_nav_menus' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'has_archive' => false,
            'query_var' => true,
            'can_export' => true,
            'rewrite' => array(
                'slug' => 'wydarzenia',
                'with_front' => true
            ),
            'capability_type' => 'post',
            'menu_i

          con' => 'dashicons-book',
                 'supports' => array(
                 'title',
                  'thumbnail',
            'comments',
            'editor'),
    );

    register_post_type( 'cpt_wydarzenia', $args );
    flush_rewrite_rules();
2
  • Is the post 258 published? If no, then it's normal to have the "ugly" URL.
    – Sally CJ
    Jul 15 '20 at 8:27
  • No it isn't. The post is planned. Is it possible, to planned post have normally url. I create incoming event based on custom post with planned public.
    – ncti
    Jul 15 '20 at 8:43
1

get_permalink() (which is used by get_the_permalink() and the_permalink()) returns the "ugly" URL if the post is not published, e.g. draft or scheduled, but you can use the following function instead which temporarily sets the post status to publish so that we'd get the pretty URL.

function get_future_permalink( $id ) {
    if ( $post = get_post( $id ) ) {
        $post->post_status = 'publish';
        return get_permalink( $post );
    }
    return '';
}

So instead of get_permalink( 258 ), you'd use get_future_permalink( 258 ), where 258 is the post ID.

1
  • 1
    Thank you, it's working perfectly
    – ncti
    Jul 15 '20 at 12:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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