Now, this is a bit of a niche tutorial, but it may come useful you need to get a product permalink when it’s still a draft. As you can see from the screenshot below, this is helpful when the product URL is very long – in such a case WordPress truncates the “Permalink” string and you can’t really copy/paste.
For example, you may need the product URL for a scheduled blog post, a future newsletter, an email; in whatever case, this is a cool way to “get” the product URL and print it in the “Publish” meta box of the single product edit page. Enjoy!

PHP Snippet: Get Draft Product Permalink @ WordPress Dashboard > Single Product Edit Page
/**
* @snippet Get Draft Product Permalink @ WooCommerce Edit Product
* @how-to businessbloomer.com/woocommerce-customization
* @author Rodolfo Melogli, Business Bloomer
* @compatible WooCommerce 7
* @community https://businessbloomer.com/club/
*/
add_action( 'post_submitbox_misc_actions', 'bbloomer_future_product_URL', 9999 );
function bbloomer_future_product_URL() {
global $post, $post_id, $product_object;
if ( 'product' !== $post->post_type ) {
return;
}
list( $permalink, $postname ) = get_sample_permalink( $post_id );
echo '<div class="misc-pub-section">Slug: <strong style="word-break: break-all">' . str_replace( '%pagename%', $postname, $permalink ) . '</strong></div>';
}
Note – if you want to get and display the permalink elsewhere, for example on the frontend, you may need to add a require statement before the get_sample_permalink call (source: this StackOverflow answer):
require_once ABSPATH . '/wp-admin/includes/post.php';
Will the url code trick only work for product pages, or can it also work for pages and post that are in draft?
Works with any post type, just remove the post type check inside the function