ワードプレスをcmsとして使っています。投稿ごとに、投稿に添付されたすべての画像を含む zip ファイルのダウンロードを [登録ユーザーに] 提供する必要があります。メインファイル「gallery-zip.php」からのコードのみを示します (元のコードと残りのファイルはここにあります)。問題は、ローカルホストでのみ機能し、ライブサーバーでは機能しないことです。
プラグインコード:
<?php
namespace GalleryZip;
add_action( 'plugins_loaded', __NAMESPACE__ . '\gallery_zip_start', 10, 0 );
/**
* Invoke the plugin and load the needed classes
*/
function gallery_zip_start() {
// simple autoloader
$classes = glob( dirname( __FILE__ ) . '/classes/*.php' );
if ( ! empty( $classes ) ) {
foreach ( $classes as $class )
require_once $class;
add_action( 'init', __NAMESPACE__ . '\add_hooks', 10, 0 );
add_action( 'init', __NAMESPACE__ . '\enqueue_scripts', 10, 0 );
if ( is_admin() )
return;
// this is only needed on the frontend
GalleryZip::get_instance( new GalleryZip_DataContainer() );
}
}
/**
* Adding the needed hooks
*/
function add_hooks() {
add_action( 'wp_ajax_get_galleryzip', __NAMESPACE__ . '\get_gallery_zip', 10, 0 );
add_action( 'wp_ajax_nopriv_get_galleryzip', __NAMESPACE__ . '\get_gallery_zip', 10, 0 );
}
/**
* Enqueu the JavaScript
*/
function enqueue_scripts() {
// load minified version if SCRIPT_DEBUG is true
$min = ( defined( 'SCRIPT_DEBUG' ) && true == SCRIPT_DEBUG ) ? '' : '.min';
wp_enqueue_script(
'gallery-zip',
plugins_url(
sprintf( 'js/gallery_zip%s.js', $min ),
__FILE__
),
array( 'jquery' ),
false,
true
);
// set JS object with params
wp_localize_script( 'gallery-zip', 'GalleryZip', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
}
/**
* Ajax callback for creating the zip-file and sending the url to zip-file
*/
function get_gallery_zip() {
$send_result = function( $result = '' ) {
if ( is_array( $result ) )
$result = var_export( $result, true );
header( 'Content-type: application/json' );
die( json_encode( array( 'result' => $result ) ) );
};
$post_id = (int) filter_input( INPUT_POST, 'post_id', FILTER_SANITIZE_NUMBER_INT );
$gallery_id = (int) filter_input( INPUT_POST, 'gallery_id', FILTER_SANITIZE_NUMBER_INT );
if ( 0 >= $post_id )
$send_result( var_export( $_POST, true ) );
$images = GalleryZip::get_images_ajax_callback( $post_id, $gallery_id );
$send_result( $images );
}
テスト環境:
- LOCALHOST : PHP 5.3.10 および最新の wordpress 3.6.1 で動作します。
- LIVE SITE : PHP 5.3.27 で動作し、最新の wordpress 3.6.1 で動作します。
私が試したこと。最新の wordpress 3.6.1 と PHP バージョン 5.3.10 を使用してローカルホストでプラグインをテストし、このコード行を single.php template で使用しまし<?php echo do_shortcode('[gallery]'); ?>
た。クリックすると、素敵なzipダウンロードリンク「Get as Zip」が提供され、すべてが完璧でした.
ライブサイトにプラグインをインストールするとすぐに、サイトがPHP 5.2の古いバージョンを使用していたため、特にプラグインコードの最初の行の名前空間構文が原因でエラーがスローされました-namespace GalleryZip;
したがって、まず最初にアップグレードしましたPHP のバージョン。
現在、ライブサイトで実行しているため、リンク「GalleryZip」が期待どおりに表示されますが、リンクはzipダウンロードを要求せず、クリックするとページが更新されます。
最新のFirefox、Chrome、Safariブラウザでテストした基本的なことを除外するために、ライブサイトではなくローカルホストで期待どおりに動作します。Wordpress関連:テーマをデフォルトの23に変更し(ループの内側と外側で試しました)、他のすべてのプラグインも無効にしましたが、結果は変わりませんでした。
http://website.com/wp-admin/admin-ajax.php 200 OK
ライブ サイトであっても、リンクをクリックするとFirebug コンソールが表示されます。また、元の開発者に数週間前に助けを求めましたが、まだ応答がありません. よろしければ、コードを見て、これが解決できるかどうかをお知らせください。または、どこかで間違っている場合は修正してください。また、間違いなく別の場所で質問する必要があるかどうかもお知らせください。私は継続的にテストを行っており、できる限りのことを行っていますが、少しでも手を貸していただければ幸いです。