我无法在我的循环中获得我帖子的顺序(按自定义税务术语组织)。
我定制了一个“staff”的post类型,在staff中有一个“staff title”的自定义分类法。
我添加了诸如“主编”、“总编辑”、“诗歌编辑”等术语(类似于为客户保持UI整洁的类别)。其想法是客户可以进入“员工”职位类型,创建以员工名字命名的职位,然后检查他们担任的职位,然后这些职位将按正确的顺序显示(通过运行命令链显示职位)。
下面是在函数中创建自定义税的函数。php:
function add_custom_taxonomies() {
// Add new "Locations" taxonomy to Posts
register_taxonomy(\'staff-title\', \'staff\', array(
// Hierarchical taxonomy (like categories)
\'hierarchical\' => true,
// This array of options controls the labels displayed in the WordPress Admin UI
\'labels\' => array(
\'name\' => _x( \'Staff Titles\', \'taxonomy general name\' ),
\'singular_name\' => _x( \'Title\', \'taxonomy singular name\' ),
\'search_items\' => __( \'Search Titles\' ),
\'all_items\' => __( \'All Titles\' ),
\'parent_item\' => __( \'Parent Title\' ),
\'parent_item_colon\' => __( \'Parent Title:\' ),
\'edit_item\' => __( \'Edit Title\' ),
\'update_item\' => __( \'Update Title\' ),
\'add_new_item\' => __( \'Add New Title\' ),
\'new_item_name\' => __( \'New Title Name\' ),
\'menu_name\' => __( \'Staff Titles\' ),
),
// Control the slugs used for this taxonomy
\'rewrite\' => array(
\'slug\' => \'locations\', // This controls the base slug that will display before each term
\'with_front\' => false, // Don\'t display the category base before "/locations/"
\'hierarchical\' => true // This will allow URL\'s like "/locations/boston/cambridge/"
),
));
}
add_action( \'init\', \'add_custom_taxonomies\', 0 );
这是我在员工页面上的WP\\U查询。。。
$args = array(
\'post_type\' => \'staff\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'staff-title\',
\'field\' => \'slug\',
\'terms\' => array(\'editor-in-chief\', \'managing-editor\', \'fiction-editor\', \'poetry-editor\', \'nonfiction-editor\', \'production-manager\' )
)
),
\'posts_per_page\' => \'-1\',
\'order\' => \'ASC\',
\'orderby\' => \'meta_value_num\'
);
$my_query = new WP_Query( $args );
tax\\u查询“terms”=>数组(…)按显示顺序列出了术语(员工职位),但事实并非如此。
访问员工页面时,帖子按以下顺序显示,但顺序错误:
总编辑-陈静恩(Ching in Chen)总编辑-莎娜·马丁内斯(Shanae Martinez)制片经理-马修·莫里斯·库克(Matthew Morris Cook)非小说类编辑-凯特·奈斯海姆(Kate Nesheim)诗歌编辑-C.麦卡利斯特·威廉姆斯(C.McCallister Williams)诗歌编辑-卡拉·范德格拉夫(Kara van de Graaf)小说编辑-洛蕾塔·麦考密克(Loretta McCormick)小说编辑-莫莉·布特尔(Mollie Boutell)
以下是正确的顺序,仅供参考(与税务查询术语数组的顺序相同):
总编辑-陈静恩主编-莎娜·马丁内斯小说编辑-洛蕾塔·麦考密克小说编辑-莫莉·布特尔诗歌编辑-C·麦考利斯特·威廉姆斯诗歌编辑-卡拉·范德格拉夫非小说编辑-凯特·奈斯海姆制作经理-马修·莫里斯·库克
我列出了员工的名字,因为他们是各个职位的头衔,我认为他们可能是问题的一部分。
有人对我如何解决这个问题有什么想法吗?如果您需要更多信息,请告诉我,我很乐意提供。提前感谢!
SO网友:iantsch
另一个解决方法是自定义post元字段,其中包含所有可用的分类术语staff-title
. 在您的帖子的保存操作中,您甚至可以添加对您的后期关系的处理。
function my_staff_title_term_meta_box($post) {
$staff_title= get_post_meta($post->ID, \'_staff_title_term_slug\', true);
$terms = get_terms(\'staff-title\', array(\'hide_empty\' => false));
// your term slugs are the ones manipulating the order, e.g. title-1 for the first title to appear and so on…
echo "<select name=\'staff_title_term_slug\' id=\'staff_title_term_slug\'>";
echo "<option value=\'\'".(empty($staff_title)?" selected=\'selected\'":\'\').">".__(\'No staff title\', \'my_textdomain\')."</option>";
if (!empty($terms) && is_array($terms)) foreach ($terms as $term) {
echo "<option value=\'{$term->slug}\'".(!empty($staff_title) && $staff_title == $term->slug?" selected=\'selected\'":\'\').">{$term->name}</option>";
}
echo "</select>";
}
function add_my_staff_title_term_meta_box() {
add_meta_box(
\'my-staff-title-term\',
__(\'Staff Title\',\'my_textdomain\'),
\'my_staff_title_term_meta_box\',
\'staff\',
\'side\',
\'low\'
);
}
add_action( \'add_meta_boxes\', \'add_my_staff_title_term_meta_box\');
function save_my_stuff_title_term($post_id) {
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
return;
if ( !current_user_can( \'edit_post\', $post_id ) )
return;
if ($_POST[\'staff_title_term_slug\']) {
update_post_meta($post_id, \'_staff_title_term_slug\', $_POST[\'staff_title_term_slug\']);
} else {
delete_post_meta($post_id, \'_staff_title_term_slug\');
}
//TODO: Additionally handling ticked staff title terms, e.g. overwrite them with chosen slug
}
add_action( \'save_post\', \'save_my_stuff_title_term\' );
在前端查询中,可以按post元字段排序。
function filter_my_staff_query( $query ) {
if ( $query->is_main_query() && $query->is_archive() && $query->get(\'post_type\') === \'staff\' && !is_admin()) {
$query->set(\'meta_key\', \'_staff_title_term_slug\');
$query->set(\'orderby\', \'meta_value\');
}
}
add_action( \'pre_get_posts\', \'filter_my_staff_query\' );