如何将完全自定义的 PHP/Web 文件上传到 WordPress?
Posted
技术标签:
【中文标题】如何将完全自定义的 PHP/Web 文件上传到 WordPress?【英文标题】:How to upload totally custom PHP/web files into WordPress? 【发布时间】:2018-08-03 01:37:34 【问题描述】:我知道 php 但不太了解 WordPress,我需要将一组文件上传到我客户的 WP 站点。我想要一些与this SO post 中所要求的有所不同的东西。
我需要上传一组完全自定义的文件,包括 PHP、html、js 和 css 文件。理想情况下,我想上传一个包含我收集的网络文件的 zip,并保持文件夹结构。这些文件与 WP 站点无关,因为它们不需要挂钩到菜单/插件/主题等。它们是具有自定义功能的独立文件,我只需要启动我的“主”页面时点击了某个 WP 按钮。
-
有没有办法通过 WP 管理界面上传 zip 文件并将我的文件提取到安全/隔离的位置?
上传完成后,我如何知道主页的绝对或相对 URL?
如果上面的 1 和 2 是不可能的,那么将我的文件放到某个隔离文件夹中的最佳方法是什么? (如果可能的话,我真的不想创建/修改主题或插件,我只是想将一些文件转储到服务器上,然后知道如何通过 URL 访问它们。)
注意:如果我可以访问客户端服务器上的 FTP,那将是迄今为止最简单的方法,但这不是一个选项,我唯一的入口是 WP 管理界面。 这是一个托管的 wordpress 网站(4.7 版),由 Wordpress.com 托管,是商业计划书。
编辑:
这里是Zero Gravity Payment Module.php
:
<?php
/**
* @package ZeroGravityPaymentModule
* @version 1.0
*/
/*
Plugin Name: Zero Gravity Payment Module
Plugin URI: https://www.zerogravpro.com/CCPayment/
Description: Advanced Authorize.Net credit card payment form built by Zero Gravity Programming.
Author: Nate Jensen
Version: 1.0
Author URI: https://www.zerogravpro.com/
Text Domain: hello-dolly
*/
?>
这里是installer.php
:
<?php
$destinationDir = $_SERVER['DOCUMENT_ROOT'] . '/' . 'ZeroGravityPaymentModule';
mkdir($destinationDir);
$zip = new ZipArchive;
$zip->open('ZeroGravityPaymentModule.zip');
$zip->extractTo($destinationDir);
$zip->close();
?>
我能够上传我的“插件”,但现在似乎无法通过绝对 url 找到我的 php 文件。我尝试了以下位置:
https://[actualdomain]/wp-content/plugins/Zero%20Gravity%20Payment%20Module/installer.php
https://wordpress.com/view/[actualdomain]/wp-content/plugins/Zero%20Gravity%20Payment%20Module/installer.php
【问题讨论】:
【参考方案1】:我已经端到端地测试了这个答案并且它有效。但是,现在发现这个问题与 Wordpress.com 有关,该网站提供了 Wordpress 的修改/受限版本 - 请参阅答案底部的编辑。
这一切都可以用 2 个小脚本来完成。
i:“mydummy.php”在其自己的行中仅包含一个注释(有必要“欺骗”WP 上传您的实际脚本和存档文件)。
<?php
/* Plugin Name: mydummy */
?>
ii: "myinstaller.php" 例如
<?php
$destinationDir = $_SERVER['DOCUMENT_ROOT'] . '/' . 'myparentdir';
mkdir( $destinationDir, 0775); // 0755 whatever
$zip = new ZipArchive;
$zip->open('myarchive.zip');
$zip->extractTo($destinationDir); // creates dirs and files below as per archive structure
$zip->close();
?>
经过测试并且有效。根据需要添加您自己的错误处理和信息/进度消息(您熟悉 php)。
上传并运行:
创建一个 zip 文件(例如 myarchive.zip),其中包含您要放置在服务器上的目录和包含的文件。
将此压缩包和上面的 2 个脚本文件放在名为“mydummy”的文件夹中。
压缩“mydummy”文件夹”(结果应该是包含文件夹“mydummy”的“mydummy.zip”,其中包含您的存档、myinstaller.php 和 dummy.php。
通过 Wordpress 管理员上传 mydummy.zip:Plugins->Add New->Upload File
。不要打扰激活。您的脚本和存档现已上传到 (/maybe-path-to) /wp-content/plugins/mydummy
。
运行你的脚本http://example.com/wp-content/plugins/mydummy/myinstaller.php JOB DONE
删除插件、脚本和存档:通过Wordpress admin: Plugins
找到“mydummy”并点击其删除链接
文件权限不应该是个问题(我假设服务器将确保文件默认为 644 等)所有者显然与 Wordpress 相同 - 这应该浏览器访问不是问题。
编辑:
对 Wordpress.com 问题的常见回答是建议联系他们的支持;在付费计划中,我希望您能从他们那里得到比这里更好的答案。我对这个主机的了解几乎为零——我隐约记得它的网站使用 Wordpress 的受限变体,并且在某些(?)计划中只能使用指定的插件。
您需要将其构建为 WordPress 插件。否则不会 在 WordPress.com 的结构中工作。
如果他们的意思是只有在插件正常运行的情况下才会进行上传,那么请尝试将我的第一个答案中的空虚拟插件替换为:
<?php
/* Plugin Name: mydummy
Plugin URI: http://example.com
Description: do nothing plugin
Author: me
Version: 1.0.0
Author URI: http://example.com/
*/
$donothing = 0;
?>:
但是;如果他们的意思是脚本只有在被“Wordpress”调用时才会执行,你需要将提取代码添加到插件,但确保提取只发生一次,而不是每次有人访问该站点时。在插件中,将$donothing = 0
替换为:
function site_perm_function()
// your code to create html string of dirs (e.g. root and current) + their permissions
// return permission string
add_shortcode( 'display_my_site_perms', 'site_perm_function' );
function install_function()
// your code from myinstaller.php above with code to build message string from statement errors/results
// return message string
add_shortcode( 'myinstaller', 'install_function' );
创建一个新的 zip 并尝试安装和激活插件。如果可以:
打开帖子编辑器以创建虚拟帖子。
在帖子编辑器中插入短代码 [display_my_site_perms]
然后预览帖子 - 这应该会显示权限。
如果权限看起来可以取消存档,则将短代码 [myinstaller]
添加到帖子并再次预览 - 这应该会进行安装。
希望它会起作用,但未经测试,我对 Wordpress.com 的了解为零。
【讨论】:
注意:如果上面运行脚本的url无效。查看其中一个站点 Worpress 页面的 HTML 源代码并查找 style.css 的路径。例如如果是http://example.com/UNKNOWNPATH/wp-content/themes/hemingway/style.css
,则运行installer.php 的URL 将是http://example.com/UNKNOWPATH/wp-content/plugins/mydummy/myinstaller.php
我非常仔细地按照步骤操作,在尝试上传 zip 时遇到此错误:The uploaded file is not a valid plugin.
我联系了 Wordpress 支持,他们说You will need to build it as a WordPress plugin. Otherwise, it won't work inside WordPress.com's structure.
所以似乎无法识别虚拟插件的结构。它在 Wordpress 4.7 上运行。
不确定是否会收到有关答案编辑的通知。所以 - “我已经用可能的解决方案更新了我的答案”
谢谢scytale,我可以成功上传插件了。但上传完成后,页面自动重定向到https://wordpress.com/plugins/Zero%20Gravity%20Payment%20Module/choicerecoverypayments.com
,页面上显示“糟糕,我们找不到这个插件”。然后我把浏览器指向这里:https://wordpress.com/plugins/Zero%20Gravity%20Payment%20Module/installer.php
——它再次重定向到同一个“哎呀”页面。我怎样才能找到我的installer.php 在哪里?不应该在https://wordpress.com/plugins/Zero%20Gravity%20Payment%20Module/
里面吗?以上是关于如何将完全自定义的 PHP/Web 文件上传到 WordPress?的主要内容,如果未能解决你的问题,请参考以下文章