根据帖子信息在保存时创建新类别

时间:2012-05-28 作者:Pat

在找到了一些关于如何做到这一点的线索之后,我的回答是空白的。我试图完成的是根据相机名称将帖子添加到一个新类别中。如果类别不存在,则创建并添加。

基本上,我下面的内容获取附件元信息,并将相机信息保存到$camera中。从那以后,它有点崩溃了。

function add_post_camera_category() {
global $post;
global $wpdb;
    // Load array with attachment information
    if (is_null($imgID)) {
        $images = get_children(array(
            \'post_parent\' => $post->ID,
            \'post_type\' => \'attachment\',
            \'numberposts\' => 1,
            \'post_mime_type\' => \'image\',
            \'orderby\' => \'ID\',
            \'order\' => \'ASC\'
            ));
        if ($images) {
            foreach ($images as $image) {
                $imgID = $image->ID;
            }
        }
    }

    $imgmeta = wp_get_attachment_metadata($imgID);
if ($imgmeta)
{
    if ($imgmeta[\'image_meta\'][\'camera\'])
        $camera = $imgmeta[\'image_meta\'][\'camera\'];

            // Add to custom category
        if(!has_term(\'\',\'category\',$post_ID)){
            $category = get_term_by( \'slug\', $camera, \'category\' );
            $cat = array($category->slug);
            wp_set_object_terms($post_ID, $cat, \'category\');
        }

}

}
add_action(\'save_post\', \'add_post_camera_category\');

2 个回复
最合适的回答,由SO网友:brasofilo 整理而成

首先,对您的代码进行一些评论:

全球$post$wpdb 不需要,在任何情况下,您都可以将其声明为global $post, $wpdb;if (is_null($imgID))

  • 您正在使用get_term_by 使用“slug”,但我想最好使用“name”
  • 以下是一个工作代码,但我不确定其中是否有任何缺陷。因为我无法调试save_post 使用FireHP,我做了一个肮脏的把戏,将变量转储到自定义字段中:update_post_meta($post_ID, \'cf_debug_info\', print_r($imgmeta,true));.

    add_action(\'save_post\', \'wpse_53549_add_post_camera_category\', 10, 2);
    
    function wpse_53549_add_post_camera_category($post_ID, $post) {
    
        if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;
    
        $images = get_children( array(
            \'post_parent\' => $post_ID,
            \'post_type\' => \'attachment\',
            \'numberposts\' => 1,
            \'post_mime_type\' => \'image\',
            \'orderby\' => \'ID\',
            \'order\' => \'ASC\'
        ));
    
        if ( $images ) 
        {
            $image = array_shift( $images );
            $imgID = $image->ID;
        }
    
        if ( !$imgID ) 
                return;
    
        $imgmeta = wp_get_attachment_metadata($imgID);
    
        if ( $imgmeta )
        {
            // this info may be useful when checking for has_term
            // $defaultcat = get_option(\'default_category\');
    
            $camera = ($imgmeta[\'image_meta\'][\'camera\']) ? $imgmeta[\'image_meta\'][\'camera\'] : false;        
    
            if ( $camera )
    
                // Add to custom category
                if( !has_term( $camera, \'category\', $post_ID ) )
                {
                    $category = get_term_by( \'name\', $camera, \'category\' );
                    if ( $category )
                    {
                        $cat = array( $category->slug );
                        // the last parameter sets if the term must be appended or overwrite the previous
                        wp_set_object_terms( $post_ID, $cat, \'category\', true );
                    }
                    else
                    {
                        $id = wp_create_category( $camera );
                        $new_cat = get_term_by( \'id\', $id, \'category\' );
                        wp_set_object_terms( $post_ID, $new_cat->slug, \'category\', true );
                    }
                }
    
        }
    
    }
    

    SO网友:Bruce Pearson

    使用$post->ID获取图像数据,然后使用$post\\U ID保存术语数据。我认为没有定义$post\\u ID。

    我通常从函数调用中获取post ID,可能应该是:function add\\u post\\u camera\\u category($post\\u ID){

    http://codex.wordpress.org/Plugin_API/Action_Reference/save_post

    结束

    相关推荐

    使用$_SESSION和PRE_GET_POSTS的自定义发布类型搜索

    我整天都在黑客攻击一个自定义的帖子类型搜索/过滤系统。到目前为止,我有:function kdev_property_query($query) { if(isset($_POST[\'rooms_n\'])) $_SESSION[\'rooms_n\'] = $_POST[\'rooms_n\']; if(isset($_POST[\'univer\'])) $_SESSION[\'univer\'] = $_POST[\'univer\']; if(isset($_P