将自定义内容添加到不存在的页面

时间:2013-10-04 作者:Praesagus

我正在尝试向404页面添加内容。例如,我想为mysite定义帖子内容。com/现有页/虚拟页,而不是显示404页。我尝试了几种不同的方法,但都没有成功,因此我非常感谢您的帮助。我的实际结构是:mysite。com/个人发展/课程。我的网站。com/个人发展存在,但mysite除外。com/个人发展/班级没有。我的网站。com/personal development/class将显示mysite中更改的内容。com/个人发展

如果类页面实际存在,则“添加\\u重写\\u”规则似乎有效。

add_action( \'init\', \'dynamic_classes_class_type_rewrite\' );
function dynamic_classes_class_type_rewrite()
{
    global $wp_rewrite;
    add_rewrite_tag( \'%personal-development%\', \'([^&]+)\' );
    add_rewrite_rule(
        \'^personal-development/([^/]*)/?\',
        \'index.php?page_id=17318&class_type=$matches[1]\',
        \'top\'
    );    
}
这一个抓到页面并取消404。然后显示主页内容,但不使用模板样式表,也不允许我更改内容。下面的示例是我尝试获取适当的内容并显示它。我还尝试显示不同的模板。我能够显示模板,但仍然无法显示任何内容。

add_filter(\'template_redirect\', \'dynamic_classes_class_type_redirect\' );
function dynamic_classes_class_type_redirect() 
{
//for best seo I am setting up a redirect for pages.
    global $wp, $wpdb, $wp_query;
    if(!$post_title=get_post($post)->post_title)//looks like we hit a 404
    {
        $url=explode(\'/\',dynamic_classes_page_url());//see if its one of our dynamically created pages.
        if(count($url)>4)//we need to make sure this long enough
        {
            $db_prefix= $wpdb->prefix;
            $sql=\'SELECT ID
                  FROM \'.$db_prefix.\'posts
                  WHERE post_name=\\\'\'.implode(\'\',array_slice($url,-2,1)).\'\\\' /*get the second to last*/
                  LIMIT 1\';
            $rs_class = $wpdb->get_results($sql);
            if($rs_class)
            {
                status_header( 200 );
                $wp_query->is_404=false;
                wp_reset_query();
                setup_postdata(get_post($rs_class[0]->ID));
            }
        }
    }
}
add\\u action和“the\\u post”将允许我根据需要更改内容,但不允许更改404的内容,即使我像上面的示例那样取消了404。

add_action( \'the_post\', \'my_the_post_action\' );
function my_the_post_action( $post_object ) {
    $post_object->post_content=\'Programmer test.\';
}

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

在第一个示例中,添加了重写标记personal-development, 但是你要用重写标签class_type 在重写规则内。如果你修正了这个错误,并且假设17318 是您的personal-development 页然后您可以使用get_query_var(\'personal_development\') 在模板或模板挂钩中,检查所请求的内容。

add_action( \'init\', \'dynamic_classes_class_type_rewrite\' );
function dynamic_classes_class_type_rewrite()
{
    add_rewrite_tag( \'%personal_development%\', \'([^&]+)\' );
    add_rewrite_rule(
        \'^personal-development/([^/]*)/?\',
        \'index.php?page_id=17318&personal_development=$matches[1]\',
        \'top\'
    );    
}

结束

相关推荐

Custom Post Row Actions

我偶然发现this question 在写这个问题的时候。我有一个问题是关于这个问题的。我发现你用的是get_delete_post_link 筛选为我的操作创建一个新的url(或一个类似的函数——在任何情况下,我都会将该函数与布尔值一起使用)。唯一的问题是,I don\'t know how to capture the event now. 考虑到我在谷歌上找不到很多关于行后操作的例子,我将不胜感激-/public function _wp_filter_get_delete_post_link( $