目前我有两种职位类型,“产品”和“产品数据”,它们是独立的职位类型;然而,出于所有目的,产品数据都是产品的子帖子。该关系是通过产品数据“parent”的元元素建立的,该元素将具有产品帖子的帖子ID。
“产品数据”帖子只有一种创建方式——用户单击产品帖子类型中的产品,并在弹出窗口中输入数据。这使用wp\\u insert\\u post创建产品数据post,并使用“产品”post的ID值添加元元素“parent”。如果用户单击产品类型,则通过模式窗口显示此数据。
我正在尝试让他们的永久链接如下:
“products”帖子的Permalink架构(在本例中,该帖子的ID为123):
http://example.com/products/new-product-1/
元键/父值大于123的“产品数据”帖子的Permalink架构
http://example.com/products/new-product-1/information-product-data/
下面是我用来注册帖子类型和创建重写规则的代码;然而,在添加此代码并刷新我的重写规则(设置>永久链接)后,它对“产品数据”帖子类型很有效,但当我尝试访问“产品”帖子时,它会显示WordPress网站的主页(注意,这不是通过重定向,URL栏会显示“产品”URL)。
我想知道问题是否在于这两个permastructs看起来可能会相互冲突,但是由于permastructs模式,在实践中永远不会出现这种情况。
如果您能帮助解决此问题,我们将不胜感激。
代码:
add_action ( \'init\', \'register_product_post_types\' );
add_action ( \'init\', \'products_add_rewrite_rules\' );
add_filter ( \'post_type_link\', \'products_permalinks\', 10, 3 );
function register_product_post_types() {
register_post_type( \'products\',
array(
\'supports\' => array( \'title\', \'editor\', \'author\',"custom-fields", "thumbnail", "excerpt", \'comments\' ),
\'labels\' => array(
\'name\' => __( \'Products\' ),
\'singular_name\' => __( \'Products\' )
),
\'public\' => true,
\'has_archive\' => false,
\'rewrite\' => FALSE,
)
);
register_post_type( \'products-data\',
array(
\'supports\' => array( \'title\', \'editor\', \'author\',"custom-fields" ),
\'labels\' => array(
\'name\' => __( \'Products-Data\' ),
\'singular_name\' => __( \'Products-Data\' )
),
\'show_in_menu\' =>\'edit.php?post_type=products\',
\'public\' => true,
\'has_archive\' => false,
\'rewrite\' => FALSE,
)
);
}
function products_add_rewrite_rules() {
global $wp_rewrite;
$wp_rewrite->add_rewrite_tag(\'%products%\', \'([^/]+)\', \'products=\');
$wp_rewrite->add_rewrite_tag(\'%products-data%\', \'([^/]+)\', \'products-data=\');
$wp_rewrite->add_rewrite_tag(\'%parent%\', \'([^/]+)\', \'parent=\');
$wp_rewrite->add_permastruct(\'products-data\', \'/products/%parent%/%products-data%\', false);
}
function products_permalinks($permalink, $post, $leavename) {
$no_data = \'no-data\';
$post_id = $post->ID;
if($post->post_type != \'products-data\' || empty($permalink) || in_array($post->post_status, array(\'draft\', \'pending\', \'auto-draft\')))
return $permalink;
$data = sanitize_title(get_the_title(get_post_meta($post_id, \'parent\', true)));
if(!$data) $data = $no_data;
$permalink = str_replace(\'%parent%\', $data, $permalink);
return $permalink;
}