카테고리에 맞춤 입력란 추가


22

특정 카테고리에 맞춤 입력란을 추가하고 싶습니다. 카테고리에는 다음 필드 만 있습니다.

이름:

강타:

부모의:

기술:

TV 시리즈 사이트가 있으므로 필드를 더 추가하고 싶습니다. 새 카테고리를 만들 때 이와 같은 것을 원합니다 (Category = Series).

이름:

예술가:

년:

유형:

유형:

개요:

강타:

부모의:

기술:

등등...

도와주세요? 미리 감사드립니다.



여기에 내가 할 때 사용하는 치트 시트가 있습니다. 하나의 짧은 목록에 관련 작업 후크 및 필터가 있습니다. charlestonsw.com/…
랜스 클리블랜드

답변:


24

일주일 전에 How To를 게시했습니다 .http : //en.bainternet.info/2011/wordpress-category-extra-fields

이것이 도움이되기를 바랍니다.

오 하드


게시물의 세부 정보는 다음과 같습니다.

가장 먼저해야 할 일은 hook edit_category_form_fields 후크를 사용하여 범주 편집 양식에 추가 필드를 추가하고 추가 필드를 인쇄하는 간단한 함수를 사용하는 것입니다.

<?php
//add extra fields to category edit form hook
add_action ( 'edit_category_form_fields', 'extra_category_fields');

//add extra fields to category edit form callback function
function extra_category_fields( $tag ) {    //check for existing featured ID
    $t_id = $tag->term_id;
    $cat_meta = get_option( "category_$t_id");
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_Image_url"><?php _e('Category Image Url'); ?></label></th>
<td>
<input type="text" name="Cat_meta[img]" id="Cat_meta[img]" size="3" style="width:60%;" value="<?php echo $cat_meta['img'] ? $cat_meta['img'] : ''; ?>"><br />
        <span class="description"><?php _e('Image for category: use full url with '); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra1"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra1]" id="Cat_meta[extra1]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra1'] ? $cat_meta['extra1'] : ''; ?>"><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra2"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra2]" id="Cat_meta[extra2]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra2'] ? $cat_meta['extra2'] : ''; ?>"><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra3"><?php _e('extra field'); ?></label></th>
<td>
        <textarea name="Cat_meta[extra3]" id="Cat_meta[extra3]" style="width:60%;"><?php echo $cat_meta['extra3'] ? $cat_meta['extra3'] : ''; ?></textarea><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<?php
}

보시다시피, 4 개의 새로운 필드를 추가했고 모든 필드가 Cat_meta [key] 배열에 있습니다. 그렇게하면 옵션 테이블의 행에서만 각 필드에 대한 행 대신 모든 범주의 추가 필드를 저장하기 때문에 행을 생성하기 때문입니다.

다음으로 사용자가 카테고리 편집 양식을 제출하면 추가 필드를 데이터베이스에 저장해야하며 제출 된 각 필드를 통해 실행되고 update_option 함수를 사용하여 데이터베이스에 삽입하는 함수와 함께 "edited_category"를 사용하여 추가 필드를 데이터베이스에 저장해야합니다. , 이렇게 :

<?php
// save extra category extra fields hook
add_action ( 'edited_category', 'save_extra_category_fileds');

// save extra category extra fields callback function
function save_extra_category_fileds( $term_id ) {
    if ( isset( $_POST['Cat_meta'] ) ) {
        $t_id = $term_id;
        $cat_meta = get_option( "category_$t_id");
        $cat_keys = array_keys($_POST['Cat_meta']);
            foreach ($cat_keys as $key){
            if (isset($_POST['Cat_meta'][$key])){
                $cat_meta[$key] = $_POST['Cat_meta'][$key];
            }
        }
        //save the option array
        update_option( "category_$t_id", $cat_meta );
    }
}

위의 코드에서 추가 한 모든 추가 필드가 이름이 'category_ID'인 데이터베이스의 옵션 테이블에 저장되어 있음을 알 수 있습니다. 여기서 ID는 방금 편집 한 특정 범주의 ID이며이를 호출 할 수 있습니다. get_option 함수를 사용하여 플러그인 또는 테마 파일의 데이터

예를 들어 내 카테고리 ID가 25이면 내 코드는 다음과 같습니다.

<?php $cat_data = get_option('category_25'); ?>

처음에 언급했듯이 각 범주마다 다른 이미지를 표시해야 하므로이 경우 범주 제목을 표시하는 코드 바로 다음에 몇 가지 코드 줄을 테마의 category.php에 추가했습니다.

<?php
//first get the current category ID
$cat_id = get_query_var('cat');

//then i get the data from the database
$cat_data = get_option("category_$cat_id");

//and then i just display my category image if it exists
if (isset($cat_data['img'])){
    echo '<div class="category_image"><img src="'.$cat_data['img'].'"></div>';
}

좋고 쉽고 우리 모두 끝났습니다. 결과는 다음과 유사해야합니다.

여기에 이미지 설명을 입력하십시오


4
블로그의 주요 내용을이 답변에 게시하십시오. 자신의 블로그에서도 링크 썩음이 발생할 수 있습니다.
Django Reinhardt

1
이것은 2011 버디에 대답했습니다 :)
Bainternet

1
요점은?
Django Reinhardt

4
이 답변에 가치가 없다고 생각되면 삭제해야합니다 ... 그러나이 질문의 조회수는 16,000 회가 넘습니다. 나는 그 질문이 나이에도 불구하고 사람들에게 유용하다고 생각하며,이 링크는 해당 링크의 세부 사항을 포함 시켜서 개선 될 것입니다.
Django Reinhardt

4
... 당신이 (1 년 전에도) 토론에 바빴지만, 모든 것을 대답으로 가져 오는 데 5 분도 걸리지 않았습니다. 쉬운 ...
MxmastaMills

18

Wordpress 4.4부터 add_term_meta () , update_term_meta ()get_term_meta () 함수가 추가되었습니다. 이는 MxmastaMills에서 제공하는 코드가 훨씬 덜 해킹 된 방식을 사용하도록 업데이트 될 수 있음을 의미합니다.

여기 내 업데이트가 있습니다. 맞춤 제목을 추가하려는 필드는 하나 뿐이지 만 추가하려는 모든 필드에 대해 동일하게 작동합니다.

function addTitleFieldToCat(){
    $cat_title = get_term_meta($_POST['tag_ID'], '_pagetitle', true);
    ?> 
    <tr class="form-field">
        <th scope="row" valign="top"><label for="cat_page_title"><?php _e('Category Page Title'); ?></label></th>
        <td>
        <input type="text" name="cat_title" id="cat_title" value="<?php echo $cat_title ?>"><br />
            <span class="description"><?php _e('Title for the Category '); ?></span>
        </td>
    </tr>
    <?php

}
add_action ( 'edit_category_form_fields', 'addTitleFieldToCat');

function saveCategoryFields() {
    if ( isset( $_POST['cat_title'] ) ) {
        update_term_meta($_POST['tag_ID'], '_pagetitle', $_POST['cat_title']);
    }
}
add_action ( 'edited_category', 'saveCategoryFields');

2
참고로 몇 가지 다음에 edited_category후크, tag_ID에있을 것입니다 $_POST배열이 아닌에서 $_GET. 또한 add_term_meta가능한 오래된 항목을 재정의하는 대신 실제로 새 항목을 추가합니다. update_term_meta대신 사용하십시오 .
Martin Dimitrov

@MartinDimitrov 편집 버튼을 클릭하여 luke-simmons의 답변을 고칠 수 있습니까? 이렇게하면 코드를 잘 작성하지 않은 사람 (여기서는 설계자)이더라도 모든 사람이 사용 가능한 최상의 코드를 사용할 수 있습니다. 고맙습니다!
휴고

1
데이터 형식으로 저장되지 않습니다
Dev

@Dev는 데이터를 저장하지만 두 번째 줄에서 $ _POST를 $ _GET으로 변경하지 않으면 표시되지 않습니다.
banesto

3

이 코드는 작동합니다 :

add_action ( 'edit_category_form_fields', function( $tag ){
    $cat_title = get_term_meta( $tag->term_id, '_pagetitle', true ); ?>
    <tr class='form-field'>
        <th scope='row'><label for='cat_page_title'><?php _e('Category Page Title'); ?></label></th>
        <td>
            <input type='text' name='cat_title' id='cat_title' value='<?php echo $cat_title ?>'>
            <p class='description'><?php _e('Title for the Category '); ?></p>
        </td>
    </tr> <?php
});
add_action ( 'edited_category', function() {
    if ( isset( $_POST['cat_title'] ) )
        update_term_meta( $_POST['tag_ID'], '_pagetitle', $_POST['cat_title'] );
});

이것은 다른 것보다 덜 서툴고 WordPress 5.2.2로 확인했습니다.
nico gawenda

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.