WordPress自定义帖子类型固定链接结构,带有自定义字段值

时间:2015-07-18 01:38:50

标签: wordpress parsing url rewrite

我正在尝试修改自定义帖子类型“项目”的网址结构。

我希望网址结构如下:

http://localhost/project/%location%/project-name

%location%是与该帖子相关联的自定义字段值。

因此,如果我有一个名为'test'的帖子,其自定义字段值为'seattle',则网址将如下所示:

http://localhost/project/seattle/test

我已经半成品完成了以下内容:

function test_query_vars( $query_vars ) {
    $query_vars[] = 'location';
    return $query_vars;
}
add_filter( 'query_vars', 'test_query_vars' );

function test_init() {
    $wp_rewrite->add_rewrite_tag( '%project%', '([^/]+)', 'project=' );
    $wp_rewrite->add_rewrite_tag( '%location%', '([^/]+)', 'location=' );

    $wp_rewrite->add_permastruct( 'project', 'project/%location%/%project%', false );

    // Register post type
    register_post_type( 'project', 
        array(
            'labels' => $labels,
            'public' => true,
            'rewrite' => false,
            'has_archive' => true,
            'menu_position' => NULL,
            'supports' => array ( 'title', 'editor', 'thumbnail', 'page-attributes', 'excerpt', 'comments', 'author' ),
            'yarpp_support' => true,
        )
    );
}
add_action( 'init', 'test_init' );

这有一些问题:

  1. 网址中的位置自定义字段可以是任何内容。如果我转到http://localhost/project/atlanta/test并且位置自定义字段实际上是“西雅图”,它仍然会显示所需的帖子。它应该是404,因为'test'帖子将自定义字段'location'值设置为'seattle'。
  2. 如果我转到http://localhost/project/seattle,它会显示博客,但实际上它应该显示我的项目,其自定义字段值设置为“西雅图”。
  3. 此帖子类型的档案现在有404,例如http://localhost/project/应显示所有项目。
  4. 我尝试使用以下内容修改查询,但仍然无效:

    function test_parse_query( $query ) {
        if ( 'project' == $query->query_vars['post_type'] ) {
    
            $query->set('meta_query', array(
                array(
                    'key' => 'project_location',
                    'value' => $query->query_vars['location']
                )
            ));
        }
    
        return $query;
    }
    add_filter( 'parse_query', 'test_parse_query' );
    

    任何帮助将不胜感激:)

0 个答案:

没有答案