WordPress 中的每个页面都将使用某种模板。如果它没有模板,那么你会很不走运,因为那样......你的数据会去哪里?为了不让您的客户破坏事情,您创建一个模板,以便他们只是编辑文本等,而不是涉足页面结构(我们将在您创建模板时将其留给您)。
我以前有过多达十个不同模板的网站。仅仅因为某些页面确实具有独特的信息架构。如果您需要一个模板,请不要害怕添加模板,因为有时确实没有其他方法可以走。
不确定这是否是最好的建议 - 但如果我真的担心我的客户会开始弄乱页面模板,我只会编写一些 javascript 来检查他们是否是管理员以及他们是否不是管理员隐藏允许他们更改模板的元素。
如果您不希望用户能够看到某些模板,或者您不希望他们能够看到特定的模板文件,您可以将其放在您的 functions.php 中:
function add_jquery_admin() {
global $parent_file;
// if editing page in WP admin and user is not an admin
if ( isset( $_GET['action'] ) && $_GET['action'] == 'edit' && isset( $_GET['post'] ) && $parent_file == 'edit.php' && !current_user_can('manage_options')) {
// remove the options for each of the templates on the template select element
echo '
<script>
var q = jQuery.noConflict();
q(function(){
q("#page_template option[value=\"template-file-name-1.php\"]").remove();
q("#page_template option[value=\"template-file-name-2.php\"]").remove();
q("#page_template option[value=\"template-file-name-3.php\"]").remove();
});
</script>
';
// get current post id
$post_id = $_GET['post'];
// if the post id 123, 1234, or 12345
if ( $post_id == 123 || $post_id == 1234 || $post_id == 12345 ) { // if on one of these post ids disable the template selector
// disable the page template select element
echo '
<script>
var j = jQuery.noConflict();
j(function(){
j("#page_template").attr("disabled", "disabled");
});
</script>
';
}
}
}
add_filter('admin_head', 'add_jquery_admin');
我没有测试,但我认为应该没问题。你只需要在你看到这些的地方切换模板文件名 - q("#page_template option[value=\"template-file-name-1.php\"]").remove();
。
此外,您需要为您不希望他们看到模板选择元素的每个页面收集唯一的帖子 ID。您可以通过查看 URL 来获得它 - 它会post=200
在 URL 中显示类似的内容。你要把这些放在这里—— if ( $post_id == 123 || $post_id == 1234 || $post_id == 12345 )
。
我知道这看起来有点麻烦,但我真的想不出或找到任何其他解决方案。