最近使ったWordPressの小技

この記事はGEEK Inc. Advent Calendar 2017の12日目の記事となります。

マークアップエンジニアの深坂と申します。
12月でGEEKに入社してちょうど1年になりました。
先輩方に助けられながらも日々頑張っています。どうぞ宜しくお願いいたします!

早速今回のテーマについてなのですが、
タイトル通り最近あったWordPress案件で使った小技?knowledge?について書いていこうと思います。

※以下、カスタム投稿を「event」・紐付けるカスタムタクソノミーを「event-cat」だと仮定します。

環境ごとにパスを切り替える(グローバル変数の定義)

やりたいこと

外部リンクを設定している箇所があり、そこをステージング環境の場合と本番環境の場合でリンク先を分けたい。
(わかりやすい見出しが思いつきませんでした・・・)

やり方

グローバル変数を作成し、分岐を設定する。

functions.php

<?php 
function global_variables() {
    // グローバル変数を定義
    global $global_external_url;

    // 現在のディレクトリを含まないURLを取得
    $current_url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER["HTTP_HOST"];
    // 本番環境 外部リンクURL
    $prod_external_url = 'https://external.jp';
    // ステージング環境 wpサイトURL
    $stg_wp_url = 'https://stg.wp.jp';
    // ステージング環境 外部リンクURL
    $stg_external_url = 'https://stg.external.jp';

    // 本番環境の場合の外部リンクURLをデフォルトに設定
    $global_external_url = $prod_external_url;

    // ステージング環境の場合の外部リンクURLを設定
    if ( $current_url == $stg_wp_url ) {
        $global_external_url = $stg_external_url;
    }

}
add_action( 'after_setup_theme', 'global_variables' );
?>

上記設定後、使用したいページで

<?php 
// グローバル変数 読み込み
global $global_external_url;
?>

<a href="<?php echo $global_external_url; ?>/news/">外部リンクお知らせページ</a>

こんな感じで使えます。
https://wp.jp/hoge/の場合https://external.jp/news/がリンク先になり、
https://stg.wp.jp/hoge/の場合https://stg.external.jp/news/がリンク先になる感じです。

スラッグにマルチバイト文字を入れた際・空だった際の設定

やりたいこと

更新するクライアントに向けた設定。

管理画面からカスタムタクソノミーを新規追加する際に、
スラッグの部分に日本語が入力されたらそれを英数文字列に自動で修正するように
入力されていなかった場合自動で入力されるようにしたい。

やり方

functions.php

<?php 
function post_taxonomy_auto_slug( $term_id ) {
    $tax = str_replace( 'create_', '', current_filter() );
    $term = get_term( $term_id, $tax );
    if ( preg_match( '/(%[0-9a-f]{2})+/', $term->slug ) ) {
        $args = array(
            'slug' => $term->taxonomy . '-' . $term->term_id
        );
        wp_update_term( $term_id, $tax, $args );
    }
}
add_action( 'create_event-cat', 'post_taxonomy_auto_slug' );
?>

add_actionの第一引数の部分のcreate_以降の所をカスタムタクソノミー名に変えればOKです。
今回の例だと「event-cat-2」みたいな感じで設定されます。最後の数字はタームIDです。

カスタムタクソノミーが選択されていなかったらエラー表示

やりたいこと

更新するクライアントに向けた設定。

管理画面からカスタム投稿で記事を追加・編集する際に、
カスタムタクソノミーが設定されていなかったらアラートを出す。

やり方

functions.php

<?php 
function category_check_alert() {
?>
    <script type="text/javascript">
        jQuery(document).ready(function($) {
            if ('event' == $('#post_type').val()) {
                // 更新または下書き保存を押したとき
                $("#post").submit(function(e) {
                    if ($("#taxonomy-event-cat input:checked").length < 1) {
                        alert('イベントのカテゴリーを選択してください');
                        $('.spinner').hide();
                        $('#publish').removeClass('button-primary-disabled');
                        $('#taxonomy-event-cat').focus();
                        return false;
                    }
                });
            }
        });
    </script>
<?php 
}
add_action( 'admin_head-post-new.php', 'category_check_alert' ); // 新規投稿画面
add_action( 'admin_head-post.php', 'category_check_alert' ); // 投稿編集画面
?>

やりたいこと

記事ページ(single.php)内に自身の記事URLのQRコードを表示する。

やり方

簡単です。コピペでそのまま使えると思います。

single.php

<?php
$page_url = get_permalink();
$qr_url = urlencode($page_url);
?>
<img src="https://chart.googleapis.com/chart?cht=qr&chs=200x200&chco=000000&chl=<?php echo $qr_url ?>" alt="<?php the_title(); ?>">

chs=の値でサイズ、chco=の値でカラーコードを変えられます。

とりあえずこのぐらいで終わります。
どこかで他のknowledgeも紹介出来たらと思います。

次回は14日担当の佐々木さんです。
宜しくお願いいたします。

投稿者プロフィール

GEEKstaff
GEEKstaff
株式会社GEEKの制作チームです。
Web業界の気になるニュースのまとめと、制作に役立つ記事を投稿しています
このエントリーをはてなブックマークに追加
はてなブックマーク - 最近使ったWordPressの小技
Facebook にシェア
[`evernote` not found]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です