要望の結果によりけりじゃないんですか。
非表示でもよければJQueryとかでcssのdisplay:noneでもOKなんでしょうか。
できるかできないかとかスクリプトの例示とかできませんが。
非表示ではなく、削除が必要です。
アイキャッチを再登録するために前の写真を消すという意味です。
Front-end Editor for WordPress
作者がwordpressから足を洗ったようなので、3年ぐらい更新されていないプラグインだけど、
対象とする項目が細分化されてサムネイル単独でも編集できるようだから、
ソースのコードをたどっていけば参考になるかもしれませんね。、
こんにちは
このコードは一度もテスト/実行していないので、参考程度にお願いします。
function my_remove_thumbnail(){
if(!empty($_POST['del_thumbnail']) && !empty($_POST['my_post_id'])){
delete_post_meta($_POST['my_post_id'], '_thumbnail_id')
}
}
add_action('init', 'my_remove_thumbnail', 1);
前提として、更新ボタンか何かでPOSTされることにしています。
更新時にinitフックが実行されることを想定しています。
別のフックやイベントが良い場合はそれに変更してください。
また、削除するかどうかはチェックボックス’del_thumbnail’に設定されており、投稿のIDが’my_post_id’に入っていてPOSTされる前提になっています。
本当は、投稿のアップデートが完了してから実行されることが望ましいです。
投稿の更新がエラーになっているのにサムネイルだけ削除された、という現象を回避するためです。
ajaxでサクっと消えたらいいかもしれませんが、手を抜いてしまいました・・・
コードも考えていただいてありがとうございます!
すぐに返信したつもりだったのですが投稿できていませんでした、すみません。
説明が言葉足らずだったので追記させていただきます。
現状ではabcというカスタム投稿タイプの、custom_imgというカスタムフィールドにアップロードした画像を公開時に自動で読み込んでアイキャッチに設定するようになっています。
これはプラグインではなく、functions.phpにコードを記述しています。
ただこの状態だと一度custom_imgに画像を設定して更新すると、その後custum_imgの画像を変更してもアイキャッチは最初のものから変わらないようです。
なので、abcというカスタム投稿タイプが更新されるたびに「現在のアイキャッチを削除→custum_imgの画像をアイキャッチに設定」という流れが自動で起きるようにしたいのです。
これは可能でしょうか?
フロントエンド側で編集している状態からアイキャッチ画像を削除すればいいということでしょうか?
この場合、やはり ajax を使用することになりそうですね。
文章で説明すると長くなりそうなのでコードそのものをご覧ください。
functions.php 等に
function ajax_frontend_remove_post_thumbnail() {
$post_id = intval( $_POST['post_id'] );
check_ajax_referer( 'frontend_remove_post_thumbnail-' . $post_id );
if ( delete_post_thumbnail( $post_id ) ) {
die( '<p>アイキャッチ画像を削除しました。</p>' );
}
die( '0' );
}
add_action( 'wp_ajax_frontend-remove-post-thumbnail', 'ajax_frontend_remove_post_thumbnail' );
function frontend_remove_post_thumbnail_link() {
global $post;
?>
<script type="text/javascript">
var ajaxurl = '<?php echo admin_url( 'admin-ajax.php'); ?>';
var MyRemoveThumbnail;
(function($) {
MyRemoveThumbnail = function(id, nonce) {
$.post(ajaxurl, {
action: 'frontend-remove-post-thumbnail',
post_id: id,
_ajax_nonce: nonce
}, function(str) {
if (str == '0') {
alert('アイキャッチ画像を削除できませんでした。');
} else {
$('#frontend-remove-post-thumbnail').html(str);
}
}
);
};
}(jQuery));
</script>
<?php
$post_id = $post->ID;
$ajax_nonce = wp_create_nonce( 'frontend_remove_post_thumbnail-' . $post_id );
echo '<div id="frontend-remove-post-thumbnail">';
if ( has_post_thumbnail($post_id) ) {
echo '<a href="#" id="remove-post-thumbnail" onclick="MyRemoveThumbnail(\'' . $post_id . '\',\'' . $ajax_nonce . '\');return false;">アイキャッチ画像を削除</a>';
} else {
echo '<p>アイキャッチ画像は設定されていません。</p>';
}
echo '</div>' . "\n";
}
テンプレート等に
<?php frontend_remove_post_thumbnail_link(); ?>
なお、このコードは試していませんのでエラーがでるかもしれません。またかなり大雑把で細かいことは無視しています。参考程度にしてください。
>ishitakaさん
すごい!
求めていた結果が手に入りました!ありがとうございます!!!
今回教えていただいたのをもとに、ajaxを勉強してみようと思います。