CPT模板未显示-正在获取404

时间:2013-04-27 作者:NotoriousWebmaster

我正在开发一个自定义的Post类型插件,它在dev中工作得很好。现在我已经将其移动到了生产环境中,当我尝试显示CPT的模板时,我得到了一个404。

因此,有两个问题:

1-是否有某种机制来确定WP通过层次结构所采取的路径?

2-为什么它不给我一个单独的或索引页?

我在404的末尾抛出了$wp\\u查询和stacktrace。以下是我的部分发现:

[query] => Array
    (
        [page] => 
        [pagename] => refletters/proximity
    )

[request] => SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND (wp_posts.ID = \'0\') AND wp_posts.post_type = \'page\'  ORDER BY wp_posts.post_date DESC 
[posts] => Array
    (
    )

[queried_object] => 
[queried_object_id] => 0
和堆栈跟踪:

2013-04-27 22:16:41 - 24.52.197.40 - TRACE - index.php - 404.php[39] - 
    wordpress/wp-content/themes/notoriousconsultant/404.php[39] - aaLog->logtrace
    wordpress/wp-includes/template-loader.php[50] - include
    wordpress/wp-blog-header.php[16] - require_once
    wordpress/index.php[17] - require
谢谢你的帮助。

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

注册新的公共帖子类型或分类时,始终刷新重写规则。否则,当URL映射到查询时,内部重写规则将不考虑这一点。

你可以通过连接到registered_post_typeregistered_taxonomy.

下面是根据评论和其他人的反馈更新的代码。

下载为插件T5 Silent Flush 在GitHub上。

add_action( \'registered_post_type\', \'t5_silent_flush_cpt\', 10, 2 );
add_action( \'registered_taxonomy\',  \'t5_silent_flush_tax\', 10, 3 );

/**
 * Flush rules for custom post types.
 *
 * @wp-hook registered_post_type
 * @param   string $post_type
 * @param   stdClass $args
 * @return  void
 */
function t5_silent_flush_cpt( $post_type, $args )
{
    if ( $args->_builtin )
        return;

    if ( ! $args->public )
        return;

    if ( ! $args->publicly_queryable )
        return;

    if ( ! $args->rewrite )
        return;

    $slug = $post_type;

    if ( isset ( $args->rewrite[\'slug\'] ) && is_string( $args->rewrite[\'slug\'] ) )
        $slug = $args->rewrite[\'slug\'];

    $rules = get_option( \'rewrite_rules\' );

    if ( ! isset ( $rules[ $slug . \'/?$\'] ) )
        flush_rewrite_rules( FALSE );
}

/**
 * Flush rules for custom post taxonomies.
 *
 * @wp-hook registered_taxonomy
 * @param   string $taxonomy
 * @param   string $object_type
 * @param   array  $args
 * @return  void
 */
function t5_silent_flush_tax( $taxonomy, $object_type, $args )
{
    // No idea why we get an array here, but an object for post types.
    // Objects are easier to write, so ...
    $args = (object) $args;

    if ( $args->_builtin )
        return;

    if ( ! $args->public )
        return;

    if ( ! $args->rewrite )
        return;

    $slug = $taxonomy;

    if ( isset ( $args->rewrite[\'slug\'] ) && is_string( $args->rewrite[\'slug\'] ) )
        $slug = $args->rewrite[\'slug\'];


    $rules = get_option( \'rewrite_rules\' );

    if ( ! isset ( $rules[ $slug . \'/(.+?)/?$\'] ) )
        flush_rewrite_rules( FALSE );
}
这将在每次创建新的帖子类型或分类时刷新规则。无需再次访问永久链接设置。

结束

相关推荐

如何用XDEBUG调试插件?

我能够在本地环境中基于PHP 5.3.0(XAMPP)非常轻松地安装和设置NetBeans 6.9.1和Xdebug。我现在的问题是:如果我在Wordpress的索引上设置断点。php或其他Wordpress核心php文件,NetBeans会正确地停止在所需的位置。相反,如果我在插件文件上设置断点,那么NetBeans的代码执行触发器不会在此停止。你知道怎么解决吗?UPDATE: 有关我正在尝试调试的内容的详细信息插件被调用Vanilla Forums 并具有以下文件结构:- plugins