分類条件の保存


16

誰かがすぐに答えてくれることを願う興味深い問題があります。

「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のみを渡そうとしますが、以下で説明するようにテストのために2つしました)

また、メタボックスファイルに次のコードを追加すると、割り当てられた用語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. この例では、単一の分類のみを投稿に関連付けることができるようにしていますが、配列に複数の値を渡す必要があるチェックボックスリストを作成したい場合もあります。そのため、用語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>

回答:


6

ディマスが私を助けてくれた後、これに対する答えを投稿すると思いました。

彼のWPAlchemeyクラスを使用して、次のようなsave_action varを追加しました(カスタムカテゴリに変更できる「カテゴリ」のカテゴリを使用していることに注意してください)。

'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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.