게시물 제목을 변경 한 후 프로그래밍 방식으로 슬러그를 재생성 할 수 있습니까? 수많은 게시물 제목이 업데이트되었고 슬러그가 제목으로 업데이트되지 않았으므로이 모든 슬러그를 재생성해야합니다.
게시물 제목을 변경 한 후 프로그래밍 방식으로 슬러그를 재생성 할 수 있습니까? 수많은 게시물 제목이 업데이트되었고 슬러그가 제목으로 업데이트되지 않았으므로이 모든 슬러그를 재생성해야합니다.
답변:
네 가능합니다.
샘플 코드는 다음과 같이 테스트하고 수정해야합니다.
// get all posts
$posts = get_posts( array ( 'numberposts' => -1 ) );
foreach ( $posts as $post )
{
// check the slug and run an update if necessary
$new_slug = sanitize_title( $post->post_title );
if ( $post->post_name != $new_slug )
{
wp_update_post(
array (
'ID' => $post->ID,
'post_name' => $new_slug
)
);
}
}
방금 이것을 만들었습니다. 아마도 약간의 오류와 사례가 있지만 아이디어를 제공해야합니다. 또한 시간이 오래 걸릴 수 있으므로 업데이트를 더 작은 청크로 분할하는 것이 유용 할 수 있습니다.
post_name
주장은 wp_update_post
핵심의 3.9 버전에서
post_name
는 wp_update_post()
함수 내에서 무시 되지만 업데이트 게시물 wp_insert_post()
이 함수를 호출 할 때 고려됩니다 . 즉, 새 슬러그를 업데이트로 전달하면 업데이트되는 게시물에 대해 효과적으로 변경됩니다.
이 플러그인은 다음 작업도 수행합니다. http://www.jerrytravis.com/598/wordpress-plugin-to-generate-post-slugs
그러나 아직 슬러그가없는 게시물에 대해서만 수행되므로 슬러그를 재생성 해야하는 경우 플러그인에서 다음 행을 편집하십시오.
if ($post->post_name == "") {
예를 들어 다음과 같이 변경할 수 있습니다.
if (true) {
나는 Toscho가 제안한 방법을 시도했는데, 이것은 "명확한 방법"이지만 많은 경우에 작동하지 않습니다 ( "많은 경우"의 의미를 얻는 핵심 코드 참조).
코드를 살펴보면 게시물 iun을 데이터베이스에 삽입하기 직전에 함수가 wp_insert_post_data
호출 하는 필터 후크를 발견 wp_update_post
했습니다.
이 필터를 호출하고의 값을 변경하여 $data['post_name']
올바르게 작동하도록 할 수있었습니다. 워드 프레스는 시원하지만 너무 나쁘게 문서화되었습니다 ...
필요한 경우 더 많은 사람들이이 해결 방법을 찾을 수 있도록 문서를 편집했습니다 .
필요한 경우 mysql에서 직접이 작업을 수행 할 수 있습니다. (우리의 woocommerce 사이트에는 수만 개의 제품이 있습니다) :
update wp_posts set post_name = concat(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(lower(post_title), '"', ''), "'", ''), ",", '-'), " ", '-'), "&", ''), ";", ''), "@", ''), ".", ''), ":", ''), "/", ''), "+", ''), "(", ''), ")", ''), "--", '-'), "---", '-'), "--", '-'), "--", '-'), '-', id) where post_type = 'product';
post_type = 'product'-그냥 woocommerce 제품에 대한 업데이트를 유지합니다. 이 쿼리에 유지하려는 제한을 파악해야합니다.