我认为没有必要为餐厅创建另一张桌子,但我不知道你网站的整个结构。
一旦餐厅已经成为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中添加一个餐厅的唯一标识符,因为如果您依赖餐厅名称,您将无法重命名它,如果出现拼写错误,也无法重命名它。。。