ASITIS

ブログ用のメモブログ

WordPressで現在使用している投稿タイプを取得する

デフォルトの投稿タイプ

<?php get_post_types(Array('public' => true, '_builtin' => true)); ?>

現在使用しているカスタム投稿タイプのみを取得

<?php get_post_types(Array('public' => true, '_builtin' => false)); ?>

現在使用している投稿タイプ全てを取得

<?php get_post_types(Array('public' => true)); ?>

WordPressのbody_class()から不要なclass名を削除する方法

function _remove_body_class( $wp_classes, $extra_classes )
{
// templateが付いているclass名か数字が付いているclass名をまとめて削除
$wp_classes = preg_grep( "/template|\d/", $wp_classes, PREG_GREP_INVERT );
return array_merge( $wp_classes, (array) $extra_classes );
}
add_filter( 'body_class', '_remove_body_class' , 10, 2 );

現在のページでカテゴリー名またはタクソノミー名を取得する方法

ループ内でカテゴリー名またはタクソノミー名を取得する方法。

ループ外は

// $taxs = get_the_terms($post->ID, $taxonomy);
$taxs = get_terms($taxonomy);

に変更すれば取得可能。

// 現在のカテゴリー(タクソノミー)名を取得
function the_cattax_names($taxonomy = 'category', $before = '', $between = '', $after = ''){
  echo get_cattax_names($taxonomy, $before, $between, $after);
}
function get_cattax_names($taxonomy = 'category', $before = '', $between = '', $after = ''){
  global $post;
  $str = '';

  $taxs = get_the_terms($post->ID, $taxonomy);
  if(!is_wp_error($taxs) && $taxs):
    $value = '';
    $first = true;
    foreach($taxs as $tax):
      $value.= ($first == false? $between: '').$tax->name;
      $first = false;
    endforeach;
    $str = $before.$value.$after;
  endif;
  return $str;
}

リンク付きで表示

// 現在のカテゴリー(タクソノミー)名をリンク付きで取得
function the_cattax_links($taxonomy = 'category', $before = '', $between = '', $after = ''){
  echo get_cattax_links($taxonomy, $before, $between, $after);
}
function get_cattax_links($taxonomy = 'category', $before = '', $between = '', $after = ''){
  global $post;
  $str = '';

  $taxs = get_the_terms($post->ID, $taxonomy);
  if(!is_wp_error($taxs) && $taxs):
    $value = '';
    $first = true;
    foreach($taxs as $tax):
      $value.= ($first == false? $between: '').'<a href="'.get_tag_link($tax->"term_id).'">'.$tax->name.'</a>';
      $first = false;
    endforeach;
    $str = $before.$value.$after;
  endif;
  return $str;
}

ループ内でカテゴリー名またはタクソノミー名を最初の一つだけ取得する方法。

// 現在の親カテゴリー(タクソノミー)名を最初の一つだけ取得
function the_cattax_name($taxonomy = 'category', $before = '', $after = ''){
  echo get_cattax_name($taxonomy, $before, $after);
}
function get_cattax_name($taxonomy = 'category', $before = '', $after = ''){
  global $post;
  $str = '';

  $taxs = get_the_terms($post->ID, $taxonomy);
  if(!is_wp_error($taxs) && $taxs):
    $tax = current($taxs);
    if($tax->parent !== 0) {
      $value = array();
      foreach($taxs as $tax):
        if($tax->parent == 0) {
          $value[] = $tax;
        }
      endforeach;
      $tax = current($value);
    }
    $str = esc_html($before).esc_html($tax->name).esc_html($after);
  endif;
  return $str;
}

リンク付きで表示

// 現在の親カテゴリー(タクソノミー)名を最初の一つだけリンク付きで取得
function the_cattax_link($taxonomy = 'category', $before = '', $after = ''){
  echo get_cattax_link($taxonomy, $before, $after);
}
function get_cattax_link($taxonomy = 'category', $before = '', $after = ''){
  global $post;
  $str = '';

  $taxs = get_the_terms($post->ID, $taxonomy);
  if(!is_wp_error($taxs) && $taxs):
    $tax = current($taxs);
    if($tax->parent !== 0) {
      $value = array();
      foreach($taxs as $tax):
        if($tax->parent == 0) {
          $value[] = $tax;
        }
      endforeach;
      $tax = current($value);
    }
    $str = '<a href="'.get_tag_link($tax->"term_id).'">'.esc_html($tax->name).'</a>';
    $str = esc_html($before).esc_html($str).esc_html($after);
  endif;
  return $str;
}

フォーム用(select)都道府県テキスト、地方グループ分けあり

北海道
青森県
岩手県
宮城県
秋田県
山形県
福島県
茨城県
栃木県
群馬県
埼玉県
千葉県
東京都
神奈川県
山梨県
長野県
新潟県
富山県
石川県
福井県
静岡県
愛知県
岐阜県
三重県
滋賀県
京都府
大阪府
兵庫県
奈良県
和歌山県
鳥取県
島根県
岡山県
広島県
山口県
香川県
愛媛県
徳島県
高知県
福岡県
佐賀県
長崎県
熊本県
大分県
宮崎県
鹿児島県
沖縄県

<select name="都道府県" id="address">
  <option value="" selected="selected">選択してください</option>
  <option value="北海道">北海道</option>
  <option value="青森県">青森県</option>
  <option value="岩手県">岩手県</option>
  <option value="宮城県">宮城県</option>
  <option value="秋田県">秋田県</option>
  <option value="山形県">山形県</option>
  <option value="福島県">福島県</option>
  <option value="茨城県">茨城県</option>
  <option value="栃木県">栃木県</option>
  <option value="群馬県">群馬県</option>
  <option value="埼玉県">埼玉県</option>
  <option value="千葉県">千葉県</option>
  <option value="東京都">東京都</option>
  <option value="神奈川県">神奈川県</option>
  <option value="新潟県">新潟県</option>
  <option value="富山県">富山県</option>
  <option value="石川県">石川県</option>
  <option value="福井県">福井県</option>
  <option value="山梨県">山梨県</option>
  <option value="長野県">長野県</option>
  <option value="岐阜県">岐阜県</option>
  <option value="静岡県">静岡県</option>
  <option value="愛知県">愛知県</option>
  <option value="三重県">三重県</option>
  <option value="滋賀県">滋賀県</option>
  <option value="京都府">京都府</option>
  <option value="大阪府">大阪府</option>
  <option value="兵庫県">兵庫県</option>
  <option value="奈良県">奈良県</option>
  <option value="和歌山県">和歌山県</option>
  <option value="鳥取県">鳥取県</option>
  <option value="島根県">島根県</option>
  <option value="岡山県">岡山県</option>
  <option value="広島県">広島県</option>
  <option value="山口県">山口県</option>
  <option value="徳島県">徳島県</option>
  <option value="香川県">香川県</option>
  <option value="愛媛県">愛媛県</option>
  <option value="高知県">高知県</option>
  <option value="福岡県">福岡県</option>
  <option value="佐賀県">佐賀県</option>
  <option value="長崎県">長崎県</option>
  <option value="熊本県">熊本県</option>
  <option value="大分県">大分県</option>
  <option value="宮崎県">宮崎県</option>
  <option value="鹿児島県">鹿児島県</option>
  <option value="沖縄県">沖縄県</option>
</select>
<select name="都道府県" id="address">
  <option value="" selected="selected">選択してください</option>
  <optgroup label="北海道地方">
    <option value="北海道">北海道</option>
  </optgroup>
  <optgroup label="東北地方">
    <option value="青森県">青森県</option>
    <option value="岩手県">岩手県</option>
    <option value="宮城県">宮城県</option>
    <option value="秋田県">秋田県</option>
    <option value="山形県">山形県</option>
    <option value="福島県">福島県</option>
  </optgroup>
  <optgroup label="関東地方">
    <option value="茨城県">茨城県</option>
    <option value="栃木県">栃木県</option>
    <option value="群馬県">群馬県</option>
    <option value="埼玉県">埼玉県</option>
    <option value="千葉県">千葉県</option>
    <option value="東京都">東京都</option>
    <option value="神奈川県">神奈川県</option>
  </optgroup>
  <optgroup label="中部地方">
    <option value="山梨県">山梨県</option>
    <option value="長野県">長野県</option>
    <option value="新潟県">新潟県</option>
    <option value="富山県">富山県</option>
    <option value="石川県">石川県</option>
    <option value="福井県">福井県</option>
    <option value="静岡県">静岡県</option>
    <option value="愛知県">愛知県</option>
    <option value="岐阜県">岐阜県</option>
  </optgroup>
  <optgroup label="近畿地方">
    <option value="三重県">三重県</option>
    <option value="滋賀県">滋賀県</option>
    <option value="京都府">京都府</option>
    <option value="大阪府">大阪府</option>
    <option value="兵庫県">兵庫県</option>
    <option value="奈良県">奈良県</option>
    <option value="和歌山県">和歌山県</option>
  </optgroup>
  <optgroup label="中国地方">
    <option value="鳥取県">鳥取県</option>
    <option value="島根県">島根県</option>
    <option value="岡山県">岡山県</option>
    <option value="広島県">広島県</option>
    <option value="山口県">山口県</option>
  </optgroup>
  <optgroup label="四国地方">
    <option value="香川県">香川県</option>
    <option value="愛媛県">愛媛県</option>
    <option value="徳島県">徳島県</option>
    <option value="高知県">高知県</option>
  </optgroup>
  <optgroup label="九州地方">
    <option value="福岡県">福岡県</option>
    <option value="佐賀県">佐賀県</option>
    <option value="長崎県">長崎県</option>
    <option value="熊本県">熊本県</option>
    <option value="大分県">大分県</option>
    <option value="宮崎県">宮崎県</option>
    <option value="鹿児島県">鹿児島県</option>
    <option value="沖縄県">沖縄県</option>
  </optgroup>
</select>

WordPressのカテゴリーを投稿順に並べる

カテゴリーを投稿の新しい順に並べたかったので、少し無理矢理感もありますが元々ある配列array_multisort();でソートし直す。

希望どうりには動いてます。

※カスタム分類、カスタム投稿にも対応

function new_taxonomy_array($taxonomy = 'category') {
  $taxs = get_terms($taxonomy,
    array(
      'orderby'           => 'name',
      'order'             => 'ASC',
      'hide_empty'        => false,
      'exclude'           => array(1),
      'exclude_tree'      => array(),
      'include'           => array(),
      'number'            => '',
      'fields'            => 'all',
      'slug'              => '',
      'parent'            => '',
      'hierarchical'      => true,
      'child_of'          => 0,
      'childless'         => false,
      'get'               => '',
      'name__like'        => '',
      'description__like' => '',
      'pad_counts'        => false,
      'offset'            => '',
      'search'            => '',
      'cache_domain'      => 'core'
      )
    );
  $new_array = array();
  if(!is_wp_error($taxs) && count($taxs)):
    foreach($taxs as $tax):
      $taxPosts = get_posts(
        array(
          'posts_per_page'   => -1,
          'offset'           => 0,
          'category'         => '',
          'category_name'    => '',
          'tax_query'        => array(
            array (
              'taxonomy' => $taxonomy,
              'field'    => 'slug',
              'terms'    => $tax->slug
              )
            ),
          'orderby'          => 'post_date',
          'order'            => 'DESC',
          'include'          => '',
          'exclude'          => '',
          'meta_key'         => '',
          'meta_value'       => '',
          'post_type'        => 'post',
          'post_mime_type'   => '',
          'post_parent'      => '',
          'author'           => '',
          'post_status'      => 'publish',
          'suppress_filters' => true
          )
        );

      if($taxPosts):
        $new_array[] = array(
            'update'=> (isset($taxPosts[0]->post_date)? $taxPosts[0]->post_date: '0'),
            'title' => $tax->name,
            'link'  => get_category_link($tax->term_id),
            'id'    => $tax->term_id,
            'count' => count($taxPosts)
          );
        // ソートしなおし
        foreach ((array)$new_array as $key => $value) {
          $sort[$key] = $value['update'];
        }
        array_multisort($sort, SORT_DESC, $new_array);
      endif;
    endforeach; wp_reset_postdata();
  endif;

  return $new_array;
}

出力方法

$_tax_array = new_taxonomy_array('category');
if($_tax_array):
  foreach((array)$_tax_array as $key => $value){
    echo $value['update'];
    echo $value['title'];
    echo $value['link'];
    echo $value['id'];
    echo $value['count'];
  endforeach;
endif;

WordPressマルチサイトでデータベース・テーブルを共有する方法

本当はカテゴリーだけとか、特定のタクソノミーだけとかにしたかったがどうやら無理っぽい

add_action('init', 'switch_teble');
add_action('switch_blog', 'switch_teble');
function switch_teble () {
  global $wpdb;

  // 使用したいサイトのテーブルに書き換え
  // $wpdb->base_prefix."_2_terms" とか $wpdb->base_prefix."_3_terms" とか参照したいサイトIDを追加

  // メインサイト
  if(is_main_site()) {

  //  子サイト
  } else {
    $wpdb->commentmeta = $wpdb->base_prefix."commentmeta";
    $wpdb->comments = $wpdb->base_prefix."comments";
    $wpdb->links = $wpdb->base_prefix."links";
    $wpdb->options = $wpdb->base_prefix."options";
    $wpdb->postmeta = $wpdb->base_prefix."postmeta";
    $wpdb->posts = $wpdb->base_prefix."posts";
    $wpdb->termmeta = $wpdb->base_prefix."termmeta";
    $wpdb->terms = $wpdb->base_prefix."terms";
    $wpdb->term_relationships = $wpdb->base_prefix."term_relationships";
    $wpdb->term_taxonomy = $wpdb->base_prefix."term_taxonomy";
  }
}