1

I know PHP but not much WordPress, and I need to upload a collection of files into my client's WP site. I'm wanting something a little different from what is being asked in this SO post.

I need to upload a collection of totally custom files, including PHP, html, js, and css files. Ideally I'd love to upload a zip with my collection of web files, with folder structure maintained. These files have nothing to do with the WP site, in that they don't need to hook in to the menuing/plugins/themes, etc. They are standalone files with custom functionality, I just need to launch my "main" page when a certain WP button is clicked.

  1. Is there a way to upload a zip file through the WP admin interface and have it extract my files into a safe/isolated location?
  2. How will I know the absolute or relative URL to my main page, after this upload occurs?
  3. If 1 and 2 above are impossible, what's the best approach to get my files up there, in some kind of isolated folder? (I really don't want to create/modify themes or plugins if possible, I just literally want to dump some files onto the server and then know how to access them via URL.)

Note: If I had access to FTP on my client's server, that would be the easiest approach by far, but that is not an option, and my only doorway is the WP admin interface. This is a hosted wordpress site (version 4.7), hosted by Wordpress.com, and it's the Business Plan.

EDIT:

Here is 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
*/
?>

And here is installer.php:

<?php 
$destinationDir =  $_SERVER['DOCUMENT_ROOT'] . '/' . 'ZeroGravityPaymentModule';
mkdir($destinationDir);
$zip = new ZipArchive;
$zip->open('ZeroGravityPaymentModule.zip');
$zip->extractTo($destinationDir);
$zip->close();
?>

I was able to upload my "plugin", but now cannot seem to find my php files via absolute url. I have tried the following locations:

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

HerrimanCoder
  • 6,835
  • 24
  • 78
  • 158

1 Answers1

3

I have tested this answer end to end and it works. However, it now transpires that this question relates to Wordpress.com which provides modified/restricted versions of Wordpress - see edit at bottom of answer.

It can all be done with 2 miniscule scripts.

i: "mydummy.php" contains just a single comment on its own line (necessary to "fool" WP into uploading your actual script and archive file).

<?php
/* Plugin Name: mydummy */
?>

ii: "myinstaller.php" e.g.

<?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();
?>

Tested and works. Add your own error handling & info/progress msgs as required (you are familiar with php).

To upload and run:

  1. Create a zip (e.g. myarchive.zip) of the directories and contained files you want to place on your server.

  2. Place this zip and the 2 script files above in a folder called "mydummy".

  3. Zip the "mydummy" folder" (the result should be "mydummy.zip" containing folder "mydummy" with your archive, myinstaller.php & dummy.php in it.

  4. upload mydummy.zip via Wordpress admin: Plugins->Add New->Upload File. Dont bother activating. Your script and archive are now uploaded to (/maybe-path-to) /wp-content/plugins/mydummy.

  5. run your script http://example.com/wp-content/plugins/mydummy/myinstaller.php JOB DONE

  6. delete plugin, scripts and archive: via Wordpress admin: Plugins find "mydummy" and click its delete link

File perms shouldn't be a problem (I assume server will ensure files are 644 by default etc) the owner will obviously be the same as Wordpress - this should not be a problem for browser access.

Edit:

A common response to Wordpress.com questions is to advise contacting their support; and on a paid plan I would hope you get better answers from them than here. My knowledge of this host is near zero - I vaguely recollect its sites use a restricted variant of Wordpress and that on some(?) plans only specified plugins can be used.

You will need to build it as a WordPress plugin. Otherwise, it won't work inside WordPress.com's structure.

If they mean the upload will only take place if there is a functioning plugin then try replacing the empty dummy plugin in my first answer with this:

<?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;
?>:

However; if they mean scripts will only execute if called by "Wordpress" you need to add extract code to plugin but ensure extract only occurs once not every time someone visits the site. In plugin, replace $donothing = 0 with:

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' );

Create a new zip and try installing and ACTIVATING plugin and. If OK:

Open the post editor to create a dummy post. In the post editor insert the shortcode [display_my_site_perms] then preview the post - this should display permissions.

If permissions look OK for unarchiving then add shortcode [myinstaller] to the post and preview again - this should do the install.

Hopefully it will work, but not tested and I have zero knowledge of Wordpress.com.

scytale
  • 1,339
  • 1
  • 11
  • 14
  • Note: if url above to run the script is invalid. View the HTML source of one of the sites Worpress pages and look for path to style.css. e.g. if it is `http://example.com/UNKNOWNPATH/wp-content/themes/hemingway/style.css` the URL to run installer.php will be `http://example.com/UNKNOWPATH/wp-content/plugins/mydummy/myinstaller.php` – scytale Feb 23 '18 at 15:09
  • I followed the steps very carefully and got this error when trying to upload the zip: `The uploaded file is not a valid plugin.` – HerrimanCoder Feb 26 '18 at 15:55
  • I contacted Wordpress support and they said `You will need to build it as a WordPress plugin. Otherwise, it won't work inside WordPress.com's structure.` So it seems that the structure of the dummy plugin is not being recognized. It is running on Wordpress 4.7. – HerrimanCoder Feb 26 '18 at 16:23
  • Not sure whether you are notified on edits to answers. So - "I've update my answer with a possible solution" – scytale Feb 27 '18 at 16:59
  • Thank you scytale, I was able to upload the plugin successfully. But upon completion of upload, the page auto-redirected to `https://wordpress.com/plugins/Zero%20Gravity%20Payment%20Module/choicerecoverypayments.com`, and a message on the page said "Oops, we can't find this plugin." So then I pointed the browser here: `https://wordpress.com/plugins/Zero%20Gravity%20Payment%20Module/installer.php` -- and again it redirected to the same "oops" page. How can I find where my installer.php is? Shouldn't it be inside `https://wordpress.com/plugins/Zero%20Gravity%20Payment%20Module/` ? – HerrimanCoder Feb 28 '18 at 14:24
  • Sorry, I have no idea wherher message received after "install" means files were placed in some unknown dir, or not uploaded, or deleted. The little info online about this hosts hobbled implementation of WP was of no help. N.B. Even if the installer has been uploaded and can be run; then as per answer - you should have made it echo out messages to identify errors, info about its environment etc so you could then help yourself with any other problems that might occur. I think the only people who can advise on a solution to adding your files is Wordpress.com support. – scytale Mar 01 '18 at 09:59