以下PHP代码的含义是什么?

时间:2014-11-19 16:08:33

标签: php wordpress function

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文件中的大部分代码。

2 个答案:

答案 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_argswp_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链接