尝试按自定义字段‘Order’排序和显示类别(而不是帖子)

时间:2014-04-01 作者:jon

我是WordPress的新手。我在“类别”分类法中添加了一个自定义字段。自定义字段是“custom\\u order”,其目的是保存一个数字,以便我的类别可以按照我选择的顺序进行排序和显示。

我的问题是我无法让他们分类;我可以显示类别,以及“echo”每个类别的“custom\\u order”编号,但在访问和排序meta\\u值时,我肯定遗漏了一些东西。

我也不确定我的做法是否正确。

以下是我将字段添加到“新建类别”页面的代码:

<?php
function taxonomy_add_new_meta_field() 
{ ?>
<div class="form-field">
    <label for="term_meta[custom_order]">Order</label>
    <input type="number" name="term_meta[custom_order]" id="term_meta[custom_order]" value="">
    <p class="description">Enter an order number for organizational purposes</p>
</div>
<?php
}

add_action( \'category_add_form_fields\', \'taxonomy_add_new_meta_field\', 10, 2 );
?>
以下是我将字段添加到“编辑类别”页面的代码:

<?php
function taxonomy_edit_meta_field($term) {

$t_id = $term->term_id;

$term_meta = get_option( "taxonomy_$t_id" ); ?>
<tr class="form-field">
    <th scope="row" valign="top"><label for="term_meta[custom_order]">Order</label></th>
    <td>
        <input type="number" name="term_meta[custom_order]" id="term_meta[custom_order]" value="<?php                 echo esc_attr( $term_meta[\'custom_order\'] ) ? esc_attr(     $term_meta[\'custom_order\'] ) : \'\'; ?>">
        <p class="description">Enter an order number for organizational purposes</p>
    </td>
</tr>
<?php
}
add_action( \'category_edit_form_fields\', \'taxonomy_edit_meta_field\', 10, 2);
?>
以下是我保存字段内容的代码:

<?php

function save_taxonomy_custom_meta( $term_id ) {
if ( isset( $_POST[\'term_meta\'] ) ) {
    $t_id = $term_id;
    $term_meta = get_option( "taxonomy_$t_id" );
    $cat_keys = array_keys( $_POST[\'term_meta\'] );
    foreach ( $cat_keys as $key) {
        if ( isset ( $_POST[\'term_meta\'][$key] ) ) {
            $term_meta[$key] = $_POST[\'term_meta\'][$key];
                    }
                }
                update_option( "taxonomy_$t_id", $term_meta );
        }
}

add_action( \'edited_category\', \'save_taxonomy_custom_meta\', 10, 2 );
add_action( \'create_category\', \'save_taxonomy_custom_meta\', 10, 2 );
我从该网站获得的上述代码片段:

http://pippinsplugins.com/adding-custom-meta-fields-to-taxonomies/

最后但并非最不重要的一点是,我尝试根据此字段对类别进行排序:

$args = array(
\'parent\' => $category->cat_ID,
\'hide_empty\'=>0,
\'exclude\'=>\'1\',
\'meta_key\'=>\'custom_order\',
\'orderby\'=>\'meta_value_num\',
\'order\'=>\'ASC\'
);
$subcategories = get_categories($args);
然后,我使用foreach()循环遍历$subcategories数组。我以为我已经成功了,直到我添加了第三个子类别;我现在看到它将“custom\\u order”1放在第一位,“custom\\u order”3秒,“custom\\u order”2放在第三位。

谁能帮我一把吗?

2 个回复
SO网友:unifiedac

我会直接编辑SQL数据库,根据所需的顺序更改类别ID。然后我将使用“orderby”=>“id”进行排序。

您还可以向slug中添加一个整数(即1-fish、2-chips、3-dips等)并按slug排序,但这些都会出现在前端。

SO网友:T.Todua

一些示例解决方法(可能需要稍作修改):

1st way:

$arguments= array(\'parent\' => $categoryID);
$categories = get_categories( $arguments );

$subcategories=array();
foreach($categories as $each=>$value){
    $subcategories[$value->CUSTOM_FIELD_NAME] = $value;
}

asort($subcategories);
foreach($subcategories as $each=>$value){
    //do what you want here
}   

2nd way:

$args = array(
    \'parent\' => $category->cat_ID,
    \'hide_empty\'=>0,
    \'exclude\'=>\'1\',
    \'meta_key\'=>\'custom_order\',
    \'orderby\'=>\'meta_value_num\',
    \'order\'=>\'ASC\'
);
$subcategories = get_categories($args);

结束

相关推荐

Archive not sorting correctly

我有一个名为“cif事件”的自定义帖子类型,我想按wpcf开始时间中的值进行排序。我在函数中添加了以下内容。php:add_filter(\'pre_get_posts\', \'set_order_for_archives\'); function set_order_for_archives($q) { if ($q->is_post_type_archive(\'cif-groups\')) { $q->set(\'orderby\', \'