启用对自定义页面类型的备注-选项不会显示在主题的“自定义”中

时间:2018-04-01 作者:Jerry

我已经创建了一个自定义页面类型,我希望用户能够对其进行评论。乍一看,这与Comments not showing in custom post type - Wordpress, 但是,我正在使用“注释”设置“支持”值:

 public function createEpisodeType() {
     $labels = array(
         \'name\'             => \'Episodes\',
         \'singular_name\'   => \'Episode\',
         \'menu_name\'       => \'Episodes\',
         \'name_admin_bar\'     => \'Episode\',
         \'add_new\'           => \'Add New\',
         \'add_new_item\'     => \'Add New Episode\',
         \'new_item\'         => \'New Episode\',
         \'edit_item\'       => \'Edit Episode\',
         \'view_item\'       => \'View Episode\',
         \'all_items\'       => \'All Episodes\',
         \'search_items\'     => \'Search Episodes\',
         \'parent_item_colon\'  => \'Parent Episode\',
         \'not_found\'       => \'No Episodes Found\',
         \'not_found_in_trash\' => \'No Episodes Found in Trash\',
     ); 

     $args = array(
         \'labels\'              => $labels,
         \'public\'              => true,
         \'exclude_from_search\' => false,
         \'publicly_queryable\'  => true,
         \'show_ui\'             => true,
         \'show_in_nav_menus\'   => true,
         \'show_in_menu\'        => true,
         \'show_in_admin_bar\'   => true,
         \'menu_position\'       => 5,
         \'menu_icon\'           => \'dashicons-admin-appearance\',
         \'capability_type\'     => \'page\',
         \'hierarchical\'        => true,
         \'supports\'            => array( \'page-attributes\', \'title\', \'editor\', \'author\', \'thumbnail\', \'excerpt\', \'comments\', \'revisions\' ),
         \'has_archive\'         => true,
         \'rewrite\'             => array( \'slug\' => \'episode\', \'with_front\' => false ),
         \'query_var\'           => true,
         \'description\'         => \'Page type that has a sequence\',
    ); 

    register_post_type(self::post_type_slug, $args);
}
当我使用Debug This检查当前查询时,我会看到post数据,包括

[comment_status] => open
我怀疑问题在于主题定制。当我看评论的时候。对于我正在使用的主题,我在顶部看到以下内容:

$comments_display = get_theme_mod( \'comments_display\' );
$post_type        = get_post_type();

if ( is_array( $comments_display ) ) {

    if ( ! in_array( $post_type, $comments_display ) ) {
        return;
    }
}
我直接检查了数据库中的选项,我看到“comments\\u display”是一个由三个值组成的数组—“post”、“page”和“none”。我的自定义类型不在该列表中。对我来说,这似乎是问题的根源。

我去了Customize: Comment Display 部分,但选项不包括我的新内容类型。

有没有办法让我的自定义类型显示在该列表中?我假设主题调用一些标准函数来获取内容类型的列表,并且我需要做一些事情来获取列表中的类型。

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

我假设主题调用一些标准函数来获取内容类型的列表,并且我需要做一些事情来获取列表中的类型。

如果没有看到创建选项的原始代码,就不可能这么说,但如果我不得不猜测的话,我会说它们很可能是手动输入的。使用标准函数列出帖子类型可能已经列出了您的帖子类型。

因此,虽然可能无法添加您的帖子类型作为选项,但您可以使用theme_mod_{$name} 钩子可以通过编程将您的帖子类型添加到主题mod的值中,以便注释中的逻辑。php适用于您的帖子类型。

此过滤器的工作方式是将过滤器添加到theme_mod_comments_display 并使用回调函数修改该值。由于该值似乎是要为其显示注释的帖子类型的数组,因此我们要添加episode (或者不管实际的slug是什么)到阵列。

function wpse_299549_theme_mod( $value ) {
    // Make sure $value is an array.
    $value = (array) $value;

    // Add custom post type to array.
    $value[] = \'episode\';

    // Return modified value.
    return $value;
}
add_filter( \'theme_mod_comments_display\', \'wpse_299549_theme_mod\' );

结束