自动将类别添加到自定义发布类型

时间:2017-03-25 作者:The Chewy

我将在网站上设置一个自定义帖子类型(针对职位空缺),我将使用类别在网站的主导航上创建一个单独的菜单项,我将使用“作业”类别有效地将作业菜单项作为第二个博客运行。

我希望这样,当客户端在后端添加作业时,在此自定义帖子类型下创建的帖子会自动应用“作业”类别,而不管它们使用任何其他类别,因此发布的作业会自动添加到前端的此菜单项中。

有没有办法自动将类别添加到自定义帖子类型?而且,这样一来,任何带有“乔布斯”类别的帖子都不会显示在主博客页面上(这将是一个新闻和市场信息页面)。

任何帮助都会很棒。

艾米丽

2 个回复
SO网友:Charles

要回答第一个问题(用Cat预先填充CPT),可以在函数中添加以下函数。php(先备份svp)

在下面的代码中,电影是自定义帖子类型,恐怖是类别
请更改为自己的首选项。

/**
 * Set a Category on Custom Post Type
 * 
 * Read more: {@link https://developer.wordpress.org/reference/functions/get_post_type/}
 *            {@link https://codex.wordpress.org/Function_Reference/get_category_by_slug}
 *            {@link https://codex.wordpress.org/Function_Reference/wp_set_object_terms}
 *            
 */
add_action( \'save_post\', \'wpse261307_set_cat_on_cpt\' );
function wpse261307_set_cat_on_cpt( $post_id )
{
    global $wpdb;

    // Check for correct post type
    if ( get_post_type() == \'movies\' ) // Set post or custom-post type name here
    {  
        // Find the Category by slug
        $idObj = get_category_by_slug( \'horror\' ); // Set your Category here
        // Get the Category ID
        $id = $idObj->term_id;

       // Set now the Category for this CPT
       wp_set_object_terms( $post_id, $id, \'category\', true );
    }

}// end function
--

然后,我将为这个特定的CPT制作一个隐藏后端中的元框的函数。(因此,没有人可以添加/更改类别,但这仅在您仅使用1个category pro发布时有用)

--

然后,您需要创建一个函数来隐藏这个特定的CPT,以便在主博客页面上显示(通过使用查询排除博客主页上的“工作”类别)

/**
 * Exclude CPT with Cat jobs on Landing page
 *
 * Read more: {@link https://codex.wordpress.org/Function_Reference/get_category_by_slug}
 *            {@link https://codex.wordpress.org/Function_Reference/wp_set_object_terms}
 *            {@link https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts#Exclude_categories_on_your_main_page}
 *            {@link https://codex.wordpress.org/Function_Reference/is_main_query#Examples}
 */
add_action( \'pre_get_posts\', \'wpse261307_exclude_cat_main_blog\' );
function wpse261307_exclude_cat_main_blog( $query )
{   
    global $wpdb;

    // Find the Category by slug
    $idObj = get_category_by_slug( \'horror\' );
    // Get the Category ID
    $id = $idObj->term_id;

    if ( $query->is_home() && $query->is_main_query() ) {

        $query->set( \'cat\', -$id );
    }

} // end function
希望这对你有所帮助。

注意:
将其添加到家庭brew插件或myfunctions.phpwp-content/mu-plugins 文件夹(您必须自己创建)
•当切换到另一个主题时,我是最可靠的解决方案,以确保不会丢失任何东西(意思是看不见,因为它仍在您的数据库中)(直接在template 当您切换到另一个主题时,文件不再可见)顺便说一句,相同的(将它们添加到wp-content/mu-plugins 文件夹)我可以创建自定义帖子类型。

Ps,澄清为什么我不喜欢使用id 直接编号:

无论出于何种原因,某个类别被删除,之后似乎是一个错误,需要再次创建相同的类别

  • 创建一个新类别时(即使使用相同的名称)会得到另一个类别id 数字,然后(当您在任何代码中直接使用数字本身时)由于错误的id 编号
  • SO网友:Cedon

    已询问并回答了向自定义帖子类型自动添加类别的问题here.

    至于排除它,那么您需要编写一个自定义WP_Query:

    $args = array( 
       \'post_type\' => \'post\',
       \'cat\' => -1,
    );
    
    $fp_query = new WP_Query( $args )
    // The Loop
    if ( $fp_query->have_posts() ) {
       // Loop Code for Posts
       wp_reset_postdata();
    } else {
      // No Posts Found Code
    }
    
    您可以更改1 类别ID的编号jobs 但保持为负值,因为这会触发排除。

    相关推荐