분류 용어 저장


16

누군가가 빨리 대답 할 수 있기를 바랍니다.

"MY METABOX CODE"(아래 목록)를 기반으로하는 자체 메타 박스를 만들었으며 내가 만든 "event_types"분류 체계 내 모든 용어에 대한 드롭 다운 목록이 올바르게 표시됩니다.

문제가 발생하는 곳은 드롭 다운에서 다른 용어를 선택하고 게시물을 업데이트 할 때 게시물과 관련된 용어를 저장 / 업데이트 할 수 있습니다.

다양한 코드 비트로 땜질을 한 후 배열 영역에 term_ID 번호 (쉼표로 구분)를 수동으로 입력하여 원하는 결과를 얻는다는 것을 알 수있었습니다.

예를 들어 게시물을 저장할 때 함수가이 코드를 호출 한 경우

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

그런 다음 내 게시물이 업데이트되고 term_ID 5 & 7을 여기에 연결합니다. 문제는 이것이 내 함수 .php 파일에 하드 코딩되어 있으며 사용자가 선택한 드롭 다운 값을 기반으로하지 않는다는 것입니다 (참고 : 실제로 하나의 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에 쉼표가 없는지 어떻게 확인합니까? (다른 방법으로 더 나은 방법이 있습니까? 필터 추가와 관련된 힌트를 보았지만 어떻게 수행되는지 잘 모르겠습니다 ...)

미리 감사드립니다. 아래는 각 파일에서 현재 사용중인 코드입니다.

내 기능의 코드 .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

Dimas가 나를 도울 수있게 된 후에 이것에 대한 답변을 게시 할 것이라고 생각했습니다.

그의 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.