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

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

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

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

Q&A

解決済

1回答

1590閲覧

カスタム投稿を投稿したら、別のカスタム投稿(新着情報)に新着通知を自動投稿したい

kii.32

総合スコア67

WordPress

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

0グッド

1クリップ

投稿2021/08/22 08:16

編集2021/08/22 14:29

前提・実現したいこと

▼カスタム投稿:施工例
カスタムフィールド(画像):works_pic

▼カスタム投稿:新着情報
カスタムフィールド (画像):news_pic

の2つがあった際に、

施工例を更新すると、自動で新着情報にも下記内容を更新したい。
(できれば、施工例投稿の際にチェックボックスをつけて、自動投稿するかどうかを選択したい)

==========================
・タイトル
施工例を投稿しました。(固定文)

・本文
施工例を投稿しました、下記よりご覧ください。(固定文)

施工例へのボタン(固定文)

works_picの画像


single-news.phpには下記記載をしているので、
works_picをnews_picに代入できれば。。。と思っております。

<?php if (post_custom('news_pic')) : ?> <img src="<?php echo esc_url(wp_get_attachment_url($post->news_pic)); ?>" alt=""> <?php endif; ?>

==========================

該当のソースコード

function add_news($post_id) { global $wpdb; $post_type = get_post_type($post_id); if ($post_type == 'works') { $title = "施工例を投稿しました"; $post_id_new = wp_insert_post( array( 'comment_status' => 'closed', 'ping_status' => 'closed', 'post_title' => $title, 'post_status' => 'publish', 'post_type' => 'news', ) ); } } add_action('publish_works', 'add_news');

試したこと

関数リファレンス/wp insert post
上記関数にて、自動投稿されるまではできましたが、

・カスタムフィールド works_pic → news_pic への連動
・本文の設定(固定文とボタン)
・施工例投稿の際の自動投稿の有無をチェックボックス で決める

この3点が解決できず、こちらに投稿をさせていただきました。
有識者の方がいらっしゃいましたら、教えていただけますと幸いです。

どうぞ宜しくお願い致します。

追記

下記コードにて自動投稿まではできました。
あとはカスタムフィールド の値によって、「自動投稿の有無を選べるようにする方法」で行き詰まっています。

function function_copying_posts() { global $post; if ($post->post_type == 'works') { $current_postID = $post->ID; $hoge_name = $_POST['acf']["キー"]; $hoge_linkage = $_POST['acf']["キー"]; // 自動投稿するときのステータスをここで指定 $draft_my_options = array( 'post_title' => get_the_title($current_postID), 'post_content' => '', 'post_status' => 'publish', 'post_type' => 'news' ); $newpost_id = wp_insert_post($draft_my_options); if ($newpost_id) { // カスタムフィールドに値を挿入しています。 update_post_meta($newpost_id, 'news_pic', $hoge_name); update_post_meta($newpost_id, 'news_linkage', $hoge_linkage); } } } add_action('publish_works', 'function_copying_posts', 9);

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

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

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

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

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

guest

回答1

0

ベストアンサー

wp_insert_postの戻り値を取得して、そのカスタムフィールドに$post_idを保存しておいて、「新着情報」を表示する際にそれを元に画像を表示すればできそうです。

投稿2021/08/22 12:29

kei344

総合スコア69606

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

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

kii.32

2021/08/22 14:32

ありがとうございます。 wp_insert_postを使ってカスタムフィールド の値を引き継ぐことができました。(コードは追記いたしました。) あとは、「自動投稿の有無を選べるようにする方法」が解決していないのですが、 追記したfunctions.phpのフックをカスタムフィールド の条件の有無で処理されるかどうかを条件分岐できれば良いかと思うのですが、 functions.php内でカスタムフィールド の値によって条件分岐は可能なのでしょうか。。。?
kei344

2021/08/22 18:17

>あとは、 add_newsの段階で$post_idが来ているのだから、それのカスタムフィールドから採れませんか? カスタムフィールドの処理って「publish_」フックの後でしたっけ。(そうでなければ採れると思います)
kii.32

2021/08/23 05:17

ありがとうございます! カスタムフィールド を取ることで、対応できました! 非常に勉強になりました。 ご回答いただきましたこと感謝いたします。 ========================== function function_copying_posts() { global $post; if ($post->post_type == 'works') { $current_postID = $post->ID; $hoge_name = $_POST['acf']["キー"]; $hoge_linkage = $_POST['acf']["キー"]; if ($hoge_linkage) { // 自動投稿するときのステータスをここで指定 $draft_my_options = array( 'post_title' => get_the_title($current_postID), 'post_content' => '', 'post_status' => 'publish', 'post_type' => 'news' ); $newpost_id = wp_insert_post($draft_my_options); } if ($newpost_id) { // カスタムフィールドに値を挿入しています。 update_post_meta($newpost_id, 'news_pic', $hoge_name); update_post_meta($newpost_id, 'news_linkage', $hoge_linkage); } } } add_action('publish_works', 'function_copying_posts', 9);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問