web-dev-qa-db-ja.com

分類用語の保存

私は誰かがすぐに答えることができることを願っています私は興味深い問題を抱えています。

私は自分のメタボックスを作成しました。それは "MY METABOX CODE"(下記のリスト)に基づいて、私が作成した "event_types"タクソノミー内のすべての用語のドロップダウンリストを正しく表示しています。

問題が発生したのは、ドロップダウンから別の用語を選択して投稿を更新したときに、投稿に関連付けられている用語を保存/更新できることです。

さまざまなコードビットをいじってみた結果、(カンマで区切って)term_ID番号を手動で入力することで、探している結果が得られることがわかりました。

例えば、投稿を保存する際に関数がこのコードを呼び出すことだった場合

wp_set_post_terms( $post_id, array(5,7), 'event_types', FALSE);

それから私の投稿は更新され、term_ID 5と7をそれに関連づけます。問題は、これが自分のfunctions.phpファイルにハードコードされていて、ユーザーが選択したドロップダウン値に基づいていないことです(注:実際には1つのIDを渡すことだけを試みています。

メタボックスファイルに次のコードを追加すると、割り当てられた用語IDのリストをエコーすることはできますが、最後の項目にカンマが含まれていることもわかりました。

<?php $event_types = wp_get_object_terms($post->ID, 'event_types'); 
foreach ($event_types as $event_type) { echo $event_type->term_id . ','; } ?>

だから...それは私が私の問題の85%が解決しているようだ。私の問題の残りの15%は以下のように残っています:

  1. 投稿を作成または更新するときに、分類法ドロップダウンリストから選択された新しい値が配列に渡されるようにするために、functions.phpファイルコード(下記参照)に何を追加する必要がありますか?

  2. この例では、SINGLE分類法のみが投稿に関連付けることができるようにしていますが、配列に複数の値を渡す必要があるチェックボックスリストを作成したい場合があります。そのため、用語IDのカンマ区切りリストが配列に渡されるように変更する必要がありますか。あなたの答えが私がIDをエコーするところで私がリストした例のコードの一部または一部を使用することを含むならば、私は最後に印刷される最後のIDが最後にカンマを持たないことを保証しますか? (これを行うには別の方法がありますか。フィルタを追加することに関連するヒントがありますが、これがどのように行われるのかわかりません...)

事前にどうもありがとうございました - 以下は私が現在各ファイルで使用しているコードです。

私のFUNCTIONS.PHPファイルのコード

function save_event_taxonomy_terms($meta, $post_id) {
        $event_types = wp_get_object_terms($post->ID, 'event_types'); 
        wp_set_post_terms( $post_id, array($names), 'event_types', FALSE);
    }

私のメタボックスコード

<select name='post_event_types' id='post_event-types'>
// DISPLAY TERMS AS DROP DOWN OPTIONS
    <?php 
    $names = wp_get_object_terms($post->ID, 'event_types'); 
    $event_types = get_terms('event_types', 'hide_empty=0'); 
    ?>
    <option class='event_type-option' value='' <?php if (!count($names)) echo "selected";?>>Not Assigned</option>
    <?php foreach ($event_types as $event_type) {
        if (!is_wp_error($names) && !empty($names) && !strcmp($event_type->slug, $names[0]->slug)) 
        echo "<option class='event_type-option' value='" . $event_type->slug . "' selected>" . $event_type->name . "</option>\n"; 
        else
        echo "<option class='event_type-option' value='" . $event_type->slug . "'>" . $event_type->name . "</option>\n"; 
    }
    ?>
</select>
15

Dimasが私を助けてくれた後、私はこれに対する答えを投稿するだろうと考えました。

彼のWPAlchemeyクラスを利用して、私は次のようなsave_action変数を追加しました(私は "category"に分類法を使っていますが、もちろんあなたのカスタム分類法に変更することができます):

'save_action'   => 'save_taxonomy_terms',

私はそれから次のようにこれのために次の関数を追加します。

function save_taxonomy_terms($meta, $post_id) {
wp_set_post_terms($post_id, array($meta['my_terms']), 'category', FALSE);
}

分類法のドロップダウンリストを表示する私のメタボックスコードは、次のようになります。

<label>Event Category:</label>
    <?php $terms = get_terms('category', 'hide_empty=0'); ?>
    <?php $mb->the_field('my_terms'); ?>
    <select name="<?php $mb->the_name(); ?>">
    <option value='' <?php if (!count($terms)) echo "selected";?>>Not Assigned</option>
    <?php foreach ($terms as $term): ?>
    <option value="<?php echo $term->term_id; ?>"<?php $mb->the_select_state($term->term_id); ?><?php echo '>' . $term->name; ?></option>
    <?php endforeach; ?>
    </select>
6