web-dev-qa-db-ja.com

アドバイスが必要>カテゴリの割り当てをカスタムの投稿メタ値に変換する

ページと投稿エディタに(カスタム投稿メタ選択を含む)メタボックスを追加する機能について知る前は、カテゴリを使用してカスタム投稿メタを定義していました(それでもある程度まで)。

たとえば、投稿をnofollow、つまりnoindexにするには、nofollowというカテゴリとnoindexというカテゴリを作成し、それらのカテゴリの一方または両方を投稿またはページに割り当てました。

それから私のheader.phpファイルで、適切なメタタグをページに書くためにin_categoryテストをします。

例:

<?php
if (in_category('noindex') && in_category('nofollow')){?>
<meta name="robots" content="noindex, nofollow">
<?php}?>

「このページのAdSenseを無効にする」、「このページの添付ファイルを表示しない」、「このページをメニューから隠す」などのカスタムカテゴリもあります。

それで今私は私がカスタム投稿メタを使うべきであるところでカテゴリを使うことから動くことに決めました、代わりにheader.phpの上のコードはなります...

<?php 
    if (get_post_meta( $post->ID, '_noindex', true ) && get_post_meta( $post->ID, '_nofollow', true )){>?
    <meta name="robots" content="noindex, nofollow">
<?php } ?>

だから私の計画ですが、今ではカテゴリ割り当てを介してカスタム投稿オプションを定義する古い方法を使っているサイトをアップグレードするという問題を抱えています。

だから私はアップグレードしているサイトの各投稿とページのためにカスタム投稿メタ値にカテゴリ値を再割り当てすることについて行くルーティングが必要です。

私はこれをどうやるかについてのいくつかの素早いアドバイスと、おそらく必要なルーチンに関するいくつかのコードヒントを探しています。

これは更新プロセスの一部として更新できるテーマなので、テーマが最初にインストールされたとき(またはユーザーがアップグレードユーティリティをクリックしたとき)、オプションテーブルを介してスクリプトを1回実行します。そして、私のカスタムカテゴリ割り当てのいずれかのインスタンスごとに、その投稿またはページに必要なカスタムメタ割り当てを作成します。

たとえば、投稿が現在「非表示」カテゴリに属している場合、その投稿は「_hidden」投稿メタに割り当てられます。

うまくいけば、私はこれを十分に説明しました。私はあなたが提供できるどんな洞察にも感謝します。

おそらく、それぞれの可能なカテゴリー割り当てに対して実行される一連のカスタムSQLステートメントと同じくらい簡単なのでしょうか。

1
Scott B

基本的な考え方は、投稿とそのカテゴリをループして、一致にメタを割り当てることです。

このようなもの(データのテストコピーなどを必ず確認してください):

$posts = get_posts( array(
    'numberposts' => -1
) );

foreach( $posts as $post ) {

    $categories = get_the_category( $post->ID );

    foreach( $categories as $category ) {

        if( 'Hidden' ==  $category->name )
            add_post_meta( $post->ID, '_hidden', 'yes', true );
    }

}

完了時に削除を追加するのを忘れていました:

$category = get_category_by_slug( 'hidden' );
wp_delete_category( $category->term_id );
1
Rarst