Change permalink structure hidden button edit

The question:

I created the function below that changes the permalink structure of posts in a specific category. Everything is working, but the button inside the post to edit the slug is gone.

Print edit button image

Change permalink structure hidden button edit

add_filter( 'post_link', 'idinheiro_custom_permalink', 10, 3 );
function idinheiro_custom_permalink( $permalink, $post ) {
    $category = get_the_category($post->ID);
    if (  !empty($category) && $category[0]->slug == "negocios" ) {
        $permalink = trailingslashit( home_url('/'. $category[0]->slug . '/' . $post->post_name .'/' ) );
    }
    return $permalink;
}

The Solutions:

Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.

Method 1

The post_link hook has a third parameter named $leavename:

$leavename
(bool) Whether to keep the post name.

So what that means is, if $leavename is true, then the post name/slug should be kept in the permalink and thus it needs to contain %postname% (or %pagename% for the page post type) instead of being replaced with the actual post slug (or something else).

Because if that placeholder is missing, the permalink will become non-editable on the post editing screen, therefore the Edit button is disabled. (See get_sample_permalink_html(), specifically this part, and that function is the one which generates the post permalink editor)

So to fix the issue, define the variable: function idinheiro_custom_permalink( $permalink, $post, $leavename ) and change the '/' . $post->post_name .'/' to:

'/' . ( $leavename ? '%postname%' : $post->post_name ) .'/'


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Comment