是否可以操作页面模板列表?

时间:2016-05-11 作者:cjbj

回答后this question 我想知道是否有可能操纵编辑页面时可用的可能页面模板下拉列表。WordPress从根目录中可用的模板文件(如page.php, page-onecolumn.php, page-about-us.php). 它似乎没有将列表存储在数据库中。

我可以想象有合法的理由这样做,例如,如果你有十个页面模板,但你想限制非管理员用户对其中一些模板的访问。或者,您可能希望通过选项页动态创建模板,因此您希望扩展列表。

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

主力是WP_Theme::get_page_templates() (由helper函数包装get_page_templates()). 如果您签出源代码,您将看到:

/**
 * Filter list of page templates for a theme.
 *
 * @since 3.9.0
 * @since 4.4.0 Converted to allow complete control over the `$page_templates` array.
 *
 * @param array        $page_templates Array of page templates. Keys are filenames,
 *                                     values are translated names.
 * @param WP_Theme     $this           The theme object.
 * @param WP_Post|null $post           The post being edited, provided for context, or null.
 */
return (array) apply_filters( \'theme_page_templates\', $page_templates, $this, $post );
示例:

function wpse_226324_page_templates( $templates ) {
    // Remove tpl-home.php template
    unset( $templates[\'tpl-home.php\'] );

    // Add custom template
    $templates[\'tpl-custom.php\'] = \'Custom Template\';

    return $templates;
}

add_filter( \'theme_page_templates\', \'wpse_226324_page_templates\' );
另请参见theme_page_templates code reference.