使用GET_TEMPLATE_PART()添加挂钩

时间:2019-02-04 作者:Asking

我有这个钩子。如何使用get\\u template\\u part()添加此挂钩?我创建了一个文件“myfile.php”,其中存储了搜索栏的HTML代码,但a无法连接我的模板

add_filter(\'wp_nav_menu_items\', \'add_search_form\', 10, 2);
function add_search_form($items, $args) {
    if( $args->theme_location == \'MENU-NAME\' )
        $items .= \'<li class="search"><form role="search" method="get" id="searchform" action="\'.home_url( \'/\' ).\'"><input type="text" value="search" name="s" id="s" /><input type="submit" id="searchsubmit" value="\'. esc_attr__(\'Search\') .\'" /></form></li>\';
    return $items;
}

2 个回复
SO网友:Alexander Holsgrove

好吧,我想一个简单的方法就是编辑你的模板header.php 用于显示菜单的位置。使用模板include加载myfile.php

get_template_part(\'template-parts/myfile\');
然后在里面myfile.php:

<?php

$search .= \'<li class="search"><form role="search" method="get" id="searchform" action="\'.home_url( \'/\' ).\'"><input type="text" value="search" name="s" id="s" /><input type="submit" id="searchsubmit" value="\'. esc_attr__(\'Search\') .\'" /></form></li>\';

wp_nav_menu(array(
      \'menu\'            => \'Menu Name\',
      \'theme_location\'  => \'menu-name\',
      \'container\'       => \'nav\',
      \'container_class\' => \'main-menu-class\',
      \'container_id\'    => \'\',
      \'items_wrap\'      => \'<ul class="navbar-nav">%3$s\'. $search .\'</ul>\'
));
因此,myfile包含菜单和搜索表单。这没有经过测试,但您已经有了主意-更改菜单名和HTML元素&;课程。

SO网友:Rick Hellewell

如果您想在模板(或代码)中包含一个外部PHP文件,那么将该代码放在另一个模板(比如mycode.PHP)中。把那个密码放好。主题文件夹中的php文件。

那么你可以get_template_part(\'mycode\'). 请注意,您不包括\'。php’part作为get\\u template\\u part的参数。

您在mycode中的代码。php将在get\\u template\\u part调用时执行。请注意,这是包含仅由模板所需的外部函数调用的好方法。

Added

更多关于如何“包含”模板中包含函数的文件的实验。我了解到locate_template 在所有情况下,指挥都更好。get_template_part 对于您的页面来说,可能不会很快发生。

所以我现在使用

locate_template("myfunctions.php",true,true);
其中myfunctions.php 位于活动主题文件夹中。这两个“true”参数确保在适当的时间加载文件。如果找到第一个“true”,将加载该文件。第二个“true”将使用require_once 而不是require.

我在模板中使用了这个。我需要一些可以给头部添加内容的功能(使用apply_filter(\'wp_head\')). 功能位于my_functions.php 文件因此,模板包含locate_template 首先,然后是wp_head 之后

这是一种聪明而有用的方法,可以使用模板加载函数文件,同时不要求函数在全局范围内可用,只需在模板中即可。

相关推荐