wordpressで管理者以外カスタム投稿のメニューやサブメニューを非表示にする

Filed under: functions.php — kdcs @ 25年5月10日 土曜日

管理者以外はカスタム投稿タイプのサブメニューを非表示にしたい場合(新規投稿など出来なくする)

例:カスタム投稿タイプのスラッグは「hogehoge」でメニューはコメントアウトで表示させ、サブメニューを非表示にする記述

functions.php

// カスタム投稿タイプ「広告バナー」のサブメニューを非表示にする(管理者以外) ------------
function remove_custom_post_type_submenu() {
    if (!current_user_can('manage_options')) { // 管理者以外
//      remove_menu_page('edit.php?post_type=hogehoge'); // カスタム投稿タイプのメニューを削除
        remove_submenu_page('edit.php?post_type=hogehoge', 'post-new.php?post_type=hogehoge'); // 新規追加サブメニューを削除
    }
}
add_action('admin_menu', 'remove_custom_post_type_submenu', 100);

その他、全体的に管理者以外、使用しないメニューを非表示にする記述に追加でカスタム投稿タイプのメニューの非表示も行える

例:広告バナー(advertise)と商品管理(items)のメニュー非表示の記述を最下部に入れる

functions.php

// 使用しないメニューを非表示にする ------------------------------------------------------
function remove_admin_menus() {
 
    // level10以外のユーザーの場合
    if (!current_user_can('level_10')) {
 
        global $menu;
        global $submenu;
 
        // unsetで非表示にするメニューを指定
        unset($menu[2]);  // ダッシュボード
//      unset($menu[5]);  // 投稿
      unset($menu[10]); // メディア
//      unset($menu[20]); // 固定ページ
        unset($submenu['edit.php?post_type=page'][10]); //固定ページのサブメニュー
        unset($menu[25]); // コメント
        unset($menu[60]); // 外観
        unset($menu[65]); // プラグイン
        unset($menu[70]); // ユーザー
        unset($menu[75]); // ツール
        unset($menu[80]); // 設定
 remove_menu_page('wpcf7'); //コンタクトフォーム7
 remove_submenu_page( 'edit.php?post_type=advertise', 'post-new.php?post_type=advertise' ); //広告バナー新規作成
// remove_menu_page('edit.php?post_type=items', 'edit-tags.php?taxonomy=items_category&post_type=items'); //商品管理 カスタム投稿 タクソノミー
    }
}
add_action('admin_menu', 'remove_admin_menus');

ContactForm7のお問い合わせでURL入力を禁止にする方法

Filed under: contactform7,functions.php — kdcs @ 25年3月21日 金曜日

バリデーションを設定する

※お問い合わせ内容がテキストエリア[your-message*]と必須になっている場合(*が付いている)
「wpcf7_validate_textarea*」こちらにも*を付けることによって指定できる。
未入力の場合は指定したエラーメッセージ、例えば「必須項目に入力してください。」、URLを入力した場合「URLの入力はできません」というエラーメッセージを出す。
URLはhttps、httpどちらもエラーになる。

functions.php

add_filter('wpcf7_validate_textarea*', 'custom_validate_no_urls', 20, 2);

function custom_validate_no_urls($result, $tag) {
    $name = $tag->name;
    $value = isset($_POST[$name]) ? $_POST[$name] : '';

    if (preg_match('/https?:\/\/[^\s]+/', $value)) {
        $result->invalidate($tag, 'URLの入力はできません');
    }
    return $result;
}

【未検証】Contact Form 7でURLを入力するとエラーメッセージを出す

Filed under: contactform7,functions.php — kdcs @ 25年3月7日 金曜日

お問い合わせ内容の入力にURLが含まれる場合はエラーメッセージを出す。

functions.php

function wpcf7_validate_custom($result, $tag) {
    $value = esc_attr($_POST['your-message']);
    if (!empty($value)) {
        if (preg_match('/https?:\/\/[\w\/:%#\$&\?\(\)~\.=\+\-]+/', $value)) {
            $result->invalidate($tag, 'URLは入力できません');
        }
    }
    return $result;
}
add_filter('wpcf7_validate_textarea', 'wpcf7_validate_custom', 10, 2);

WordPressの集中執筆モードをデフォルトでOFFにする方法

Filed under: functions.php,wordpress — kdcs @ 25年2月28日 金曜日

投稿記事を書く時、通常の運用では集中執筆モードがデフォルトでオンになっており、表示オプションで集中執筆モードのチェックを外してオフにしても次にログインするとオンに戻ってしまう。
これをデフォルトではオフの状態にする方法。

functions.php
その1(こちらの方が記述がシンプル)
このコードは、エディターの自動拡張を無効にします。

function disable_editor_expand() {
    if ( is_admin() ) {
        wp_add_inline_script(
            'wp-blocks',
            'wp.data.dispatch("core/edit-post").removeEditorPanel("editor-post-publish-panel");'
        );
    }
}
add_action('admin_enqueue_scripts', 'disable_editor_expand');

その2(ログインするたびにオフにする記述)

/* ---------------------------------------------------------------------------------------
   ◆◆◆ 集中執筆モードをデフォルトでOFFにする ###########################################
------------------------------------------------------------------------------------------*/
function do_disable_editor_expand( $user_id ) {
    global $wpdb;
    $meta_key = $wpdb->prefix . 'user-settings';
    $_prev_user_settings = get_user_meta( $user_id, $meta_key, true );
    $_user_settings = explode( '&', $_prev_user_settings );
    $_is_override = false;

    foreach( $_user_settings as $_i => $_buff ) {
        list( $_key, $_val ) = explode( '=', $_buff );
        if ( 'editor_expand' === $_key ) {
            $_val = 'off';
            $_is_override = true;
        }
        $_user_settings[$_i] = $_key . '=' . $_val;
    }

    if ( ! $_is_override ) {
        $_user_settings[] = 'editor_expand=off';
    }

    update_user_meta( $user_id, $meta_key, implode( '&', $_user_settings ), $_prev_user_settings );
}

function custom_login_redirect( $redirect_to, $requested_redirect_to, $user ) {
    if ( ! is_wp_error( $user ) ) {
        global $user;
        if ( isset( $user->ID ) ) {
            do_disable_editor_expand( $user->ID );
        }
    }
    return $redirect_to;
}
add_filter( 'login_redirect', 'custom_login_redirect', 10, 3 );

function custom_user_register( $user_id ) {
    do_disable_editor_expand( $user_id );
}
add_action( 'user_register', 'custom_user_register' );

Contact Form7のcssとjavascriptの読み込みを制御する

Filed under: contactform7,functions.php,wordpressプラグイン — kdcs @ 24年9月13日 金曜日

確認時のContact Form7のバージョンは5.9.8
プラグインが吐き出すcssについては以前からfunctions.phpの「wp_head関連 wp_headでプラグインのcssを読み込ませない」で対応していたが、最新バージョンのContactForm7ではwp_footerに出力されるjavascriptが多くなっている。
全ページに出力されるため、必要のないページには読み込ませない方法。(公式サイトより)

functions.php

// contactform7関連 wp_headでcss、wp_footerでjavascriptを読み込ませない-------------------
// ※cssはwp_head関連の「cssを読み込ませない」で対応中------------------------------------
add_filter( 'wpcf7_load_js', '__return_false' );
add_filter( 'wpcf7_load_css', '__return_false' );

footer.php
お問い合わせ(contact)来店予約(reservation)の場合

<?php if (is_page('reservation')||is_page('contact')): ?>
<?php
    if ( function_exists( 'wpcf7_enqueue_scripts' ) ) {
        wpcf7_enqueue_scripts();
    }
    if ( function_exists( 'wpcf7_enqueue_styles' ) ) {
        wpcf7_enqueue_styles();
    }
?>
<?php endif; ?>

基本的にcssはwp_head関連の「cssを読み込ませない」で対応中なのでfooter.phpはスクリプトの記述だけでよい

サイト内検索

カテゴリー

最近の投稿

↑上に戻る