将类别选择添加到自定义帖子类型(插件)

时间:2014-03-03 作者:Rvervuurt

我在我工作的公司接了别人的旧项目。他们创建了一个插件来向网站添加课程(包括日期、位置等),但他们没有添加为课程选择类别的可能性。

我想添加这个函数,我试图通过查看他们的其他代码,复制/粘贴它,并对其进行调整,使其符合我的需要。

它确实显示在页面的右侧,但无论我做什么,它都不记得类别。Category selection showing

我还修改了文件下方的“POST”功能,但我想我仍然缺少一段实际激活类别选择的代码,因为它也没有显示在所有课程的概述中:

No category displayed

之前的开发人员与add_meta_box 在侧面创建长方体。我创建了以下内容:

add_meta_box(
        \'course_category_box\',          // Unique ID 
        esc_html__( \'Category\', \'Category Box\' ),       // Title
        \'render_course_category_box\',       // Callback function
        \'course\',                   // Admin page (or post type)
        \'side\',                 // Context
        \'default\'                   // Priority
    );
我通过使用

<?php
    function render_course_category_box( $object, $box ) {

        wp_nonce_field( basename( __FILE__ ), \'course_category_box_nonce\' ); ?>
    <p>
         <?php wp_dropdown_categories( $args ); ?> 
    </p>
<?php } ?>
并将其添加到save_course_meta_boxes 作用

if ( !isset( $_POST[\'course_category_box_nonce\'] ) || !wp_verify_nonce( $_POST[\'course_category_box_nonce\'], basename( __FILE__ ) ) )
        return $post_id;
现在,我可能正在做一些太复杂的事情,因为Wordpress通常有一种更简单的方法来添加这样的函数。

我希望我的问题已经很清楚了。如果没有,请随时询问更多信息!

3 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

除了Kaiser的回答之外,当您注册帖子类型时,只需使用taxonomies 属性:

register_post_type( \'my-cpt\', array(
  ...
  \'taxonomies\' => array( \'category\' ),
  ...
) );
有关的详细信息register_post_type() 可以是found here in Codex.

SO网友:kaiser

当您的分类法已经注册(或者是一个内置的分类法,如贴子标记、类别等)时,您可以使用register_taxonomy_for_object_type():

register_taxonomy_for_object_type( \'category\', \'course\' );
只需确保在分类法和帖子类型都已注册之后执行该操作。

SO网友:kaiser

@StephenHarris答案的其他信息:

当您注册一个分类法和一个帖子类型并想要连接它们时,有一个important 规则:

始终首先注册分类法。然后注册post类型。

原因很简单:看看register_taxonomy():

// Adds the 2nd argument ($object_type) to the arguments:
$args[\'object_type\'] = array_unique( (array) $object_type );

// ...

// Then the taxonomy gets added the complete Array $args as object
$wp_taxonomies[ $taxonomy ] = (object) $args;
当你看到register_post_type():

foreach ( $args->taxonomies as $taxonomy ) {
    register_taxonomy_for_object_type( $taxonomy, $post_type );
}
所以这需要register_taxonomy_for_object_type() 如果分类法没有全局注册,帖子类型也没有就位,那么这将失败。如果您以相反的方式进行操作,并首先注册CPT,那么它将失败。

结束

相关推荐

WP_Query->Get_Posts中的Split_the_Query的用途/逻辑是什么

在WP\\u Query的get\\u posts方法中,有一个部分与split\\u查询相关split\\u查询的逻辑是$split_the_query = ( $old_request == $this->request && \"$wpdb->posts.*\" == $fields && !empty( $limits ) && $q[\'posts_per_page\'] < 500 ); 可以总结为。如果:计算出的查询