我想在产品标题更新时自动更新产品的slug。
我在一些帖子上读到,
wp_update_post
可能是最好的选择。
我也尝试了下面的代码,但效果不佳,它导致了太多冲突。
请问有什么帮助吗?
您没有在问题中提供任何代码...并且您还没有对您的问题进行研究...
请参阅:
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
文件中。已测试并有效。