产品标题更新时自动更新产品的slug

问题描述 投票:0回答:1

我想在产品标题更新时自动更新产品的slug。

我在一些帖子上读到,

wp_update_post
可能是最好的选择。

我也尝试了下面的代码,但效果不佳,它导致了太多冲突。

请问有什么帮助吗?

php wordpress woocommerce product
1个回答
0
投票

您没有在问题中提供任何代码...并且您还没有对您的问题进行研究...

请参阅:

wp_update_post
可用于更新帖子 slug。它适合更改帖子的属性,包括 slug

您可以使用

save_post
操作,该操作会在创建或更新帖子或页面时触发。它可用于在保存帖子后立即执行自定义功能。

然后您可以使用

sanitize_title
创建帖子标题的 URL 友好版本。它确保删除或替换不适合 URL 的字符。

当您更新产品名称/标题时,下面的代码将自动更新产品的slug:

/* Update product slug to product title, when product is saved */
function slug_save_post_callback( $post_ID, $post, $update ) {
    // Prevent function from running during an autosave. Can cause unnecessary updates.
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }

    // Check if post type is product, if not, exit the function
    if ( $post->post_type != 'product' ) {
        return;
    }

    // Ensures that only users with the appropriate permissions can trigger the function
    if ( ! current_user_can( 'edit_post', $post_ID ) ) {
        return;
    }

    // Generate new slug based on the post title using sanitize_title
    $new_slug = sanitize_title( $post->post_title, $post_ID );
    // If new slug is the same as the current slug, exit the function
    if ( $new_slug == $post->post_name ) {
        return; // already set
    }

    // Remove save_post action to prevent infinite looping
    remove_action( 'save_post', 'slug_save_post_callback', 10, 3 );
    // Update the post slug with new slug
    wp_update_post( array(
        'ID' => $post_ID,
        'post_name' => $new_slug
    ));
    // Re-hook the save_post action to ensure the function is called again
    add_action( 'save_post', 'slug_save_post_callback', 10, 3 );
}
add_action( 'save_post', 'slug_save_post_callback', 10, 3 );

代码应添加到活动子主题的

functions.php
文件中。已测试并有效。

© www.soinside.com 2019 - 2024. All rights reserved.