###実現したいこと・前提条件
- WordPressメディア上で「画像を編集」をクリックするとプレビューされる画像URL(ajax)を公開ページでも使えるようにしたい
↑具体的には「【サイトURL】/wp-admin/admin-ajax.php?action=imgedit-preview&_ajax_nonce=○○&postid=○○」のようなパス
- 現状ではWordPressにログインしてから公開ページ側を見ないと該当パスの画像が表示されない
カスタムフィールドの画像を表示したいのですが、訳があってそのままのURLで表示するのではなくajax版のパスで公開ページに表示したいと考えています。
具体的な理由は下記です。
- WordPressのプラグイン「Woocommerce」で画像などのデータを販売している
- Woocommerceの仕様上、データを実際に購入した人にしか該当データへのアクセス権が与えられない
- ゆえに公開サイトでデータをプレビューできないので代わりにadmin-ajax.phpの画像URLを使って公開ページに画像を表示したい
###画面該当箇所のコード
管理画面上の任意の場所にajax版の画像をプレビューすることは、過去の質問で教わった下記のコードで実現できました。(https://teratail.com/questions/241743)
php
1<?php$args = [ 2 'numberposts' => -1, 3 'post_mime_type' => 'image', 4 'post_parent' => get_the_ID(), 5 'post_type' => 'attachment' 6]; 7$images = get_children( $args ); 8foreach ( $images as $image ) { 9 $nonce = wp_create_nonce( "image_editor-$image->ID" ); 10 ?> 11<img src="<?php echo admin_url( 'admin-ajax.php', 'relative' ); ?>?action=imgedit-preview&_ajax_nonce=<?php echo $nonce; ?>&postid=<?php echo $downloadfile_id; ?>" onerror="this.style.display='none'">
↓投稿画面上でajax版URLを使って登録した画像を表示した結果
公開ページ側で同じことをしようとしても、画像は表示されません。
###試したこと
WordPRessにログインした状態で「【サイトURL】/wp-admin/admin-ajax.php?action=imgedit-preview&_ajax_nonce=○○&postid=○○」をブラウザで叩くと画像が表示されます。
しかし、ログインしていない状態で同じことをするとブラウザに「0」と表示されるだけです。
例えば何かの設定をfunctions.phpに書き足せば、管理画面以外でも使えるようになるわけではないのでしょうか?
「そもそもの用途として間違っている」とか、「こういうことを調べたらいい」などがあればご教授いただきたいです。
###補足情報(FW/ツールのバージョンなど)
WordPress5.3.2
woocommerce3.8.1
回答2件
あなたの回答
tips
プレビュー