「カスタムフィールド値にダブりがないか?」のチェックが必要になったので考えてみました。商品IDにダブりがないか、とか。
投稿入力時に「すでに存在するIDです」とアラートを出せればベストなのですが、今の知識では無理でした。
以下、投稿タイプ「item」で、カスタムフィールド「item_id」にダブりがあったらその値を出す、という感じです。
1:任意の場所に一覧表示
<?php
$args = array(
'post_type' => 'item'
);
$item_ids[] = '';
$query = new WP_Query( $args );
if( $query->have_posts() ){
echo '<h3>■商品ID重複アラート</h3>';
while( $query->have_posts() ){
$query->the_post();
if( get_post_meta( $post_id, 'item_regist', true ) ){
$item_id = strip_tags( str_replace( array( "\r\n" , "\r" , "\n" , " " , " " ), '', get_post_meta( $post_id, 'item_regist', true ) ) );
if( in_array( $item_id, $item_ids ) ){
echo '<p>' . $item_id . 'は登録済みです。</p>';
}else{
$item_ids[] = $item_id;
}
}
}
wp_reset_postdata();
}
?>
出力場所は任意。ダッシュボードとか。
HTMLタグ、全角・半角スペース、改行コードは取り除いていますが、「-」と「ー」などは区別しちゃうのであくまで目安程度。
半角英数だけなら何とかなると思いますが、漢字も使うフィールドだったのできれいにあきらめ。
2:管理画面の投稿一覧にカラムを追加して表示
<?php
/* ---------- 一覧にカラム追加 - 投稿タイプ【商品】 カスタムフィールド【商品ID】 ---------- */
function add_posts_column_item( $column ){
$column[ 'item_regist' ] = '商品ID';
return $column;
}
add_filter( 'manage_item_posts_columns', 'add_posts_column_item' );
function mod_posts_column_item( $column_name, $post_id ){
$item_regists[] = '';
$args = array(
'post_type' => 'item',
);
$query = new WP_Query( $args );
if( $query->have_posts() ){
while( $query->have_posts() ){
$query->the_post();
if( get_post_meta( $post_id, 'item_regist', true ) ){
$item_regist = strip_tags( str_replace( array( "\r\n" , "\r" , "\n" , " " , " " ), '', get_post_meta( $post_id, 'item_regist', true ) ) );
$item_regists[] = $item_regist;
}
}
}
$counts= array_count_values( $item_regists );
if ( $column_name == 'item_regist' ) {
$item_regist = strip_tags( str_replace( array( "\r\n" , "\r" , "\n" , " " , " " ), '', get_post_meta( $post_id, 'item_regist', true ) ) );
echo ( $item_regist ) ? $item_regist : '-';
if( $counts[$item_regist] > 1 ){
echo '<br><span style="color: #F00; font-weight: bold;">重複しています!</span>';
}
}
}
add_action( 'manage_item_posts_custom_column', 'mod_posts_column_item', 10, 2 );
?>
編集画面でのアラートはリアルタイムで出す必要があるのでjava scriptを使うのかな?
カートシステムのプラグインあたりを調べればわかるか。
そのうち考えてみよう。