サポート » プラグイン » EXEC PHPを使わずに固定ページ内にPHPを書く方法

  • EXEC PHPを使うのは余りよろしくないということで以下の方法でチャレンジをしようと思っています。

    実装したいコード

    <?php if (wp_is_mobile()) :?>
    	スマートフォン向けコンテンツ
    <?php else: ?>
    	PC向けコンテンツ
    <?php endif; ?>

    EXEC PHPの代わりに使うプラグイン

    Post Snippet
    https://wordpress.org/plugins/post-snippets/

    で、実際にどう設定したら良いのかよくわからないのですが教えて頂けますか。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • モデレーター Seisuke Kuraishi (tenpura)

    (@tenpura)

    Post Snippet も結局 eval 関数を使っているので「EXEC PHPを使うのは余りよろしくない」がそこを指しているならば同じくよろしくないということになるかと思います。セキュリティリスクを気にされるのであれば 子テーマ を作って直接 PHP ファイルにコーディングするのがよろしいかと思います。

    モデレーター Okamoto Hidetaka

    (@hideokamoto)

    「Content Template Engine」であればTwigを間に噛ませるのでeval使う系よりは良いかなと思います。
    https://ja.wordpress.org/plugins/content-template-engine/

    もっともUA判定の関数はデフォルトで対応していない様子なので、
    カスタマイズしないといけない様子ですが・・・
    https://github.com/miya0001/content-template-engine/wiki/Functions
    https://github.com/miya0001/content-template-engine/wiki/Develop%20your%20custom%20extension

    子テーマ化してのPHP記述か、ショートコードやウィジェットを使っての対応になりそうですね。

    WordPressのショートコードを自作してみる | webOpixel

    等を参考に、内部にコンテンツを挿入できるショートコードが作成できますので、テーマに直接PHPを書くのが仕様上難しければ、検討してみてください。

    Honda

    (@rocketmartue)

    <?php if (wp_is_mobile()) :?>
    	スマートフォン向けコンテンツ
    <?php else: ?>
    	PC向けコンテンツ
    <?php endif; ?>

    このコードを以下のようにスマホ、PC、それぞれ別々に分けます。

    <?php if (wp_is_mobile()) :?>
    	スマートフォン向けコンテンツ
    <?php endif; ?>
    <?php if (!wp_is_mobile()) :?>
    	PC向けコンテンツ
    <?php endif; ?>

    これをショートコードにしたものが、こちら

    記事内で以下のショートコードで囲ったコンテンツはmobileのみ閲覧可能になる
    [mobile]mobileにだけ表示します。[/mobile]

    function shortcode_mobile( $atts, $content = null) {
        if (!wp_is_mobile()) return "";
        return $content;
    }
    add_shortcode('mobile', 'shortcode_mobile');

    記事内で以下のショートコードで囲ったコンテンツはmobile以外で閲覧可能になる
    [pc]mobile以外で表示します。[/pc]

    function shortcode_pc( $atts, $content = null) {
        if (wp_is_mobile()) return "";
        return $content;
    }
    add_shortcode('pc', 'shortcode_pc');

    ただ、これだとipadやNexus 10などのタブレットもスマホ表示になってしまうので、タブレットは、PC表示でという場合は、スマホならtrue, タブレット・PCならfalseを返す is_mobile 関数を新たに設定します。

    function is_mobile(){
        if(wp_is_mobile()){
            if(preg_match('/ipad/i', $_SERVER['HTTP_USER_AGENT'])){
                $is_mobile = false;
            }
            elseif(preg_match('/Nexus 10/i', $_SERVER['HTTP_USER_AGENT'])){
                $is_mobile = false;
            }else{
                $is_mobile = true;
            }
        }else{
            $is_mobile = false;
        }
        return $is_mobile;
    }

    その上で、以下のようにするとスマホの表示と
    PC・タブレットでの表示を分けることができます。

    記事内で以下のショートコードで囲ったコンテンツはスマホのみ閲覧可能になる
    [is_mobile]スマホにだけ表示します。[/is_mobile]

    function shortcode_is_mobile( $atts, $content = null) {
        if (!wp_is_mobile()) return "";
        return $content;
    }
    add_shortcode('is_mobile', 'shortcode_is_mobile');

    記事内で以下のショートコードで囲ったコンテンツはスマホ以外で閲覧可能になる
    [is_pc]スマホ以外で表示します。[/is_pc]

    function shortcode_is_pc( $atts, $content = null) {
        if (wp_is_mobile()) return "";
        return $content;
    }
    add_shortcode('is_pc', 'shortcode_is_pc');
    モデレーター Seisuke Kuraishi (tenpura)

    (@tenpura)

    コンテンツの振り分けを行いたいだけで、特に PHP を書く必要がないのであれば、フロントエンド側でやってしまう手もあります。その方がキャッシュされたコンテンツによるトラブルなどは起こりにくいでしょう。

    デバイスの幅で振り分けることに問題がないなら CSS だけでできてしまいます。

    例: http://getbootstrap.com/css/#responsive-utilities-tests

    Zerif Lite のような Bootstrap ベースのテーマならそのままで、そうでないなら

    /*!
     * Bootstrap v3.3.6 (http://getbootstrap.com)
     * Copyright 2011-2016 Twitter, Inc.
     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
     */
    @media (max-width: 767px) {
      .hidden-xs {
        display: none !important;
      }
    }
    @media (min-width: 768px) and (max-width: 991px) {
      .hidden-sm {
        display: none !important;
      }
    }
    @media (min-width: 992px) and (max-width: 1199px) {
      .hidden-md {
        display: none !important;
      }
    }
    @media (min-width: 1200px) {
      .hidden-lg {
        display: none !important;
      }
    }

    をテーマの CSS に付け足すことで下記のように書くことができるようになります(ブレークポイント等必要に応じ書き換えてください)。

    <div class="hidden-md hidden-lg">スマートフォン・タブレット向けコンテンツ</div>
    <div class="hidden-xs hidden-sm">PC 向けコンテンツ</div>

    UA のチェックが必要な場合は、以下のような JavaScript ライブラリを利用するとよいでしょう。

    https://arasatasaygin.github.io/is.js/#desktop

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「EXEC PHPを使わずに固定ページ内にPHPを書く方法」には新たに返信することはできません。