wp_postmetaと非公開記事

前の記事「投稿スラッグpostnameとデータベース」で_wp_old_slugのことについて書いたけど、記事を非公開にするとwp_postmetaテーブルにメタ情報のレコードを作成しない。
wp_postsテーブルのスラッグは変更が反映されてます。
非公開から公開に変更したら、スラッグを変更するとちゃんとメタ情報を書き込む。
また非公開に戻すと書き込まない。

post.phpでやってたんですね。
ただ非公開ならスラッグを更新したら、どうして書き込まなくていいのか意味がよくわからないです。
自分はパーマリンクに%postname%を使ってないし、PHPもわからないのでとりあえずここまででいいです。

【2012/12/15 追記】
下書きや非公開記事は、下書き時や非公開時のURLは他の人が必要ないってことですね。
データ移行の時なんか、下書きや非公開にしてるから不要なデータが書き込まれなくていいってことか。

でもこんなことする人はいないと思うけど、
公開時 test1
非公開にする
非公開時にtest2に変更
こうすると、wp_postmetaにはtest1のレコードが出来ない。
公開にする
公開時にtest3に変更すると、公開状態なので普通にtest2を書き込む。
wp_postmetaにはtest2のメタ情報、wp_postsにはtest3がスラッグとしてあるけど、test1はどこにもないってことになる。

ふつうは非公開にしてから公開にするし、ましてや非公開時にスラッグを変更することはありあえないって前提があるんでしょうね。

post.php
function wp_check_for_changed_slugs($post_id, $post, $post_before) {
// dont bother if it hasnt changed
if ( $post->post_name == $post_before->post_name )
return;

// we’re only concerned with published, non-hierarchical objects
if ( $post->post_status != ‘publish’ || is_post_type_hierarchical( $post->post_type ) )
return;

$old_slugs = (array) get_post_meta($post_id, ‘_wp_old_slug’);

// if we haven’t added this old slug before, add it now
if ( !empty( $post_before->post_name ) && !in_array($post_before->post_name, $old_slugs) )
add_post_meta($post_id, ‘_wp_old_slug’, $post_before->post_name);

// if the new slug was used previously, delete it from the list
if ( in_array($post->post_name, $old_slugs) )
delete_post_meta($post_id, ‘_wp_old_slug’, $post->post_name);
}

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>