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 不在功能中?您可以在&lt;?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/plugi‌​ns/childtheme/js/script1.js',
        array('jquery')
    );

add_action('wp_enqueue_scripts', 'load_dk_scripts');

【讨论】:

谢谢,问题出在add_action函数中

以上是关于wordpress 插件适用于本地主机,但不适用于远程服务器的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 适用于本地主机,但不适用于网站

PHP 图片上传适用于本地主机,但不适用于 GoDaddy 服务器

PHP header('Content-Type : image/jpeg') 适用于本地主机但不适用于真实服务器

Java Spring MVC WebSocket 应用程序仅适用于本地应用程序服务器,但不适用于 openshift 主机

SonarQube 分析适用于 IDE,但不适用于 Jenkins Pipeline

Wordpress 5.4 主题编辑器适用于 LOCALHOST 但不适用于 LIVE 主题编辑器站点