如何将完全自定义的 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-&gt;Add New-&gt;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?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自定义 url 和文件夹将图像上传到 cloudinary

如何将自定义语言数据集上载到Azure自定义语音服务?

如何将自定义文件浏览器/上传与 CKEditor 集成?

如何将上传文件的浏览按钮修改为自定义按钮

如何将自定义表情符号上传到我的不和谐机器人

Elastic Beanstalk - 自定义 Nginx 配置文件 - PHP Web 应用程序