sample

サンプル:風俗キャスト管理krc-cast-managerプラグインの表示させ方

2021/01/19アップデートしました。
上手く動かなかったり変だったり使えなかったりしましたら、ページ一番下のコメント欄よりコメントください!
下記の解説も情報が古かったりしたらと教えていただけると助かります。
以前、風俗サイト用:在席キャスト管理WordPressプラグインというものを公開させて頂きました。
WP管理画面ででキャスト情報・出勤情報・ランキング等を管理する為のプラグインだったんですが、表示側に関しては自分でやってくれっていう投げっぱなしなプラグインだったので、流石にちょっとしたサンプルくらいは載せたほうが良いのではないかなと思いまして、今回簡単なサンプルを掲載することにしました。
  1. 基本的にはキャスト管理はカスタム投稿とカスタムタクソノミーとカスタムフィールドで出来ています。
  2. ランキング管理もカスタム投稿とカスタムフィールドで出来ています。
  3. スケジュールはカスタムテーブルに入っています。

という形になっているので、カスタムタイプ名とかフィールド名が分かればgoogleさんで検索して頂ければ表示方法は無数にありますが、ちょっとわからないよーという方のために、とりあえずこうやれば表示できますよという簡単なサンプルを載せさせて頂きました。
フィールド名はこちらに

サンプル用に使用したテーマは「Twenty Fifteen」です。

キャスト一覧ページを作成したい

キャスト一覧は【cast】というカスタム投稿でできていますので、とりあえずキャスト一覧ページ用のファイルを作成しましょう。
使用しているテーマで・・

  1. archive.phpをコピーしてarchive-cast.phpという名前にして保存
  2. content.phpをコピーしてcontent-castlist.phpという名前にして保存
  3. archive-cast.phpのget_template_part( ‘content’, get_post_format() ); を
    get_template_part( ‘content’, ‘castlist’ ); にして保存

archive.phpはページ一覧とかを表示するファイルです。カスタム投稿の場合はarchive-【投稿タイプ名】.phpで優先して使われますので、archive-cast.phpを作成した上で(1)、その中で更に呼び出されているcontent.phpをコピーして、content-castlist.phpを作成(2)get_template_part関数で呼び出しているファイルを変更(3)します。
これで「http://ドメイン/cast/」にキャストページ専用の一覧ページが見えるはずです。
※キャスト情報の表示方法は別途記載

WPテーマの呼び出しルール

キャストの個人ページを作成したい

一覧ページと同じように、WPのルールに基づいて個人のページを作成していきます。

  1. single.phpをコピーしてsingle-cast.phpという名前にして保存
  2. content.phpをコピーしてcontent-cast.phpという名前にして保存
  3. single-cast.phpのget_template_part( ‘content’, get_post_format() ); を
    get_template_part( ‘content’, ‘cast’ ); に変更して保存

一覧ページを作成した時と同じく、WPのルールに基づいてファイルを作成していきます。
カスタム投稿の個別ページは、single-【投稿タイプ名】.phpで優先して使われますので、single.phpをコピーしてsingle-cast.phpを作成して(1)、その中でされに呼び出されているcontent.phpをコピーしてcontent-cast.phpに変更(2)get_template_partで呼び出すファイルを変更して保存。
一覧と同じですね。

キャストの情報を表示したい

上記で一応専用のページは出来ましたが、3サイズとか特別に用意した情報が表示されていませんので、それを表示しましょう。
一覧ページの場合content-castlist.php・個別ページの場合はcontent-cast.phpの中で下記の様に書いてみる。

<?php
$cast_fields = get_post_custom();  //カスタムフィールドを全部取得
$cast_screens = json_decode($cast_fields['_krc_cast_screens'][0]);   //画像配列を用意
$cast_type_terms = get_the_terms($post->ID, 'krc_type');  //タイプタクソノミーを取得
$cast_grade_terms = get_the_terms($post->ID, 'krc_grade');  //グレードタクソノミーを取得
$cast_new_terms = get_the_terms($post->ID, 'krc_new');  //新人区分タクソノミーを取得
?>
<a href="<?php the_permalink(); ?>
<dl>
<dt><?php echo esc_html($cast_fields['_krc_name'][0]); ?> <?php echo esc_html($cast_fields['_krc_age'][0]); ?>歳</dt>
<dd><img src="<?PHP echo esc_url($cast_screens[0]); ?>" width="200" alt="<?php echo esc_html($cast_fields['_krc_name'][0]); ?> " /></dd>
<dd>T:<?php echo esc_html($cast_fields['_krc_tall'][0]); ?> B:<?php echo esc_html($cast_fields['_krc_bust'][0]); ?>(<?php echo esc_html($cast_fields['_krc_cups'][0]); ?>)W:<?php echo esc_html($cast_fields['_krc_waist'][0]); ?>H:<?php echo esc_html($cast_fields['_krc_hips'][0]); ?></dd>
<dd><?php echo esc_html($cast_type_terms[0]->name); ?></dd>
<dd><?php echo esc_html($cast_grade_terms[0]->name); ?></dd>
<dd><?php echo esc_html($cast_new_terms[0]->name); ?></dd>
</dl>
</a>

キャスの3サイズや写真等はカスタムフィールドに入っています。
上記はカスタムフィールドからデータを取ってきています。
データが入ってなければエラーになったり、もうちょっとちゃんとした書き方をした方がいいと思いますがとりあえず・・・
これでデータがでたと思います。
タクソノミーを使用しているので、身長別の一覧ページやカップ毎の一覧ページも作成できます。
カップ等で絞り込みしたいような事があればタクソノミーを使用すると便利かもしれません。

ランキングページを作成したい

ランキングページは【krc_ranking】というカスタム投稿でできていますので、キャスト情報の表示と殆ど同じです。

  1. archive.phpをコピーしてarchive-krc_ranking.phpという名前にして保存
  2. content.phpをコピーしてcontent-rankinglist.phpという名前にして保存
  3. archive-krc_ranking.phpのget_template_part( ‘content’, get_post_format() ); を
    get_template_part( ‘content’, ‘rankinglist’ );

content-rankinglist.php内で

<?php
$ranking_fields = get_post_custom();  //カスタムフィールドを全部取得
$ranking_cast_ids = json_decode($ranking_fields['_krc_cast_rankings'][0]);   //画像配列を用意
?>
<dl>
<dt><?php echo esc_html($ranking_fields['_krc_ranking_title'][0]); ?></dt>
<dd>
<?php foreach ($ranking_cast_ids as $cast_id) { ?>
<a href="<?php get_permalink( $cast_id ) ?>"><img src="<?php  $img_url = json_decode(get_post_meta($cast_id , '_krc_cast_screens' ,true)); echo esc_url($img_url[0]); ?>" width="100" /></a>
<?PHP } ?>
</dd>
</dl>

で各ランキングが表示されると思います。
ランキングの個別ページはいらないかなと思うのですが、必要であればキャストページと同じ方法で表示できます。

スケジュールページを作成したい

スケジュールページはカスタム投稿を使っていません。
自分で作っといてなんですが、どうやって表示させようかなーと思いまして・・・
今回はとりあえず、固定ページでスケジュールページを作成して、ショートコードでスケジュールを表示する場合。

  1. 管理画面から固定ページで普通にスケジュールのページを作成
  2. 仕様テーマのfunction.phpに下記コードを記載
  3. スケジュール用の固定ページにショートコードを記載

※2015/12/12 バージョンアップに伴い下記のサンプルを一部修正いたしました。当日出勤のキャストがpostidの並び順に表示される形でしたので、管理ページのスケジュール管理のままの並び順になるよう変更しております。

function outschedule($day) {  //DBから該当の日付のデータを取得
global $wpdb;
$table_name = $wpdb->prefix . 'krc_schedules';
$schedules = $wpdb->get_var(
$wpdb->prepare("SELECT work FROM $table_name WHERE day = %s AND status = %d", $day, 0)
);
$works = unserialize($schedules);
return  $works;  //配列にして返す
}
function schedulesHtml() {  //ショートコードの中身
/*
日付を取ってくる処理とかカレンダーを表示する処理とかいろいろな処理は他で必要
*/
$day = '2015-05-21';  //何処かから持ってきた日付
$works = outschedule($day);

//postid順に配列に入っているのでs_order順にした配列を作る
$works_array = array();
foreach($works as $id => $val){
$works_array[$val["s_order"]] = $id;
}
ksort($works_array);
//s_order順番でデータを取得
foreach ($works_array as $order => $id) {  //当日のデータ配列を回す
$img_url = json_decode(get_post_meta($id , '_krc_cast_screens' ,true));
echo '<dl><dt>' . esc_html(get_post_meta($id , '_krc_name' ,true)) . '</dt><dd><a href="' . esc_html(get_permalink( $id )) . '"><img src="' .  esc_html($img_url[0]) . '" width="100" /></a><dd></dl>';
}
}
add_shortcode('scheduleshtml', 'schedulesHtml'); //[scheduleshtml]というショートコードを作成

上記を記載した上で、固定ページのエディターに

[scheduleshtml]

と記載する。

これで2015-05-21のスケジュールが出るはずです。データが有れば・・・
ちょっとカレンダーの作成とか日付を持ってくるところなどまで書けなかったんですが、そこら辺はオリジナルで…

スケジュールページを作成したい パート2 2015/08/17追記

スケジュールに関して、日付を取ってくるまでを知りたいというご要望がちょっときていたのでとりあえず一つのパターンとして追記いたします。
上記の場合と同じようにfunction.phpにスケジュールページに表示せるショートコードを書くパターンです。
ちょっと環境や設定によって細部違う部分が出て来てしまうと思うのですが、参考までにってことで。
今後もうちょっと詳しい説明や、いっその事風俗用のテーマとして組み込んだものを公開しようと考えていますので、それまではなんとかこれで色々やってみてくださいっ汗
ちょっとごちゃっとしてますがその打ち直します汗

※2015/12/12 バージョンアップに伴い下記のサンプルを一部修正いたしました。当日出勤のキャストがpostidの並び順に表示される形でしたので、管理ページのスケジュール管理のままの並び順になるよう変更しております。

//出勤スケジュール
function outschedule($day) {  //DBから該当の日付のデータを取得
global $wpdb;
$table_name = $wpdb->prefix . 'krc_schedules';
$schedules = $wpdb->get_var(
$wpdb->prepare("SELECT work FROM $table_name WHERE day = %s AND status = %d", $day, 0)
);
$works = unserialize($schedules);
return  $works;  //配列にして返す
}

function schedulesHtml() {  //ショートコードの中身
$day = isset($_GET["works"]) ? $_GET['works'] : date("Y-m-d");
$works = outschedule($day);
$len = 4; //+1

$week = array("日", "月", "火", "水", "木", "金", "土");
$w = date('w', strtotime($day));
echo '<header class="sub_h_header">';
echo '<p class="en_h">SCHEDULE FOR ' . date('n.j', strtotime($day)) . '</p>';
echo '<h2 class="sub_h">' . date('n/j', strtotime($day));
echo '(' . $week[$w] . ')';
echo 'の出勤スケジュール</h2>';
echo '</header>';

echo '<nav class="krc_calendar clearfix"><ul>';
for ($i = 0; $i <= $len; $i++) {
$y = date('D', strtotime('+'.$i.' day'));
if ( date('Y-m-d', strtotime('+'.$i.' day')) == $day ) $y = 'target';
echo '<li class="' . mb_strtolower($y) . '"><a href="' .  home_url( '/' )  . '/schedule/?works=' . date('Y-m-d', strtotime('+'.$i.' day')) . '">' . strtoupper(date('n/j(D)', strtotime('+'.$i.' day'))) . '</a></li>';
}
echo '</ul></nav>';

if (!$works) {
//予定がない場合
echo '<br>';
} else if ( $works !='rest' ) {
echo '<div class="clearfix p70">';
//postid順に配列に入っているのでs_order順にした配列を作る
$works_array = array();
foreach($works as $id => $val){
$works_array[$val["s_order"]] = $id;
}
ksort($works_array);
foreach ($works_array as $rder => $id) {
$args = array(
'post_type' => 'cast',
'post__in' => array($id),
);
query_posts($args);
while ( have_posts() ) : the_post();
get_template_part( 'template-parts/content', 'cast' );
endwhile;
wp_reset_query();

}
echo '</div>';
} else {
//休み
echo '<br>';
}

}
add_shortcode('scheduleshtml', 'schedulesHtml'); //[scheduleshtml]というショートコードを作成

キャストの個人ページでスケジュールを表示したい

風俗サイトのキャスト一人ひとりのページに行くと、キャストごとの出勤スケジュールが表示されていることが多いと思います。(私は見に行ったことないけどね!)
そういうサンプルもあったらいいんだろうなとは思っていたんですが、中々書けてていなかったのでコメント頂いたタイミングで追記します。

下記のような関数をfunction.php的なファイルに追加して、

function singlecalendar($id) {
$today = strtotime(date("Y-m-d", strtotime("+3 hour")));
echo '<div class="krc_calendar clearfix">';
for ($i = 0; $i <= 5; $i++) {
$y = date('D', strtotime('+'.$i.' day', $today));
if ( date('Y-m-d', strtotime('+'.$i.' day', $today)) == $day ) $y = 'target';
echo '<dl><dt class="' . mb_strtolower($y) . '"><a href="' .  home_url( '/' )  . '/schedule/?works=' . date('Y-m-d', strtotime('+'.$i.' day', $today)) . '">' . strtoupper(date('n/j(D)', strtotime('+'.$i.' day', $today))) . '</a></dt>';
if ( $casttime = today_schedule($id, date('Y-m-d', strtotime('+'.$i.' day', $today))) ) {
echo '<dd>';
if ($casttime['starttime'] !== '0') echo esc_html($casttime['starttime']);
echo '~';
if ($casttime['endtime'] !== '0') echo esc_html($casttime['endtime']);
echo '</dd></dl>';
} else {
echo '<dd>-</dd></dl>';
}
}
echo '</div>';
}
function today_schedule($id, $day = '') { //本日の出勤確認
$day = $day != '' ? $day : date("Y-m-d",strtotime("+3 hour"));
$day = htmlentities($day, ENT_QUOTES, 'utf-8');
$works = outschedule($day);
if ($works && $works !='rest' && array_key_exists($id, $works) ) {
return $works[$id];
} else {
return false;
}
}

single-cast.php的なファイルで

<?php singlecalendar(get_the_ID()); //スケジュール表示 ?>

こんな感じで読み込んでください。

TOPページ等に本日の出勤キャストを表示したい

通常の風俗サイトだと、TOPページに本日の出勤キャストを表示したりしているものですよね。今回そのやり方についてコメントがありましたので、ココで解説してみたいと思います。
本日の出勤情報を表示するには、このページでご説明しているものを上手く組み合わせてくれれば出来るので、とりあえずソースを書いておきます。

下記のような関数をfunction.php的なファイルに追加して、

//出勤スケジュール
function outschedule($day) {  //DBから該当の日付のデータを取得
global $wpdb;
$table_name = $wpdb->prefix . 'krc_schedules';
$schedules = $wpdb->get_var(
$wpdb->prepare("SELECT work FROM $table_name WHERE day = %s AND status = %d", $day, 0)
);
$works = unserialize($schedules);
return  $works;  //配列にして返す
}
function todaysCastHtml ($day = '') { //本日の出勤
$time9 = 9 - 6;//6時に次の日のスケジュールに切り替わる仕様
$day = $day != '' ? $day : date("Y-m-d",strtotime("+".$time9." hour"));
$works = outschedule($day);
addSchedules($works);
}
function addSchedules($works) {

$schedule = 'schedule';

if (!$works) {
//予定がない場合
echo '<br>';
} else if ( $works !='rest' ) {
echo '<div class="clearfix">';

$works_array = array();
foreach($works as $id => $val){
$works_array[$val["s_order"]] = array(
'id'=> $id,
'time' => $val
);
}
ksort($works_array);
foreach ($works_array as $id => $work) {
$args = array(
'post_type' => 'cast',
'post__in' => array($work['id']),
'orderby' => 'post__in'
);
//$test =
query_posts($args);
//printR($test);
while ( have_posts() ) : the_post();
set_query_var( 'schedule', $work['time'] );
get_template_part( 'content', 'castlist' ); //content-castlist.phpは用意しておいて下さい。
endwhile;
wp_reset_query();
}
echo '</div>';
} else {
//休み
echo '<br>';
}
}

front-page.php等で、下記のように関数を呼び出して下さい。

<?php todaysCastHtml() ?>

こんな感じでfunction.phpに書いた関数を呼び出して使用してみて下さい。
不明点はコメントからご連絡下さい!

TOPページ等に新人キャストのみを表示したい

TOPページで、新人のキャストのみを抜粋して表示したいって事風俗サイトではあるかもしれませんよね。今回そういうコメントが有りましたので、この機会にそのソースも紹介しておきたいと思います。

下記のような関数をfunction.php的なファイルに追加して、

//新人キャスト表示
function outNewType () {
$args = array(
'post_type' => 'cast',
'posts_per_page' => -1,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'krc_new',
'field' => 'slug',
'terms' => "新人",
)
)
);
query_posts($args);
if ( have_posts() ) :
echo '<div class="clearfix">';
while ( have_posts() ) : the_post();
get_template_part( 'content', 'castlist' ); //content-castlist.phpは用意しておいて下さい。
endwhile;
echo '</div>';
endif;
wp_reset_query();
}

front-page.php等で、下記のように関数を呼び出して下さい。

<?php outNewType() ?>

こんな感じでfunction.phpに書いた関数を呼び出して使用してみて下さい。
不明点はコメントからご連絡下さい!

プラグインページはコチラ

風俗サイト用:在席キャスト管理WordPressプラグイン

まとめ

やっぱり投げっぱなしですかね??
とりあえず風俗用のキャスト管理って意外と需要があったりしますので、役に立つかなと思ったのですが、やっぱりそこら辺に普通にあるプラグインって凄いんだなと改めて感じますね・・・
プラグイン設置しただけでファイルに触らせないで事をなしちゃったりしますしね。
でもカッチリ簡単であればあるほどカスタマイズというか応用が出来なくなっちゃいますし・・・まぁフックとかちゃんと用意されているようなプラグインであればカスタマイズも可能ですけどね。
汎用的に作るのってホント大変ですね…汗

著者