質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

693閲覧

WordPressで登録していないユーザー(誰でも)でもフロント画面から記事の削除を行いたい。

rinrin1137

総合スコア87

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/02/09 15:09

編集2022/02/09 15:40

現在、社内使用する簡易的なシステムを構築する上でユーザー登録をしていないスタッフが管理画面を使用せずに削除ボタンを押したら記事が削除されるように実装したいのですが、うまくいっておりません。

システム自体にはベーシック認証をかけてありますので、今回はユーザー登録をあくまでもしない状態で記事の削除を行えないかご教授いただきたく質問をさせていただきました。

【現在のコード】
カスタム投稿の記事のタイトルをクリックで削除できるように実装したいと考えております。

PHP

1<ul> 2 <?php 3 $args02 = array( 4 'posts_per_page' => -1, 5 'post_type' => 'contact', 6 7 'tax_query' => array( 8 array( 9 'taxonomy' => 'select_shops', 10 'field' => 'slug', 11 'terms' => array( 'kashiwa02' ) 12 ), 13 ) 14 ); 15 ?> 16 17 <?php foreach ( get_posts( $args02 ) as $post ): setup_postdata($post); ?> 18 <li><a href="<?php echo get_delete_post_link( $post->ID ); ?>" onclick="return confirm('削除します。宜しいですか?')"><?php the_title(); ?></a></li> 19 <?php endforeach; ?> 20 </ul>

【変更後】

PHP

1 <ul> 2 <?php 3 $args02 = array( 4 'posts_per_page' => -1, 5 'post_type' => 'contact', 6 7 'tax_query' => array( 8 array( 9 'taxonomy' => 'select_shops', 10 'field' => 'slug', 11 'terms' => array( 'kashiwa02' ) 12 ), 13 ) 14 ); 15 ?> 16 17 <?php foreach ( get_posts( $args02 ) as $post): setup_postdata($post); ?> 18 <li><a href="<?php $post_id = the_ID(); wp_delete_post($post_id); ?>" onclick="return confirm('削除します。宜しいですか?')"><?php the_title(); ?></a></li> 19 <?php endforeach; ?> 20 21 </ul>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

まずget_delete_post_linkの出力にユーザー権限のチェックがあり
投稿削除処理にもユーザー権限のチェックがかかってます

チェックをスルーできるようなフィルタフックもなく、
WordPressに元々備わっている投稿削除の仕組みを流用して
ログインなしでも投稿削除できるようにするのは難しいかと思います

しかし投稿削除を実行する関数であるwp_delete_postではチェックされないのでこれを
ユーザー操作を起点に実行できるようにすれば良いです

多分最も簡単な方法は、個別ページのテンプレートに
特定のURLパラメータ付きでアクセスされたら
投稿を削除するような処理を書いておいて、削除ボタンには
get_permalinkで取得した個別ページのURLに
add_query_argでそのURLパラメータを付与するというやり方です

投稿2022/02/09 15:57

KazuhiroHatano

総合スコア7804

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rinrin1137

2022/02/09 16:50

ありがとうございます。index.phpからカスタム投稿の個別ページに飛ばすことは可能なのでしょうか?
rinrin1137

2022/02/10 02:20

フラグを固定で追加してあげて、個別記事ページのphpファイルで削除の処理をすることでできました! 関数の権限チェックのことなど詳しく教えていただき感謝です。 ありがとうございました。
guest

0

なんだか、変わった要件ですね。
WordPressは、最近ほとんど触らないので、ざっと調べただけですが、
この関数使ったらいけるんじゃないですか?
https://developer.wordpress.org/reference/functions/wp_delete_post/

フロントでこの関数呼び出すボタンでも付けてあげれば、誰でも削除出来ると思いますが。

投稿2022/02/09 15:16

Eskee

総合スコア268

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rinrin1137

2022/02/09 15:39

ご回答ありがとうございます。 少し変わった要件なのですが、いただきました情報を参考にコードを変更しましたが、 管理画面からログアウトした状態ですと削除ができませんでした。 コードを追記いたしましたので、ご教授いただけないでしょうか。
Eskee

2022/02/09 15:47

`<li><a href="<?php $post_id = the_ID(); wp_delete_post($post_id); ?>" onclick="return confirm('削除します。宜しいですか?')"><?php the_title(); ?></a></li>` ここが根本的に違います。 PHPとJavaScriptをごっちゃにして考えてませんか? 詳しく説明したいですが、もう寝るので、また明日時間があれば補足します。 正直、社内のシステムで、フロントからページを削除するというトリッキーな案件を引き受けるには、PHP/JavaScript/WordPressの根本的な知識が不足してると思います。 時間があるのであれば、もう少し基礎的なところから勉強することをおすすめします。
rinrin1137

2022/02/09 15:49

申し訳ございません。 すぐに対応しなければならない案件でして・・・。 明日ご回答いただけましたら幸いでございます。 基礎的な部分からの学習も再度行いたいと思います。
rinrin1137

2022/02/10 02:20

無事に実現することができました。 ご回答ありがとうございました。
guest

0

一覧表示しているボタンに対してパラメータを付与し、
個別記事のページ内で処理をすることで、アカウントを持たないユーザーでも記事の削除を行うようにできました。

HTML

1 <ul> 2 <?php 3 $args03 = array( 4 'post_type' => 'iwatsuki', 5 'posts_per_page' => -1 6 ); 7 $args03 = get_posts($args03); 8 ?> 9 10 <?php foreach($args03 as $post):setup_postdata($post); ?> 11 <li> 12 <a href="<?php the_permalink(); ?>?flag=1&id=<?php the_ID(); ?>" onclick="return confirm('削除します。宜しいですか?')"><?php the_title(); ?></a> 13 </li> 14 <?php endforeach; wp_reset_postdata(); ?> 15 </ul>

PHP

1<?php 2$post_id = (int)$_GET['id']; 3 4if($_GET['flag'] == 1){ 5 wp_delete_post($post_id, true); 6 header('Location: http://localhost:8888/'); 7} 8?>

投稿2022/02/10 02:23

rinrin1137

総合スコア87

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問