記事を公開した時に、入力した内容をプログラムから新しく記事が作成されるプログラムです。更新する度に同じ記事が何度も表示されてしまうので、新規公開の時は、プログラムを動かし、記事の更新の時は、プログラムを動かさない方法を教えてください。
使用プラグイン「Advanced Custom Fields」
カスタムフィールド「_itemCode」
・下記のプログラムの説明
「_itemCode」に入力したコードが重複してるか、してないかで分岐してます。
post_customで「_itemCode」に入力されたコードを「$code」の変数に入れて、「get_posts」で「_itemCode」の「$code」を表示
するようにしています。
「if (!empty($posts_array))」の記述で、もし、「$posts_array」に「_itemCode」が入っているなら「echo '更新'」を表示して終了
「$posts_array」なにも入っていなければ「echo '新規記事';」の下のプログラムを実行するプログラムです。
・うまくいかない点
記事の更新の場合は、「echo '更新'」が表示されて正常な状態なのですが、記事の新規追加の時も「echo '更新'」が表示されてしまいました。「echo '新規記事';」を表示するにはどうしたらいいのでしょうか?教えてほしいです。
function get_article_created_time() { remove_action('save_post', 'get_article_created_time'); //無限loop解除用 $code = post_custom('_itemCode'); $args = array( 'post_type' => 'post', 'meta_key' => '_itemCode', 'meta_value' => $code ); $posts_array = get_posts($args); if (!empty($posts_array)) { echo '更新'; } elseif(empty($code)) { echo '新規記事'; if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { // 自動保存時 return $post_id; // 何もしない } elseif (!empty($_POST)) { global $post; $get_title = $post->post_title; //記事タイトル取得 $get_code = get_post_meta($post->ID, '_itemCode', true); //商品コード取得 $my_post = array( 'post_type' => 'post', //投稿タイプ 'post_title' => $get_name, //記事タイトル 'post_status' => 'publish', //投稿ステータス 'post_content' => $get_content, //記事本文 ); $post_id = wp_insert_post($my_post); update_post_meta($post_id, '_itemCode', $get_codes); // 商品コード } } } add_action('save_post', 'get_article_created_time');
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/11/21 07:44