给定两种自定义帖子类型:自动将元字段从一种自定义帖子类型添加到另一种

时间:2013-12-10 作者:user2772219

自定义职位类型“公司”具有:

餐厅名称字段

餐厅描述字段

  • 。。和其他更多字段

  • 自定义贴子类型“餐厅”有:

    餐厅名称字段

    餐厅描述字段

    我如何才能做到每当我添加一家新公司时(填写餐厅字段),它都会自动添加一家新餐厅,其字段/详细信息与新添加的公司相同?

    我的想法是:

    每当我创建新公司时,我都会将餐厅详细信息添加到数据库中的“餐厅”表中

    此外,每当我创建一家新公司时,我都会从“餐厅”表中获取最新条目,并以某种方式附加它们以创建一个新的餐厅帖子

    这有可能吗?如果没有,或者您有其他解决问题的想法,请分享。

    如果他们能够完成任务,请随意推荐多个插件。

    提供一个例子将非常有帮助。谢谢

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

    我认为没有必要为餐厅创建另一张桌子,但我不知道你网站的整个结构。

    一旦餐厅已经成为CPT,它们就会被保存到posts表中,并且您共享的信息似乎足够了。

    创建公司帖子并填写餐厅名称字段时,自动创建餐厅帖子非常容易,无需任何插件。

    如果您使用metabox插入餐厅名称/描述,可能您正在勾选save_post 要将该字段保存到餐馆帖子,可以使用相同的功能保存餐馆帖子wp_insert_post: 使用餐厅名称作为标题,餐厅描述作为内容和设置post_author 到相同的post_author 公司职位。在餐馆帖子中,您可以保存一个自定义字段,例如\'_company_ID\' 并将其设置为公司帖子id。当您需要检索链接到特定公司的餐厅时,它将非常有用,此外,它将帮助您避免重复。

    我假设您有一个元盒来插入餐厅元字段。如果没有,我建议添加一个,请参阅add_meta_box 文档。

    假设有一个函数挂钩\'save_post\' 要从元框中保存餐厅元字段,请执行以下操作:

    add_action(\'save_post\', \'save_restaurant_fields\');
    
    function save_restaurant_fields( $postid ) {
    
      /* If this is an autosave, do not do anything */
      if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;
    
      /*
       Check if our nonce is set (of course you have to set a nonce in the metabox)
       see wp_nonce_field in codex //codex.wordpress.org/Function_Reference/wp_nonce_field
      */
      $nonce = filter_input(INPUT_POST, \'restaurant_data_nonce\', FILTER_SANITIZE_STRING);
      if ( empty($nonce) || ! wp_verify_nonce( $nonce, \'restaurant_data\' ) ) return;
    
      /* Check the user\'s permissions */
      if ( ! current_user_can( \'edit_post\', $postid ) ) return;
    
      /* Continue only for Company CPT */
      $post = get_post( $postid );
      if ( $post->post_type !== \'company\' ) return;
    
      /* Get & sanitize user input */
      $rname = filter_input(INPUT_POST, \'restaurant_name\', FILTER_SANITIZE_STRING);
      $rdesc = filter_input(INPUT_POST, \'restaurant_desc\', FILTER_SANITIZE_STRING);
    
      /* Update the meta fields in the database */
      update_post_meta( $postid, \'_restaurant_name\', $rname );
      update_post_meta( $postid, \'_restaurant_desc\', $rdesc );
    
      /* Now check if exists a restaurant for this company */
      $meta = array( array( \'key\' => \'_company_ID\', \'value\' => $post->ID ) );
      $exists = new WP_Query( \'post_type\' => \'restaurant\', \'meta_query\' => $meta );
    
      if ( ! $exists->found_posts ) { /* restaurant for company does not exists */
    
        $restaurant = array(
          \'post_type\'   => \'restaurant\',
          \'post_title\'   => $rname,
          \'post_content\' => $rdesc,
          \'post_author\'  => $post->post_author,
          \'post_status\'  => \'publish\'
        );
        $rid = wp_insert_post( $restaurant ); /* save restaurant post */
    
        if ( is_numeric($rid) && (int) $rid > 0 ) {
          /* save company ID in a restaurant meta field */
          update_post_meta( $rid, \'_company_ID\', $post->ID );
    
          /*
          I inserted restaurant post name/description as post title/description
          but if you need restaurant them also in custom fields
          */
          update_post_meta( $rid, \'_restaurant_name\', $rname );
          update_post_meta( $rid, \'_restaurant_desc\', $rdesc );
        }
      }
    
    }
    
    如果一家公司只能有一家相关餐厅,那么这个代码就可以了,否则我建议在metabox中添加一个餐厅的唯一标识符,因为如果您依赖餐厅名称,您将无法重命名它,如果出现拼写错误,也无法重命名它。。。

    结束

    相关推荐

    How do i Sort my Posts

    我寻找一种解决方案,如何在我的页面中对文章进行排序。我在谷歌上搜索了几个小时,尝试了很多东西,但都不管用:(。不管怎样,也许有人能给我一个好的建议。我想要一个简单的列表,其中包含排序选项,如“最新优先”或“相关性”或“字母顺序(条目标题)”。有什么想法吗?