如何在书籍和作者之间建立关系?

时间:2013-03-03 作者:Mike

我有一个图书类别,但现在我希望每本书都可以与作者简介页面连接。还有一个选项卡,作者可以在文本之外显示他所写的书籍列表<我该怎么做?

1 个回复
SO网友:brasofilo

为了建立关系,我知道有两个插件,它们的编码和维护都很好:

  • Posts 2 Posts

    帖子、页面、自定义帖子类型、用户之间高效的多对多连接。

  • Advanced Custom Fields - 这个需要附加组件Users Select, 但是,由于插件正在被完全重写,并将改变附加模块的管理,因此最好等到4.0版发布。

    使用强大的字段完全定制WordPress编辑屏幕。它拥有专业的界面和强大的API,对于任何使用WordPress的web开发人员来说都是必不可少的。

    但是我认为simple plugin 可以为此构建:

    1. 在Posts屏幕中添加一个元框,以选择书的作者(而不是post作者)。

    /* Define the custom box */
    add_action( \'add_meta_boxes\', \'authors_meta_box_wpse_89134\' );
    
    /* Do something with the data entered */
    add_action( \'save_post\', \'save_postdata_wpse_89134\', 10, 2 );
    
    function authors_meta_box_wpse_89134() 
    {
        add_meta_box(
            \'sectionid_wpse_89134\',
            __( \'Book authors\' ), 
            \'authors_box_wpse_89134\',
            \'post\'
        );
    }
    
    function authors_box_wpse_89134() 
    {
        global $post;
    
        $selected_user = get_post_meta( $post->ID, \'users_dropdown\', true);
        $users_list = get_users();
    
        // Use nonce for verification
        wp_nonce_field( plugin_basename( __FILE__ ), \'noncename_wpse_89134\' );
    
        echo \'<div class="element">
            <select name="users_dropdown" id="users_dropdown">
            <option value="">- Select -</option>\';
    
        foreach( $users_list as $user ) {
              echo \'<option value="\'.$user->ID.\'" \' . selected( $selected_user, $user->ID, false ) . \'>\'.$user->data->display_name.\'</option>\';
        }
    
        echo \'</select></div>\';
    }
    
    function save_postdata_wpse_89134( $post_id, $post_object ) 
    {
        // verify if this is an auto save routine. 
        if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )  
            return;
            
        // verify this came from the our screen and with proper authorization,
        if ( !isset( $_POST[\'noncename_wpse_89134\'] ) || !wp_verify_nonce( $_POST[\'noncename_wpse_89134\'], plugin_basename( __FILE__ ) ) )
            return;
    
        // Correct post type
        if ( isset( $_POST[\'post_type\'] ) && \'post\' != $_POST[\'post_type\'] ) 
            return;
    
        // OK, we\'re authenticated: we need to find and save the data
        
        //sanitize user input
        $u_id = ( isset( $_POST[\'users_dropdown\'] ) ) ? intval( $_POST[\'users_dropdown\'] ) : false;
    
        if( $u_id )
            update_post_meta( $post_id, \'users_dropdown\', $_POST[\'users_dropdown\'] );
        else
            delete_post_meta( $post_id, \'users_dropdown\' );
    }
    
    2. 在配置文件中显示作者的书并编辑用户页面

    add_action( \'show_user_profile\', \'user_books_wpse_89134\' );
    add_action( \'edit_user_profile\', \'user_books_wpse_89134\' );
    
    function user_books_wpse_89134( $user ) 
    {
        $args = array(
            \'post_type\' => \'post\',
            \'meta_key\'=>\'users_dropdown\',
            \'meta_value\'=>$user->ID,
            \'meta_compare\'=>\'=\'
        );
    
        $the_query = new WP_Query( $args );
        
        echo \'<h3>\'. __(\'User books\') .\'</h3>\';
        while ( $the_query->have_posts() ) :
            $the_query->the_post();
            echo \'<li>\' . get_the_title() . \'</li>\';
        endwhile;
    }
    

结束

相关推荐

Author bio Social Links

我使用简单的代码在作者简历中显示用户的社交链接。in functions.php<?php function add_remove_contactmethods( $contactmethods ) { // Add Twitter $contactmethods[\'twitter\'] = \'Twitter\'; //Add Facebook $contactmethods[\'facebook\'] = \'Facebo