if ( !function_exists('solid_home_page_menu_args') ) {
function solid_home_page_menu_args( ) {
$args['show_home'] = true;
return $args;
}
add_filter( 'wp_page_menu_args', 'solid_home_page_menu_args' );
}
我正在试图弄清楚这个wordpress主题的开发者在想什么。请协助。我会感恩的。
到目前为止,我已经理解了除上述代码之外的functions.php文件中的大部分代码。
答案 0 :(得分:1)
如果solid_home_page_menu_args
函数不存在,则声明它并将其添加为filter。
答案 1 :(得分:1)
if ( !function_exists('function_name') )
用作父主题中使用的函数的包装,其中function_name
是由条件语句包装的函数的名称。
每当父主题作者在此条件语句中包含其主题中的函数时,对于子主题作者,它意味着以下内容
子主题作者可以简单地将该功能复制到子主题,并根据需要在功能中添加/删除功能。
子主题作者不需要更改功能名称,可以使用相同的功能名称。这是唯一时间,您可以使用两个具有相同名称的函数
儿童主题作者不必更改任何其他模板文件以更改对新功能的调用
子主题的functions.php在父主题的functions.php之前加载。这意味着,如果您已将函数function_name
复制到子主题并对其进行了修改,则会在父主题中的函数function_name
之前首先声明它。
现在,在父主题中声明函数之前,条件语句将首先检查是否已存在同名function_name
的函数。如果是,则在父主题中跳过/忽略该功能。如果找不到具有该名称的函数,则声明并使用父主题的函数
如果您是父主题作者,最好将您的函数包装在此if ( !function_exists('function_name') )
条件语句中。这将使儿童主题作者更容易修改或删除父主题中的功能
修改强>
这是什么意思?
$args['show_home'] = true;
return $args;
您需要查看函数wp_page_menu_args
中wp_page_menu
过滤器的source code。
1146 if ( ! empty($args['show_home']) ) {
1147 if ( true === $args['show_home'] || '1' === $args['show_home'] || 1 === $args['show_home'] )
1148 $text = __('Home');
1149 else
1150 $text = $args['show_home'];
1151 $class = '';
1152 if ( is_front_page() && !is_paged() )
1153 $class = 'class="current_page_item"';
1154 $menu .= '<li ' . $class . '><a href="' . home_url( '/' ) . '">' . $args['link_before'] . $text . $args['link_after'] . '</a></li>';
1155 // If the front page is a page, add it to the exclude list
1156 if (get_option('show_on_front') == 'page') {
1157 if ( !empty( $list_args['exclude'] ) ) {
1158 $list_args['exclude'] .= ',';
1159 } else {
1160 $list_args['exclude'] = '';
1161 }
1162 $list_args['exclude'] .= get_option('page_on_front');
1163 }
1164 }
此钩子允许您使用特定键$args
为变量show_home
设置键/值对,并使用布尔值为true
的值来显示{导航栏中的{1}}链接
导航栏中默认情况下不显示Home
链接,因为此键/值对不存在。只要通过过滤器设置此键/值对,条件语句就会返回true并显示Home
链接