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

时间:2018-02-23 02:50:46

标签: wordpress

我知道PHP而不是WordPress,我需要将一组文件上传到我客户的WP站点。我想要的内容与this SO post中提出的内容略有不同。

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

  1. 有没有办法通过WP管理界面上传zip文件,并将文件解压缩到安全/隔离的位置?
  2. 发生上传后,如何知道主页的绝对或相对网址?
  3. 如果上面的1和2是不可能的,那么在某种隔离文件夹中获取文件的最佳方法是什么? (如果可能的话,我真的不想创建/修改主题或插件,我只是想将一些文件转储到服务器上,然后知道如何通过URL访问它们。)
  4. 注意:如果我可以在客户端的服务器上访问FTP,那么到目前为止这是最简单的方法,但这不是一个选项,我唯一的门户就是WP管理界面。 这是一个由Wordpress.com托管的托管wordpress网站(版本4.7),它是商业计划。

    修改

    以下是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

1 个答案:

答案 0 :(得分: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();
?>

经过测试和工作。添加自己的错误处理&amp; info / progress msgs根据需要(你熟悉php)。

上传并运行:

  1. 创建一个zip(例如myarchive.zip)目录并包含要放在服务器上的文件。

  2. 将此zip和上面的2个脚本文件放在名为“mydummy”的文件夹中。

  3. 压缩“mydummy”文件夹“(结果应为”mydummy.zip“,其中包含文件夹”mydummy“,其中包含您的存档,myinstaller.php&amp; 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”并点击其删除链接

  7. 文件perms 不应该是一个问题(我假设服务器将确保文件默认为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一无所知。