在主题启动时创建类别时,如何将类别分配给页面?

时间:2016-07-02 作者:ijason

我正在完成我的主题工作。尽管它是供个人使用的,但我想自动创建一些基本页面,这样它在激活时就可以正常工作了。

我已将以下代码添加到functions.php, 并且类别和页面都已成功创建。但是,不会自动将类别分配给新创建的页面。我依赖于向页面添加类别插件来实现此功能,我怀疑这就是为什么它不能正常工作的原因

// let\'s create some stuff on init
    if (isset($_GET[\'activated\']) && is_admin())       //check for init
    {    

        // create categories 
        if (file_exists (ABSPATH.\'/wp-admin/includes/taxonomy.php\')) 
            {
                require_once (ABSPATH.\'/wp-admin/includes/taxonomy.php\');    
                if (!get_cat_ID(\'plants\')) {wp_create_category(\'plants\');}
            }

        // create pages
        if (get_page_by_title(\'potato\') == NULL)       //check if page exists
        {
           $new_page_title = \'potato\';

             $post_cat = get_term_by(\'name\', \'plants\', \'category\');
             $post_cat = $post_cat->term_id;

           $new_page_content = \'coming soon\';
               //$new_page_template = \'template-page-with-subnav.php\';
           $post_parent = \'\';
           $page_check = get_page_by_title($new_page_title);

           $new_page = array(
                   \'post_type\'     => \'page\',
                 \'post_category\'   => $post_cat,
                   \'post_title\'    => $new_page_title,
                   \'post_content\'  => $new_page_content,
                   \'post_status\'   => \'publish\',
                   \'post_author\'   => 1,
                   \'post_parent\'   => $post_parent, );
           if(!isset($page_check->ID))
              {
                $new_page_id = wp_insert_post($new_page);
                if(!empty($new_page_template))
                {update_post_meta($new_page_id, \'_wp_page_template\', $new_page_template);}
              }

        }

    }
激活主题后,我创建了预期的类别和页面,但它们之间没有链接。

1 个回复
SO网友:ijason

了解如何完成任务:

// function to fetch tag ID from name
   function get_tag_ID($tag_name) 
   { $tag = get_term_by(\'name\', $tag_name, \'post_tag\'); if ($tag) { return $tag->term_id; } else { return NULL;}    }

// add categories & tag taxonomy to pages
   register_taxonomy_for_object_type( \'category\', \'page\' );
   register_taxonomy_for_object_type( \'post_tag\', \'page\' ); 

// let\'s create some stuff on init
    if (isset($_GET[\'activated\']) && is_admin())       //check for init
    {  
        // create categories & tags
        if (file_exists (ABSPATH.\'/wp-admin/includes/taxonomy.php\'))
            {
                require_once (ABSPATH.\'/wp-admin/includes/taxonomy.php\'); 
                // categories
                $check = get_cat_ID(\'plants\'); if(empty($check)) {wp_create_category(\'plants\');}
                $check = get_cat_ID(\'animals\'); if(empty($check)) {wp_create_category(\'animals\');}

                //tags
                $check = get_tag_ID(\'tall\'); if (empty($check)) {wp_create_tag(\'tall\');}
                $check = get_tag_ID(\'short\'); if (empty($check)) {wp_create_tag(\'short\');}
            }

        // create pages
        $new_page_title = \'carrot\';          // define PAGE TITLE
        $new_page_cat   = \'plants\';          // define PAGE CATEGORY
        $new_page_tag   = array(\'tall\');     // define PAGE TAGS

        $page_check = get_page_by_title($new_page_title);
        if(!isset($page_check->ID))           // verify new page is unique
            {
            $new_page = array(
            \'post_type\'     => \'page\',
            \'post_title\'    => $new_page_title,
            \'post_content\'  => \'more coming soon\',
            \'post_status\'   => \'publish\',
            \'post_author\'   => 1,
            \'post_parent\'   => \'\', );

            $post_cat = get_term_by(\'name\', $new_page_cat, \'category\');
            $post_cat = $post_cat->term_id;
            $new_page_cat = array($post_cat);

            $new_page_id = wp_insert_post($new_page);                   // create page
            wp_set_post_categories( $new_page_id,$new_page_cat, true ); // set category
            wp_set_post_tags( $new_page_id,$new_page_tag, true );       // set tags 
            }

    }
@Milo,谢谢你的帮助:)

对于任何希望在激活主题时执行相同操作的人来说,这段代码在我所做的所有测试中都非常有效:验证要创建的类别和标记是否已经存在,验证要创建的页面是否已经存在。页面创建工作正常,并将类别和标记正确链接到创建的页面。当您查看类别或标记索引时,所有正确的关系都会显示出来,因此任何一个的搜索都应该正常工作。

激活主题后,您可以在WP的其他地方使用get\\u tag\\u ID()函数。

现在将为分类法和标签分类法注册页面,尽管编码或plugin 将需要提供管理元数据库。

干杯

相关推荐

About wordpress child themes

我对WordPress和儿童主题有一些问题。据我所知,如果我不想在更新主题时失去任何东西,使用子主题是很重要的。我是WordPress的初学者,到目前为止,我一直在使用PageBuilder(管理面板上的板载自定义选项)自定义我的网站,并在“附加CSS”选项中加入几行CSS。所有这些都是在主主题上完成的(只是玩转尝试学习),现在我想开始使用一个儿童主题。问题如下:我不知道我是否可以像通过管理界面设计父主题那样设计我的子主题,或者我是否必须通过文本编辑器(在我的计算机上,然后通过FTP等方式上传)对所有内容