Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates Wordpress如何在Theme function.php中更改插件设置_Templates_Wordpress_Custom Theme - Fatal编程技术网

Templates Wordpress如何在Theme function.php中更改插件设置

Templates Wordpress如何在Theme function.php中更改插件设置,templates,wordpress,custom-theme,Templates,Wordpress,Custom Theme,我是Wordpress的新手,正在研究我的第一个主题。该主题将与一个插件紧密结合。我想知道如何在不接触插件本身的情况下更改theme function.php中的一些插件设置 我试着在网上查找,但没有找到任何具体的答案 我使用的是: , 问题是: 我正试图弄清楚如何在我的主题function.php中重定向/替换插件模板文件,使之成为我主题中的模板文件 当前插件文件夹中有模板文件以及它们在网站上的呈现方式。我会编写自己的模板文件,确保它看起来像我的主题,并用插件模板文件替换它 如果我直接在plu

我是Wordpress的新手,正在研究我的第一个主题。该主题将与一个插件紧密结合。我想知道如何在不接触插件本身的情况下更改theme function.php中的一些插件设置

我试着在网上查找,但没有找到任何具体的答案

我使用的是: ,

问题是: 我正试图弄清楚如何在我的主题
function.php
中重定向/替换插件模板文件,使之成为我主题中的模板文件

当前插件文件夹中有模板文件以及它们在网站上的呈现方式。我会编写自己的模板文件,确保它看起来像我的主题,并用插件模板文件替换它

如果我直接在plugin文件夹中编辑模板文件,每当有更新时,它们都会被覆盖。 我觉得这不对

在浏览了互联网之后,我觉得我可以通过
添加过滤器
实现它,但不完全确定如何实现

插件 在Github上:

在原始版本中,插件有一行(第240行表示
indexPage()
,第328行表示
getIndexUrl()
):

它指示在哪里可以找到一个模板文件,并为插件提供永久链接

我想要什么 我想添加一个过滤器,从我的主题中获取模板文件,并重写模板文件的路径

如果有一个简单的方法来添加一个钩子,它会覆盖它,太好了。 我还发现我可以用
add\u filter
替换一些模板

已尝试: 但我不完全确定如何检查插件permalinks页面是否被激活

我觉得这应该是一件简单的事情,用户覆盖或重定向插件模板文件和那些在他们的主题,但我不明白


我将非常感谢所有的帮助和建议。

不幸的是,函数
indexPage()
被另一个函数调用,然后被引用钩住

add_action('template_redirect', array(&$this, 'templateRedirect'));
您需要做的是删除此函数并替换为您自己的自定义函数(从插件复制代码并修改以调用该页面的自定义函数)。问题是您不能使用remove_action,因为没有通过
add_action
传递名称,所以wp会创建一个随每次加载而变化的名称

因此,我们需要一个函数来查找添加的函数:

function remove_anonymous_action( $name, $class, $method ){
        $actions = $GLOBALS['wp_filter'][ $name];

        if ( empty ( $actions ) ){
            return;
        }

        foreach ( $actions as $prity => $action ){
            foreach ( $action as $identifier => $function ){
                if ( is_array( $function) && is_a( $function['function'][0], $class ) && $method === $function['function'][1]){
                    remove_action($tag, array ( $function['function'][0], $method ), $prity);
                }
            }
        }
}
然后,您可以使用priority参数在上面添加操作后调用它(这将删除函数btw中所有页面的函数)

修改下面的函数以调用基于主题的文件

function customtemplateRedirect(){
    global $wp;
    global $wp_query;
    if (get_query_var('ji_plugin') !== '') {
        switch (get_query_var('ji_plugin'))
        {
            case 'property':
                $this->propertyPage();
                exit;
                break;
            case 'expose':
                $this->exposeDownload();
                exit;
                break;
            default:
                $this->indexPage();
                exit;
                break;
        }
    }
}
您还可以使用以下工具检查挂钩是否已卸下

 $hook_name = 'template_redirect';
 global $wp_filter;
 var_dump( $wp_filter[$hook_name] );

Anon过滤器将有一个长键,例如12i90rkl2rkljeri(每次都是随机键)。只需删除remove_plug_action()中的add操作,即可分解该过程,并查看您得到了什么。如果不是var dump$\u GLOBALS['wp\u filter']['template\u redirect'],则应删除该操作,以查看其外观。这可能需要一段时间的摆弄。您还需要检查您的if语句(输入var_dump值以检查它们是否通过或失败等)

顺便说一句,不要忘记单击解决问题的答案旁边的勾号(我注意到您发布的上一个q不被接受?)。谢谢你的回答。我有一个问题,因为我觉得有些步骤我并不完全熟悉,这妨碍了一切工作。开始时,您说:{替换为您自己的自定义函数(从插件复制代码并修改以调用该页面的自定义函数)。}我所做的是将parseQuery函数从插件复制到我的function.php文件中。你可以看到当前的文件:还添加了你与我共享的所有代码。我觉得需要告诉我的主题一些东西才能从Justimo插件中获取这些代码。把它联系起来。现在我觉得它们没有连接,因为没有变化。你看wordpress为此使用了钩子和过滤器。这允许您修改其他地方包含的流程。你可以修改插件,但是当它更新时,你会丢失你所做的更改。在这里扩展类将不起作用,因为您的新类将不会被调用,所以您需要解开您不想要的,并添加您所做的(如果有意义的话)?我在上面加了一点让你检查。嗨,大卫,很抱歉耽搁了这么久。别忘了。只是还没能做到这一点,因为我正忙于其他项目,截止日期即将到来。将在几天内再次详细检查,如果有效,将添加为已解决。
 // the action adding the action is added in parse_query filter...use this as the point to remove the added action
 add_action('parse_query', 'remove_plug_action', 50);

 function remove_plug_action(){
  // call our function with the name of the hook, classname and function name
         remove_anonymous_action('template_redirect','JiApiWpPlugin','templateRedirect');

 //add a custom function to replace the one we removed.
 add_action('template_redirect', 'customtemplateRedirect');
}
function customtemplateRedirect(){
    global $wp;
    global $wp_query;
    if (get_query_var('ji_plugin') !== '') {
        switch (get_query_var('ji_plugin'))
        {
            case 'property':
                $this->propertyPage();
                exit;
                break;
            case 'expose':
                $this->exposeDownload();
                exit;
                break;
            default:
                $this->indexPage();
                exit;
                break;
        }
    }
}
 $hook_name = 'template_redirect';
 global $wp_filter;
 var_dump( $wp_filter[$hook_name] );