如何将完全自定义的PHP / Web文件上传到WordPress?

问题描述 投票:0回答:1

我知道PHP而不是WordPress,我需要将一组文件上传到我客户的WP站点。我想要的东西与this SO post的问题有点不同。

我需要上传完全自定义文件的集合,包括PHP,html,js和css文件。理想情况下,我喜欢使用我的网络文件集合上传一个zip文件,并保持文件夹结构。这些文件与WP站点无关,因为它们不需要挂钩到菜单/插件/主题等。它们是具有自定义功能的独立文件,我只需要启动我的“主”页面单击某个WP按钮。

  1. 有没有办法通过WP管理界面上传zip文件并将其文件解压缩到安全/隔离的位置?
  2. 发生上传后,如何知道主页的绝对或相对URL?
  3. 如果上面的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();
?>

我能够上传我的“插件”,但现在似乎无法通过绝对网址找到我的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

wordpress
1个回答
1
投票

我端到端地测试了这个答案并且它有效。但是,现在发现这个问题与提供Wordpress的修改/限制版本的Wordpress.com有关 - 请参阅答案底部的编辑。

它可以用2个微小的脚本完成。

我:“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)。

要上传和运行:

  1. 创建一个zip(例如myarchive.zip)目录,并包含要放在服务器上的文件。
  2. 将此zip和上面的2个脚本文件放在名为“mydummy”的文件夹中。
  3. 压缩“mydummy”文件夹“(结果应为”mydummy.zip“,其中包含文件夹”mydummy“,其中包含您的存档myinstaller.php&dummy.php。
  4. 通过Wordpress管理员上传mydummy.zip:Plugins->Add New->Upload File。不要打扰激活。您的脚本和存档现已上传到(/ maybe-path-to)/wp-content/plugins/mydummy
  5. 运行你的脚本http://example.com/wp-content/plugins/mydummy/myinstaller.php JOB DONE
  6. 删除插件,脚本和存档:通过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一无所知。

© www.soinside.com 2019 - 2024. All rights reserved.