wordpress 插件适用于本地主机,但不适用于远程服务器
Posted
技术标签:
【中文标题】wordpress 插件适用于本地主机,但不适用于远程服务器【英文标题】:wordpress plugin works on local host but NOT on remote server 【发布时间】:2012-09-23 11:03:18 【问题描述】:我写了一个在本地主机上运行良好的 wp 插件。它创建子主题目录并在那里复制 home.php。但“主页”选项卡显示来自父主题的旧内容。只有当我将 home.php 重命名为 index.php 时它才有效。这是我的家.php
<?php
get_header(); ?>
<div id="container">
<div id="content" role="main">
</div><!-- #content -->
</div><!-- #container -->
另外,我在 /js 文件夹中有 script1.js 文件,它应该在块中添加一个文本框,但它没有。我像这样嵌入脚本:
define('jsdir',plugin_dir_url(__FILE__).'js');
wp_enqueue_script('dk_js_myplugin',jsdir.'/script1.js',array('jquery'));
但萤火虫不会在页面上显示它。 使用 xampp 本地安装 wordpress 时不存在这两个问题 感谢您的宝贵时间,非常感谢您的帮助!
【问题讨论】:
检查您的服务器错误日志是否有任何权限错误。 谢谢你的提示,我会试试的 【参考方案1】:define( 'jsdir', WP_PLUGIN_URL . '/' . dirname( plugin_basename( __FILE__ )) . '/js' );
表达式dirname( plugin_basename( __FILE__ ))
返回目录wp-content/plugins
中的插件位置。阅读plugin_basename()。常量WP_PLUGIN_URL
返回插件目录的绝对路径。
在您的插件代码中尝试:
<?php
var_dump( WP_PLUGIN_URL );
var_dump( dirname( plugin_basename( __FILE__ )));
// output should be like this:
string(36) "http://domain.tld/wp-content/plugins"
string(9) "my-plugin"
添加脚本的初始化函数:
add_action( 'init', 'plugin_register_css_js' );
function plugin_register_css_js()
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );
if( $current_url == 'mypage' )
wp_enqueue_script( 'js', $jsdir . '/script1.js', array( 'jquery' ));
【讨论】:
你好@doktorgradus!感谢您的回复。当我建议的 sn-p [link]david.onenonly.info script1.js 没有被包含时,即使我输入了绝对路径 嗯。script1.js
位于哪个目录中?在插件目录或主题目录中?试试var_dump( plugin_basename( __FILE__ ));
,它输出什么?
script1.js 在这里:david.onenonly.info/wp-content/plugins/childtheme/js/script1.js 如您所见,我在将表单添加到页面if(dk_options.opt) contentID.appendChild(newForm);
之前检查选项值,然后像这样将'dk_options.opt'传递给脚本wp_localize_script('dk_js_myplugin','dk_options',$opt);
在我的 php 文件中
我知道您定义jsdir
并使用wp_enqueue_script
不在功能中?您可以在<?php
之后使用define()
,但必须将wp_enqueue_script
放入函数中 - 我通过为wp_enqueue_script
添加init func 来编辑我的代码。
谢谢@doktorgradus。我已将 wp_enqueue_script
放在 plugin_register_css_js 函数中,但我这样调用该函数:add_action('template_redirect','is_home_check');
并在 is_home_check
内部检查 if(is_home()) plugin_register_css_js();
这不是包含脚本的正确方法吗需要它的页面而不是所有页面?附言很高兴在我将 template_redirect 更改为 init Спасибо 之后写下 它起作用了【参考方案2】:
如果您可以通过 FTP 访问(我假设您这样做),有时这是权限问题,然后尝试使用权限。它也可能有助于打开 php 错误。
ini_set('error_reporting', E_ALL );
ini_set('display_errors', 1 );
【讨论】:
非常感谢,我会尝试发布结果 写得很伤心,但包括error_reporting(E_ALL | E_STRICT);
和ini_set(...)
并没有透露任何内容【参考方案3】:
您能否通过 Firebug 检查它是否在您的远程服务器上加载了 script1.js 文件(不会产生 404 错误)?
【讨论】:
你好@Laurent,我检查了页面上萤火虫的“脚本”标签,它没有显示脚本。你是这个意思吗?请看页面:david.onenonly.info【参考方案4】:您的浏览器没有“调用”script1.js 文件(见附图)
我建议你重新检查你的模块,这样你就可以确保脚本被加载到标签中。
【讨论】:
你好@Laurent,脚本地址是这样的:david.onenonly.info/wp-content/plugins/childtheme/js/script1.js,但即使我插入绝对 URL,它也不包含在内:wp_enqueue_script('dk_js_myplugin','http://david.onenonly.info/wp-content/plugins/childtheme/js/script1.js',array('jquery'));
你知道为什么会这样吗?跨度>
【参考方案5】:
您是否做了以下操作:
function load_dk_scripts()
wp_enqueue_script(
'dk_js_myplugin',
'http://david.onenonly.info/wp-content/plugins/childtheme/js/script1.js',
array('jquery')
);
add_action('wp_enqueue_scripts', 'load_dk_scripts');
【讨论】:
谢谢,问题出在add_action
函数中以上是关于wordpress 插件适用于本地主机,但不适用于远程服务器的主要内容,如果未能解决你的问题,请参考以下文章
PHP 图片上传适用于本地主机,但不适用于 GoDaddy 服务器
PHP header('Content-Type : image/jpeg') 适用于本地主机但不适用于真实服务器
Java Spring MVC WebSocket 应用程序仅适用于本地应用程序服务器,但不适用于 openshift 主机