事实上<option>
字段不适用于任何CSS。所以WordPress开发人员/设计师为<option>
字段。
实际上,在你的检查中,你遗漏了一些东西:
<select name="page_id" id="page_id">
<option value="1" class="level-0">Level 0</option>
<option value="2" class="level-1"> Level 1</option>
<option value="3" class="level-1"> Level 1</option>
<option value="4" class="level-2"> Level 2</option>
<option value="5" class="level-3"> Level 3</option>
<option value="6" class="level-2"> Level 2</option>
<option value="7" class="level-3"> Level 3</option>
</select>
你注意到
(空格的HTML特殊字符)有吗?
这就是创建嵌套外观的原因。
让我们用WordPress把手弄脏wp-includes/
文件夹,打开文件post-template.php
.现在查找wp_dropdown_pages(
, 这样,您就可以找到显示下拉列表的函数(WP 4.3.1中的第1016行)在该函数中,您将看到另一个函数正在运行:walk_page_dropdown_tree(
, 搜索那个(WP 4.3.1中的第1309行)
在该函数中,您将看到Walker类正在那里运行,Walker_PageDropdown
, 立即查找该类(WP 4.3.1中的第1471行)在该类中,您将看到一个名为start_el
, 实际上,在这个函数中,技巧正在运行你注意到了吗$pad
有变量吗?$pad = str_repeat(\' \', $depth * 3);
通过$depth
本页的str_repeat()
实际上是填充空间(
) 那里str_repeat()
是一个PHP函数,在指定的时间内重复字符串。它只是简单的乘法
3次到$depth
. 这就是诀窍。现在,让我们在您的案例中实现类似的操作:
$_pages = get_pages( array( \'post_type\'=> \'your_hierachical_cpt\' ) );
<select name="my_field" id="my-field">
<?php foreach ($_pages as $_page) {
$depth = count( get_post_ancestors( $_page->ID ) ); //page_depth
$pad = str_repeat(\' \', $depth * 3);
echo \'<option value="\'. $_page->ID .\'" class="level-\'. $depth .\'">\'. $pad . $_page->post_title .\'</option>\';
} ?>
</select>
我们把所有的页面都放进去了$_pages
, 让他们每个人都深入$depth
, 然后遵循这个简单的技巧$pad
. 当显示时<option>
s、 我们正在展示$depth
类,并添加$pad
选项文本前的变量。耶:D