functions.phpファイルのコードのベストコレクション[終了]


332

質問または回答の左側にある上矢印をクリックして、質問および有用と思われる回答に投票してください。

現在この投稿を閲覧している他の多くの人と同様に、私はさまざまなブログ、フォーラム、ディスカッショングループを読んで、ワードプレスのスキルを学び、向上させています。過去12か月にわたって、functions.php代わりにコードをファイルに追加することにより、プラグインの使用を置き換えるという使命を担ってきました。プラグインは多くの状況で非常に有用であることに完全に同意しますが、私の経験では、プラグインが存在する場合でも使用ケースの90%で、実際にプラグインを使用すると不必要な合併症と互換性の問題が発生することが証明されました。さらに、多くの場合、そのようなプラグインは、私が必要としない、または必要としないメニューやその他の管理要素を追加しました。

たいていの場合、プラグインのコードを分析することで、必要なコードを削除し、自分のハードウェアにハードコードできることを発見しましたfunctions.php。これにより、不要な要素を含めることなく、必要な機能を正確に提供することができました。

したがって、この投稿の目的は、読者/管理者/開発者を引き付けて、あなたが便利だと思っているコードビットを共有し、テーマのfunction.phpファイルに追加してWordPressを拡張または強化することですプラグイン。

ここに回答を送信する際には、各コードビットにタイトルを付けてください。どのバージョンのワードプレスと互換性があるかを教えてください。情報を見つけたプラグインまたはソース。

私はあなたのすべての回答を楽しみにしています。もちろん、私がそれらを見つけたらいつでも私自身の新しい発見を継続的に追加していきます。


13
最初の5つの回答はOPによるものであり、質問は単一の明確な回答ではなく一連の回答を収集することを目的としているため、これはコミュニティwikiである必要があります。
EAMann

17
テーマに関連しないすべての回答は削除する必要があります。このスレッドは、不適切なコーディング手法の良い例です。
FUXIAの

17
私はために人々を奨励する方が良いと思うカスタム機能プラグインを作成する代わりに、そのテーマののfunctions.phpを使用する
イアン・ダン

3
@ NetConstructor.comページビューの純粋な数は品質の指標ではありません。特定の回答と適切なコーディング慣行を持つ特定の質問を奨励する必要があります。このスレッドは反対です。
FUXIAの

6
@ NetConstructor.com メタについて議論し、人々があなたの議論をよりよく見ることができるようにします。:)
fuxia

回答:


107

すべてのサイト設定を表示する隠し管理機能を有効にする

テスト済み: Wordpress 3.1 RC3

この小さなコードは、かなりクールなことをします。それはあなたのワードプレスサイトに関連するデータベース内にあるすべての設定の完全なリストを表示する「すべての設定」へのリンクを持つ設定メニューに追加のオプションを追加します。以下のコードは、このリンクを管理ユーザーにのみ表示し、他のすべてのユーザーに対して非表示にします。

// CUSTOM ADMIN MENU LINK FOR ALL SETTINGS
   function all_settings_link() {
    add_options_page(__('All Settings'), __('All Settings'), 'administrator', 'options.php');
   }
   add_action('admin_menu', 'all_settings_link');

開発に素晴らしい!プラグインのDBバージョンを保存するためにオプションテーブルを頻繁に使用します... phpMyAdminを使用して古いDBバージョンにリセットし、アップグレードスクリプトをテストするのは苦痛です...これは非常に簡単です !!!
EAMann

3
yoursite / wp-admin / options.php
j08691

89

ログインロゴと画像のURLリンクを変更する

テスト済み: WordPress 3.0.1

このコードを使用すると、WordPressログインページのロゴだけでなく、このロゴのhrefリンクとタイトルテキストも簡単に変更できます。

add_filter( 'login_headerurl', 'namespace_login_headerurl' );
/**
 * Replaces the login header logo URL
 *
 * @param $url
 */
function namespace_login_headerurl( $url ) {
    $url = home_url( '/' );
    return $url;
}

add_filter( 'login_headertitle', 'namespace_login_headertitle' );
/**
 * Replaces the login header logo title
 *
 * @param $title
 */
function namespace_login_headertitle( $title ) {
    $title = get_bloginfo( 'name' );
    return $title;
}

add_action( 'login_head', 'namespace_login_style' );
/**
 * Replaces the login header logo
 */
function namespace_login_style() {
    echo '<style>.login h1 a { background-image: url( ' . get_template_directory_uri() . '/images/logo.png ) !important; }</style>';
}

編集:サイトのロゴを使用してログインロゴを置き換える場合は、次を使用してその情報を動的にプルできます(WP3.5でテスト済み)。

function namespace_login_style() {
    if( function_exists('get_custom_header') ){
        $width = get_custom_header()->width;
        $height = get_custom_header()->height;
    } else {
        $width = HEADER_IMAGE_WIDTH;
        $height = HEADER_IMAGE_HEIGHT;
    }
    echo '<style>'.PHP_EOL;
    echo '.login h1 a {'.PHP_EOL; 
    echo '  background-image: url( '; header_image(); echo ' ) !important; '.PHP_EOL;
    echo '  width: '.$width.'px !important;'.PHP_EOL;
    echo '  height: '.$height.'px !important;'.PHP_EOL;
    echo '  background-size: '.$width.'px '.$height.'px !important;'.PHP_EOL;
    echo '}'.PHP_EOL;
    echo '</style>'.PHP_EOL;
}

79

検索結果にカスタム投稿タイプを含めます。

// MAKE CUSTOM POST TYPES SEARCHABLE
function searchAll( $query ) {
 if ( $query->is_search ) { $query->set( 'post_type', array( 'site', 'plugin', 'theme', 'person' )); } 
 return $query;
}
add_filter( 'the_search_query', 'searchAll' );

デフォルトでサイトのメインRSSフィードにカスタム投稿タイプを追加します。

// ADD CUSTOM POST TYPES TO THE DEFAULT RSS FEED
function custom_feed_request( $vars ) {
 if (isset($vars['feed']) && !isset($vars['post_type']))
  $vars['post_type'] = array( 'post', 'site', 'plugin', 'theme', 'person' );
 return $vars;
}
add_filter( 'request', 'custom_feed_request' );

「今すぐ」管理ダッシュボードウィジェットにカスタム投稿タイプを含める

これには、カスタム投稿タイプと、「今すぐ」ダッシュボードウィジェットの各タイプの投稿数が含まれます。

// ADD CUSTOM POST TYPES TO THE 'RIGHT NOW' DASHBOARD WIDGET
function wph_right_now_content_table_end() {
 $args = array(
  'public' => true ,
  '_builtin' => false
 );
 $output = 'object';
 $operator = 'and';
 $post_types = get_post_types( $args , $output , $operator );
 foreach( $post_types as $post_type ) {
  $num_posts = wp_count_posts( $post_type->name );
  $num = number_format_i18n( $num_posts->publish );
  $text = _n( $post_type->labels->singular_name, $post_type->labels->name , intval( $num_posts->publish ) );
  if ( current_user_can( 'edit_posts' ) ) {
   $num = "<a href='edit.php?post_type=$post_type->name'>$num</a>";
   $text = "<a href='edit.php?post_type=$post_type->name'>$text</a>";
  }
  echo '<tr><td class="first num b b-' . $post_type->name . '">' . $num . '</td>';
  echo '<td class="text t ' . $post_type->name . '">' . $text . '</td></tr>';
 }
 $taxonomies = get_taxonomies( $args , $output , $operator ); 
 foreach( $taxonomies as $taxonomy ) {
  $num_terms  = wp_count_terms( $taxonomy->name );
  $num = number_format_i18n( $num_terms );
  $text = _n( $taxonomy->labels->singular_name, $taxonomy->labels->name , intval( $num_terms ));
  if ( current_user_can( 'manage_categories' ) ) {
   $num = "<a href='edit-tags.php?taxonomy=$taxonomy->name'>$num</a>";
   $text = "<a href='edit-tags.php?taxonomy=$taxonomy->name'>$text</a>";
  }
  echo '<tr><td class="first b b-' . $taxonomy->name . '">' . $num . '</td>';
  echo '<td class="t ' . $taxonomy->name . '">' . $text . '</td></tr>';
 }
}
add_action( 'right_now_content_table_end' , 'wph_right_now_content_table_end' );

この回答の最後のスニペットについて。投稿タイプごとにこれらを手動で追加していたので、これは素晴らしい追加です。これに関する唯一の問題は、デフォルトの「カテゴリ」および「タグ」エントリの後にデータを追加することです。回答を更新して、デフォルトの「カテゴリ」または「タグ」を下に移動したり、手動で追加できるように削除したりできますか?
NetConstructor.com

@ NetConstructor.com私はあなたの要求を理解していないと思います。もしそうなら、それはやや難しいことだと思うし、今どうやってそれをするかを理解する時間が本当にない。
-jaredwilli

検索結果のカスタムポストタイプを含める-私は推測、今あなたがこれを行うことができますexclude_from_searchのPARAM register_post_type...
KrzysiekDróżdż

78

ADMINユーザーを除くすべてのユーザーの更新通知を削除する

テスト済み: Wordpress 3.0.1

このコードは、アップデートが利用可能になったときに「admin」以外のユーザーがワードプレスから通知されないようにします。

// REMOVE THE WORDPRESS UPDATE NOTIFICATION FOR ALL USERS EXCEPT SYSADMIN
   global $user_login;
   get_currentuserinfo();
   if ($user_login !== "admin") { // change admin to the username that gets the updates
    add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
    add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
   }

(ユーザー 'admin'だけではなく)管理ユーザーに対してのみ更新通知を表示するようにバージョンを変更しました:

// REMOVE THE WORDPRESS UPDATE NOTIFICATION FOR ALL USERS EXCEPT SYSADMIN
       global $user_login;
       get_currentuserinfo();
       if (!current_user_can('update_plugins')) { // checks to see if current user can update plugins 
        add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
        add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
       }

8
これは理想とはほど遠いものです。管理者のログインがデフォルトの「管理者」のままである場合にのみ機能しますが、セキュリティ上の理由からそうではありません。代わりに、ユーザーにメッセージを表示してもらいたい特定の機能を確認する必要があります。
jerclarke

1
すなわちif(!current_user_can( 'manage_options')){... add_filter ...}-ダブルコメントについては申し訳ありませんが、
Enterキーを押すと

そのため、管理者のユーザー名を変更できるコードにコメントを追加しました。どのように改善/書き直しますか?
NetConstructor.com

最良の方法は、グローバルな$ user_loginとget_currentuserinfo()を削除し、代わりにif節でcurrent_user_canを使用することです。これは3行ではなく1行であり、標準的な方法です。メッセージをACTするために必要な特定の機能を確認できます。この場合、「update_core」と「update_plugins」があります。
jerclarke

2
so:if(!current_user_can( 'update_plugins')){/ * REMOVE MESSAGES * /}
jerclarke

72

Google CDNからjQueryをロードする

テスト済み: Wordpress 3.0.1

// even more smart jquery inclusion :)
add_action( 'init', 'jquery_register' );

// register from google and for footer
function jquery_register() {

if ( !is_admin() ) {

    wp_deregister_script( 'jquery' );
    wp_register_script( 'jquery', ( 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js' ), false, null, true );
    wp_enqueue_script( 'jquery' );
}
}

セキュリティのためにWordPressバージョン情報を削除する

テスト済み: Wordpress 3.0.1

// remove version info from head and feeds
function complete_version_removal() {
    return '';
}
add_filter('the_generator', 'complete_version_removal');

フロントエンドのコメントへのスパムの追加とリンクの削除

テスト済み: Wordpress 3.0.1

これにより、スパムを追加したりリンクを削除したりすることで、フロントエンドからコメントを管理しやすくなります。**

// spam & delete links for all versions of wordpress
function delete_comment_link($id) {
    if (current_user_can('edit_post')) {
        echo '| <a href="'.get_bloginfo('wpurl').'/wp-admin/comment.php?action=cdc&c='.$id.'">del</a> ';
        echo '| <a href="'.get_bloginfo('wpurl').'/wp-admin/comment.php?action=cdc&dt=spam&c='.$id.'">spam</a>';
    }
}

RSSフィードへの公開投稿を遅らせる

テスト済み: Wordpress 3.0.1

最後に、RSSフィードへの投稿を10〜15分間遅らせるのが好きです。なぜなら、テキストには常に少なくとも2、3のエラーが見つかるからです。他の用途は、RSSリーダーにコンテンツをプッシュする前に、1日または1週間コンテンツをサイト専用にする場合です。

// delay feed update
function publish_later_on_feed($where) {
    global $wpdb;

    if (is_feed()) {
        // timestamp in WP-format
        $now = gmdate('Y-m-d H:i:s');

        // value for wait; + device
        $wait = '10'; // integer

        // http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_timestampdiff
        $device = 'MINUTE'; // MINUTE, HOUR, DAY, WEEK, MONTH, YEAR

        // add SQL-sytax to default $where
        $where .= " AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, '$now') > $wait ";
    }
    return $where;
}
add_filter('posts_where', 'publish_later_on_feed');

私の投稿のソース:wpengineer.com/320/publish-the-feed-later-詳細情報
-bueltge

1
ジェネレーターフィルターを削除することもできますremove_action('wp_head', 'wp_generator');
。– Gipetto

25
ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.jsはわずか1時間で有効期限が切れます。ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.jsのような完全なバージョン情報を常に使用してください。1年後に期限が切れます。
FUXIAの

5
「セキュリティのためにWordPressのバージョン情報を削除する」コードは、実際にはサイトのセキュリティを高めるために何もしません。サイトで使用されているWPバージョンの公開さえ停止しません。
ジョセフスコット

1
ジョセフではありません。WordPressのバージョンが公開されている場合は、古いバージョンを実行しているかどうかを確認できるため、脆弱性が公開されます。すべてのWordPressインストールからそれを削除することは常に良い決定です。個人的には、セキュリティの問題であるため、そもそもなぜそこに置いたのかさえわかりません。
ジェレミー

58

DBの膨張を回避するために、ポストリビジョンの最大数を設定します。

テスト済み: Wordpress 3.0.1

デフォルトは無限です。これにより、最後の5つの編集のみを記憶するように設定されます。

/**
 * Set the post revisions unless the constant was set in wp-config.php
 */
if (!defined('WP_POST_REVISIONS')) define('WP_POST_REVISIONS', 5);

FWIWには、コーデックスページwp-config.phpを編集する上で設定できる定数に関する素晴らしいアイデアが山ほどあります。


これは投稿タイプごとに設定できますか?
NetConstructor.com

wp_save_post_revision()での使用法を見ると、投稿タイプに基づいて区別する方法はないようです。値にはフィルターなどはありませんが、おそらくあるはずです。
jerclarke

ジェレミーに感謝-他の誰かに、あなたがこれを行う方法を知っているなら、ここに投稿してください。
NetConstructor.com

1
個人的には10を好む。それは2倍だとわかっているが、リビジョンが必要なときは常に5よりも古い
janw

56

Wordpressプロファイリングツール

プロファイリングツールを別のファイルに追加し、必要に応じてfunctions.phpから追加します。

<?php
if ( !defined('SAVEQUERIES') && isset($_GET['debug']) && $_GET['debug'] == 'sql' )
    define('SAVEQUERIES', true);
if ( !function_exists('dump') ) :
/**
 * dump()
 *
 * @param mixed $in
 * @return mixed $in
 **/

function dump($in = null) {
    echo '<pre style="margin-left: 0px; margin-right: 0px; padding: 10px; border: solid 1px black; background-color: ghostwhite; color: black; text-align: left;">';
    foreach ( func_get_args() as $var ) {
        echo "\n";
        if ( is_string($var) ) {
            echo "$var\n";
        } else {
            var_dump($var);
        }
    }
    echo '</pre>' . "\n";
    return $in;
} # dump()
endif;

/**
 * add_stop()
 *
 * @param mixed $in
 * @param string $where
 * @return mixed $in
 **/

function add_stop($in = null, $where = null) {
    global $sem_stops;
    global $wp_object_cache;
    $queries = get_num_queries();
    $milliseconds = timer_stop() * 1000;
    $out =  "$queries queries - {$milliseconds}ms";
    if ( function_exists('memory_get_usage') ) {
        $memory = number_format(memory_get_usage() / ( 1024 * 1024 ), 1);
        $out .= " - {$memory}MB";
    }
    $out .= " - $wp_object_cache->cache_hits cache hits / " . ( $wp_object_cache->cache_hits + $wp_object_cache->cache_misses );
    if ( $where ) {
        $sem_stops[$where] = $out;
    } else {
        dump($out);
    }
    return $in;
} # add_stop()


/**
 * dump_stops()
 *
 * @param mixed $in
 * @return mixed $in
 **/

function dump_stops($in = null) {
    if ( $_POST )
        return $in;
    global $sem_stops;
    global $wp_object_cache;
    $stops = '';
    foreach ( $sem_stops as $where => $stop )
        $stops .= "$where: $stop\n";
    dump("\n" . trim($stops) . "\n");
    if ( defined('SAVEQUERIES') && $_GET['debug'] == 'sql' ) {
        global $wpdb;
        foreach ( $wpdb->queries as $key => $data ) {
            $query = rtrim($data[0]);
            $duration = number_format($data[1] * 1000, 1) . 'ms';
            $loc = trim($data[2]);
            $loc = preg_replace("/(require|include)(_once)?,\s*/ix", '', $loc);
            $loc = "\n" . preg_replace("/,\s*/", ",\n", $loc) . "\n";
            dump($query, $duration, $loc);
        }
    }
    if ( $_GET['debug'] == 'cache' )
        dump($wp_object_cache->cache);
    if ( $_GET['debug'] == 'cron' ) {
        $crons = get_option('cron');
        foreach ( $crons as $time => $_crons ) {
            if ( !is_array($_crons) )
                continue;
            foreach ( $_crons as $event => $_cron ) {
                foreach ( $_cron as $details ) {
                    $date = date('Y-m-d H:m:i', $time);
                    $schedule = isset($details['schedule']) ? "({$details['schedule']})" : '';
                    if ( $details['args'] )
                        dump("$date: $event $schedule", $details['args']);
                    else
                        dump("$date: $event $schedule");
                }
            }
        }
    }
    return $in;
} # dump_stops()
add_action('init', create_function('$in', '
    return add_stop($in, "Load");
    '), 10000000);
add_action('template_redirect', create_function('$in', '
    return add_stop($in, "Query");
    '), -10000000);
add_action('wp_footer', create_function('$in', '
    return add_stop($in, "Display");
    '), 10000000);
add_action('admin_footer', create_function('$in', '
    return add_stop($in, "Display");
    '), 10000000);

/**
 * init_dump()
 *
 * @return void
 **/

function init_dump() {
    global $hook_suffix;
    if ( !is_admin() || empty($hook_suffix) ) {
        add_action('wp_footer', 'dump_stops', 10000000);
        add_action('admin_footer', 'dump_stops', 10000000);
    } else {
        add_action('wp_footer', 'dump_stops', 10000000);
        add_action("admin_footer-$hook_suffix", 'dump_stops', 10000000);
    }
} # init_dump()
add_action('wp_print_scripts', 'init_dump');


/**
 * dump_phpinfo()
 *
 * @return void
 **/

function dump_phpinfo() {
    if ( isset($_GET['debug']) && $_GET['debug'] == 'phpinfo' ) {
        phpinfo();
        die;
    }
} # dump_phpinfo()
add_action('init', 'dump_phpinfo');


/**
 * dump_http()
 *
 * @param array $args
 * @param string $url
 * @return array $args
 **/

function dump_http($args, $url) {
    dump(preg_replace("|/[0-9a-f]{32}/?$|", '', $url));
    return $args;
} # dump_http()


/**
 * dump_trace()
 *
 * @return void
 **/

function dump_trace() {
    $backtrace = debug_backtrace();
    foreach ( $backtrace as $trace )
        dump(
            'File/Line: ' . $trace['file'] . ', ' . $trace['line'],
            'Function / Class: ' . $trace['function'] . ', ' . $trace['class']
            );
} # dump_trace()
if ( $_GET['debug'] == 'http' )
    add_filter('http_request_args', 'dump_http', 0, 2);
?>

管理者がデバッグ情報を表示するためにURLに何かを追加したときにのみスクリプトが呼び出されるように、これを簡単に変更する方法はありますか?
NetConstructor.com

1
それは私のテーマで行われている方法です:semiologic.com/software/sem-reloaded-/inc/debug.phpは/functions.phpまたは/inc/init.phpに含まれています頭)。
デニスドバーナルディ

52

サイズ変更された画像のシャープ化(jpgのみ)

この関数は、サイズ変更されたjpg画像をシャープにします。違いの例:http://dl.dropbox.com/u/1652601/forrst/gdsharpen.png

function ajx_sharpen_resized_files( $resized_file ) {

    $image = wp_load_image( $resized_file );
    if ( !is_resource( $image ) )
        return new WP_Error( 'error_loading_image', $image, $file );

    $size = @getimagesize( $resized_file );
    if ( !$size )
        return new WP_Error('invalid_image', __('Could not read image size'), $file);
    list($orig_w, $orig_h, $orig_type) = $size;

    switch ( $orig_type ) {
        case IMAGETYPE_JPEG:
            $matrix = array(
                array(-1, -1, -1),
                array(-1, 16, -1),
                array(-1, -1, -1),
            );

            $divisor = array_sum(array_map('array_sum', $matrix));
            $offset = 0; 
            imageconvolution($image, $matrix, $divisor, $offset);
            imagejpeg($image, $resized_file,apply_filters( 'jpeg_quality', 90, 'edit_image' ));
            break;
        case IMAGETYPE_PNG:
            return $resized_file;
        case IMAGETYPE_GIF:
            return $resized_file;
    }

    return $resized_file;
}   

add_filter('image_make_intermediate_size', 'ajx_sharpen_resized_files',900);

はるかに優れたjpeg、たくさんありがとう!3.4アルファでテスト
ブラソフィロ

2
uの人はプラグインとしてこれをしたい場合:wordpress.org/extend/plugins/sharpen-resized-images
Ünsalコルクマズ

この機能はどこに行きますか?
スティービー

@StevieD-タイトルが示すように、テンプレートのfunctions.php内に配置されます。ただし、この関数は8年ほど前のものです。
timofey.com

51

デフォルトのWordpressメタボックスを削除する

テスト済み: Wordpress 3.0.1

このコードを使用すると、WordPressがデフォルトでデフォルトの[投稿の追加/編集]および[ページの追加/編集]画面に追加する特定のメタボックスを削除できます。

// REMOVE META BOXES FROM DEFAULT POSTS SCREEN
   function remove_default_post_screen_metaboxes() {
 remove_meta_box( 'postcustom','post','normal' ); // Custom Fields Metabox
 remove_meta_box( 'postexcerpt','post','normal' ); // Excerpt Metabox
 remove_meta_box( 'commentstatusdiv','post','normal' ); // Comments Metabox
 remove_meta_box( 'trackbacksdiv','post','normal' ); // Talkback Metabox
 remove_meta_box( 'slugdiv','post','normal' ); // Slug Metabox
 remove_meta_box( 'authordiv','post','normal' ); // Author Metabox
 }
   add_action('admin_menu','remove_default_post_screen_metaboxes');


// REMOVE META BOXES FROM DEFAULT PAGES SCREEN
   function remove_default_page_screen_metaboxes() {
 remove_meta_box( 'postcustom','page','normal' ); // Custom Fields Metabox
 remove_meta_box( 'postexcerpt','page','normal' ); // Excerpt Metabox
 remove_meta_box( 'commentstatusdiv','page','normal' ); // Comments Metabox
 remove_meta_box( 'trackbacksdiv','page','normal' ); // Talkback Metabox
 remove_meta_box( 'slugdiv','page','normal' ); // Slug Metabox
 remove_meta_box( 'authordiv','page','normal' ); // Author Metabox
 }
   add_action('admin_menu','remove_default_page_screen_metaboxes');

4
これによるとwordpress.stackexchange.com/questions/34030/...私はslugdivをこのように非表示にしないだろうが、この使用gist.github.com/1863830を代わりに

@CorvanNoorloos githubリンクが壊れています。
user7003859

48

「Wordpress」から「WordPress」フィルターを削除します

テスト済み: Wordpress 3.0.1

WordPressバージョン3.0に追加されたフィルターは、投稿コンテンツ、投稿タイトル、コメントテキストで「Wordpress」のすべてのインスタンス(大文字のPなし)を「WordPress」(大文字のP付き)に自動的に変換します。一部の人々はこれを押し付けがましいと見なします。WordPressを時々間違ってケースに入れる必要があるだけで、フィルターがやや面倒なことがわかりました。

// Remove annoying P filter
if(function_exists('capital_P_dangit')) {
    foreach ( array( 'the_content', 'the_title' ) as $filter ) 
        remove_filter( $filter, 'capital_P_dangit', 11 ); 

    remove_filter('comment_text', 'capital_P_dangit', 31 );
}

素晴らしい小さな発見。不要なコードを削除するだけのことの1つ
NetConstructor.com

5
WordPress 3.0.1では、このフィルターは優先度11で追加さ11れるため、3番目のパラメーターとして追加して削除する必要があります。
ヤンファブリ

46

ダッシュボードをカスタマイズする

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

function my_custom_dashboard_widgets() {
   global $wp_meta_boxes;

これらのダッシュボードウィジェットを削除...

   unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);
   unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
   unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);

「ヘルプとサポート」というカスタムウィジェットを追加します

   wp_add_dashboard_widget('custom_help_widget', 'Help and Support', 'custom_dashboard_help');
}

これはカスタムウィジェットのコンテンツです

 function custom_dashboard_help() {
    echo '<p>Lorum ipsum delor sit amet et nunc</p>';
}

44

カスタムユーザープロファイルフィールドを追加する

functions.phpファイルに以下のコードを配置して、カスタムユーザープロファイルフィールドを追加します。必要に応じて行を編集または追加します。

行を削除しないでください:return $ contactmethods; それ以外の場合、これは機能しません。

// CUSTOM USER PROFILE FIELDS
   function my_custom_userfields( $contactmethods ) {

    // ADD CONTACT CUSTOM FIELDS
    $contactmethods['contact_phone_office']     = 'Office Phone';
    $contactmethods['contact_phone_mobile']     = 'Mobile Phone';
    $contactmethods['contact_office_fax']       = 'Office Fax';

    // ADD ADDRESS CUSTOM FIELDS
    $contactmethods['address_line_1']       = 'Address Line 1';
    $contactmethods['address_line_2']       = 'Address Line 2 (optional)';
    $contactmethods['address_city']         = 'City';
    $contactmethods['address_state']        = 'State';
    $contactmethods['address_zipcode']      = 'Zipcode';
    return $contactmethods;
   }
   add_filter('user_contactmethods','my_custom_userfields',10,1);

カスタムフィールドを表示するには、次の2つの方法のいずれかを使用できます。

オプション1:

the_author_meta('facebook', $current_author->ID)

オプション2:

<?php $current_author = get_userdata(get_query_var('author')); ?>
<p><a href="<?php echo esc_url($current_author->contact_phone_office);?>" title="office_phone"> Office Phone</a></p>

41

管理メニューの順序をカスタマイズする

テスト済み: Wordpress 3.0.1

このコードにより、管理メニューの要素の順序を再編成できます。必要なのは、管理メニューの既存のリンクをクリックして、/ wp-admin / URLの前にあるものをすべてコピーすることだけです。以下の順序は、新しい管理メニューの順序を表しています。

// CUSTOMIZE ADMIN MENU ORDER
   function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array(
        'index.php', // this represents the dashboard link
        'edit.php?post_type=events', // this is a custom post type menu
        'edit.php?post_type=news', 
        'edit.php?post_type=articles', 
        'edit.php?post_type=faqs', 
        'edit.php?post_type=mentors',
        'edit.php?post_type=testimonials',
        'edit.php?post_type=services',
        'edit.php?post_type=page', // this is the default page menu
        'edit.php', // this is the default POST admin menu 
    );
   }
   add_filter('custom_menu_order', 'custom_menu_order');
   add_filter('menu_order', 'custom_menu_order');

本当にコアフィルターという名前はありcustom_menu_orderますか?見つからなかった
...-kaiser


40

抜粋の長さを変更する機能

テスト済み: Wordpress 3.0.1

デフォルトでは、すべての抜粋は55ワードに制限されています。以下のコードを利用して、このデフォルト設定をオーバーライドできます。

function new_excerpt_length($length) { 
    return 100;
}

add_filter('excerpt_length', 'new_excerpt_length');

この例では、抜粋の長さを100ワードに変更しますが、同じ方法を使用して任意の値に変更できます。


@ user402 ...これは単語や文字による制限ですか?両方の方法を投稿できますか?
NetConstructor.com

3
@ NetConstructor.comこの関数(およびexcerpt_lengthフック)は単語単位でキャップします
EAMann

へえ。そのフィルターをコアに追加しました。:)
Dougal Campbell

38

投稿/ページの管理リストにサムネイルを追加

これを関数に追加して、サムネイルのプレビューを含む新しい列を[投稿の管理/編集]および[ページリスト]に表示できます。

/****** Add Thumbnails in Manage Posts/Pages List ******/
if ( !function_exists('AddThumbColumn') && function_exists('add_theme_support') ) {

    // for post and page
    add_theme_support('post-thumbnails', array( 'post', 'page' ) );

    function AddThumbColumn($cols) {

        $cols['thumbnail'] = __('Thumbnail');

        return $cols;
    }

    function AddThumbValue($column_name, $post_id) {

            $width = (int) 35;
            $height = (int) 35;

            if ( 'thumbnail' == $column_name ) {
                // thumbnail of WP 2.9
                $thumbnail_id = get_post_meta( $post_id, '_thumbnail_id', true );
                // image from gallery
                $attachments = get_children( array('post_parent' => $post_id, 'post_type' => 'attachment', 'post_mime_type' => 'image') );
                if ($thumbnail_id)
                    $thumb = wp_get_attachment_image( $thumbnail_id, array($width, $height), true );
                elseif ($attachments) {
                    foreach ( $attachments as $attachment_id => $attachment ) {
                        $thumb = wp_get_attachment_image( $attachment_id, array($width, $height), true );
                    }
                }
                    if ( isset($thumb) && $thumb ) {
                        echo $thumb;
                    } else {
                        echo __('None');
                    }
            }
    }

    // for posts
    add_filter( 'manage_posts_columns', 'AddThumbColumn' );
    add_action( 'manage_posts_custom_column', 'AddThumbValue', 10, 2 );

    // for pages
    add_filter( 'manage_pages_columns', 'AddThumbColumn' );
    add_action( 'manage_pages_custom_column', 'AddThumbValue', 10, 2 );
}

列を左端に移動する方法は?
リッチ

38

自分のブログへのpingを削除する

テスト済み: Wordpress 3.0.1

//remove pings to self
function no_self_ping( &$links ) {
    $home = get_option( 'home' );
    foreach ( $links as $l => $link )
        if ( 0 === strpos( $link, $home ) )
            unset($links[$l]);
}
add_action( 'pre_ping', 'no_self_ping' );

ワードプレスはどのくらいの頻度でいつpingを実行しますか?
NetConstructor.com

私は実際にかなり頻繁にその問題を抱えています。WPブログの別の投稿への内部リンクを参照すると、自分からトラックバックまたはピンバック(覚えていない)を受け取ります。気に障る。
Sahas刈田

こっちも一緒。私はニュース/雑誌のブログを持っていますし、他の記事へのリンクもかなりあります。
スティーブン

35

GZIP出力圧縮を有効にする

通常、サーバーはこれを自動的に行うように設定する必要がありますが、多くの共有ホストはこれを行いません(おそらくクライアントの帯域幅使用量を増やすため)

 if(extension_loaded("zlib") && (ini_get("output_handler") != "ob_gzhandler"))
   add_action('wp', create_function('', '@ob_end_clean();@ini_set("zlib.output_compression", 1);'));

32

DBクエリ、使用時間、メモリ消費量を表示する

テスト済み: Wordpress 3.0.1

function performance( $visible = false ) {

    $stat = sprintf(  '%d queries in %.3f seconds, using %.2fMB memory',
        get_num_queries(),
        timer_stop( 0, 3 ),
        memory_get_peak_usage() / 1024 / 1024
        );

    echo $visible ? $stat : "<!-- {$stat} -->" ;
}

次に、上記のコードの下にあるこのコードは、上記のコードを公開Webサイトのフッターに自動的に挿入します(テーマがwp_footerを呼び出していることを確認してください)。

add_action( 'wp_footer', 'performance', 20 );

複数回呼び出すことができます。


php <5.2の使用memory_get_usage()
onetrickpony

31

WPデフォルトウィジェットの登録解除

テスト済み: WordPress 3.0.1

// unregister all default WP Widgets
function unregister_default_wp_widgets() {
    unregister_widget('WP_Widget_Pages');
    unregister_widget('WP_Widget_Calendar');
    unregister_widget('WP_Widget_Archives');
    unregister_widget('WP_Widget_Links');
    unregister_widget('WP_Widget_Meta');
    unregister_widget('WP_Widget_Search');
    unregister_widget('WP_Widget_Text');
    unregister_widget('WP_Widget_Categories');
    unregister_widget('WP_Widget_Recent_Posts');
    unregister_widget('WP_Widget_Recent_Comments');
    unregister_widget('WP_Widget_RSS');
    unregister_widget('WP_Widget_Tag_Cloud');
}
add_action('widgets_init', 'unregister_default_wp_widgets', 1);

バージョン3.1.4で使用しました。しかし、ウィジェットはまだそこにあります。誰にもアイデアはありますか?
-user391

WP 4.5でも引き続き動作します:)
ティムマローン

30

投稿コンテンツから最初の画像を自動抽出

テスト済み: Wordpress 3.0.1

このコードは、投稿に関連付けられている最初の画像を自動的に抽出し、getImage関数を呼び出して表示/使用できるようにします。

// AUTOMATICALLY EXTRACT THE FIRST IMAGE FROM THE POST 
function getImage($num) {
    global $more;
    $more = 1;
    $link = get_permalink();
    $content = get_the_content();
    $count = substr_count($content, '<img');
    $start = 0;
    for($i=1;$i<=$count;$i++) {
        $imgBeg = strpos($content, '<img', $start);
        $post = substr($content, $imgBeg);
        $imgEnd = strpos($post, '>');
        $postOutput = substr($post, 0, $imgEnd+1);
        $postOutput = preg_replace('/width="([0-9]*)" height="([0-9]*)"/', '',$postOutput);;
        $image[$i] = $postOutput;
        $start=$imgEnd+1;
    }
    if(stristr($image[$num],'<img')) { echo '<a href="'.$link.'">'.$image[$num]."</a>"; }
    $more = 0;
}

6
いいですが、これでもget_the_imageは非常に良い仕事をします。wordpress.org/extend/plugins/get-the-image
artlung

正しいが、これは異なる動作をし、get_the_imageが考慮しないさまざまな問題を修正します
-NetConstructor.com

3
get_the_imageスクリプトとはどう違うのですか?
マット

1
@matt-ワードプレスでは、画像を投稿に追加するさまざまな方法がありますが、get_the_imageスクリプトはそれらの1つだけを見ると思います。これは、注目の画像があるかどうかを確認し、利用可能な場合は最初にその画像を使用し、次に投稿コンテンツに追加された最初の画像を確認し、見つからない場合はメディアギャラリーで最も高い並べ替えの画像を確認します注文(少なくとも注文の進行を覚えている方法)。
NetConstructor.com

私が提案するwordpress.org/extend/plugins/auto-post-thumbnailポストサムネイルが設定されていない場合は、自動的にポストの最初のイメージまたは唯一の任意のカスタムポストタイプからポストサムネイル(注目サムネイル)を生成
Ünsalコルクマズを

27

投稿/ページが使用しているテーマテンプレートファイルをヘッダーに出力する

add_action('wp_head', 'show_template');
function show_template() {
    global $template;
    print_r($template);
}

テーマがpost_classを使用している場合、デフォルトのDIV出力を短くします。

テーマが次のようなものを使用している場合

<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

次のような、またはさらに長いソースのクレイジーな長いdivを使用できます。

<div id="post-4" class="post-4 post type-post hentry category-uncategorized category-test category-test-1-billion category-test2 category-test3 category-testing"> 

これは本当にソースを混乱させ始める可能性があり、ほとんどの場合かなり不必要に見えるかもしれません。

上の例では、次のように出力をスライスできます。

// slice crazy long div outputs
    function category_id_class($classes) {
        global $post;
        foreach((get_the_category($post->ID)) as $category)
            $classes[] = $category->category_nicename;
            return array_slice($classes, 0,5);
    }
    add_filter('post_class', 'category_id_class');

これは、最初の5つの値のみを含むように出力をスライスするため、上記の例は次のようになります。

<div id="post-4" class="post-4 post type-post hentry category-uncategorized"> 

投稿タイプに関係なく、カテゴリアーカイブにすべての投稿を表示する:カスタム投稿タイプに適しています

function any_ptype_on_cat($request) {
 if ( isset($request['category_name']) )
  $request['post_type'] = 'any';

 return $request;
}
add_filter('request', 'any_ptype_on_cat');

不要なダッシュボードアイテムを削除する

これはすでに投稿されていますが、アイテムの完全なリストがありませんでした。特に迷惑な「着信リンク!」

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

function my_custom_dashboard_widgets() {
global $wp_meta_boxes;
 //Right Now - Comments, Posts, Pages at a glance
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);
//Recent Comments
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments']);
//Incoming Links
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);
//Plugins - Popular, New and Recently updated Wordpress Plugins
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);

//Wordpress Development Blog Feed
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
//Other Wordpress News Feed
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);
//Quick Press Form
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']);
//Recent Drafts List
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_recent_drafts']);
}

「続きを読む」ページのジャンプを削除**

代わりに、ページの上部に戻ります。「続きを読む」をクリックすると、ページ内の迷惑な場所にジャンプする方法がわかります。これにより、ページが正常に読み込まれ、ジャンプすることはありません。

function remove_more_jump_link($link) { 
$offset = strpos($link, '#more-');
if ($offset) {
$end = strpos($link, '"',$offset);
}
if ($end) {
$link = substr_replace($link, '', $offset, $end-$offset);
}
return $link;
}
add_filter('the_content_more_link', 'remove_more_jump_link');

ユーザー名基づいてADMINメニュー項目を制限し、ユーザー名を実際のユーザーの名前に置き換えます。

function remove_menus()
{
    global $menu;
    global $current_user;
    get_currentuserinfo();

    if($current_user->user_login == 'username')
    {
        $restricted = array(__('Posts'),
                            __('Media'),
                            __('Links'),
                            __('Pages'),
                            __('Comments'),
                            __('Appearance'),
                            __('Plugins'),
                            __('Users'),
                            __('Tools'),
                            __('Settings')
        );
        end ($menu);
        while (prev($menu)){
            $value = explode(' ',$menu[key($menu)][0]);
            if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);}
        }// end while

    }// end if
}
add_action('admin_menu', 'remove_menus');

//代わりにif($ current_user-> user_login!= 'admin')を代わりに使用できます。おそらくより便利です

タグクラウドをスタイルする

//tag cloud custom
add_filter('widget_tag_cloud_args','style_tags');
function style_tags($args) {
$args = array(
     'largest'    => '10',
     'smallest'   => '10',
     'format'     => 'list',
     );
return $args;
}

ここにオプションの完全なリファレンス(たくさんあります!) http://codex.wordpress.org/Function_Reference/wp_tag_cloud

デフォルトのRSSウィジェット更新タイマーを変更する

(デフォルトは忘れて6または12時間です(1800 = 30min)。

add_filter( 'wp_feed_cache_transient_lifetime', create_function('$fixrss', 'return 1800;') );

次の数週間以内にこれらをそれぞれ別の回答に分割してください。私はあなたのためにそれをするつもりでしたが、あなたの答えを信用しているように見せたくありませんでした。いずれにせよ-ユーザーが探している情報を簡単に見つけられるように、これを整理しておくようにしています。事前に感謝
-NetConstructor.com

「ユーザー名に基づいてADMINメニュー項目を制限し、ユーザー名を実際のユーザー名に置き換える」というコードを使用していましたが、コードを更新して特定の「ユーザーロール」でこれを行う方法を示すこともできます。これは非常に便利だと思います!
NetConstructor.com

ごめんなさいNetConstructorあなたのコメントを見ました。ユーザーロールには、「current_user_can」を使用します。テストする時間はありませんが、テストしたら追加します。
ワイク

wp_feed_cache_transient_lifetimeのデフォルト値は43200(12時間)である
brasofilo

26

非アクティブなプラグインのみのプラグイン更新通知の削除

function update_active_plugins($value = '') {
    /*
    The $value array passed in contains the list of plugins with time
    marks when the last time the groups was checked for version match
    The $value->reponse node contains an array of the items that are
    out of date. This response node is use by the 'Plugins' menu
    for example to indicate there are updates. Also on the actual
    plugins listing to provide the yellow box below a given plugin
    to indicate action is needed by the user.
    */
    if ((isset($value->response)) && (count($value->response))) {

        // Get the list cut current active plugins
        $active_plugins = get_option('active_plugins');    
        if ($active_plugins) {

            //  Here we start to compare the $value->response
            //  items checking each against the active plugins list.
            foreach($value->response as $plugin_idx => $plugin_item) {

                // If the response item is not an active plugin then remove it.
                // This will prevent WordPress from indicating the plugin needs update actions.
                if (!in_array($plugin_idx, $active_plugins))
                    unset($value->response[$plugin_idx]);
            }
        }
        else {
             // If no active plugins then ignore the inactive out of date ones.
            foreach($value->response as $plugin_idx => $plugin_item) {
                unset($value->response);
            }          
        }
    }  
    return $value;
}
add_filter('transient_update_plugins', 'update_active_plugins');    // Hook for 2.8.+
//add_filter( 'option_update_plugins', 'update_active_plugins');    // Hook for 2.7.x

1
これは必ずしも良いアイデアではありません-非アクティブなプラグインがファイルシステムにまだ存在し、安全でないプラグインがサイトをハッキングするために利用される可能性があります。プラグインは常に最新の状態に保つ必要があります。
ティムマローン

25

<head>タグ内の余分な情報とHTMLを削除する

// remove unnecessary header info
add_action( 'init', 'remove_header_info' );
function remove_header_info() {
    remove_action( 'wp_head', 'rsd_link' );
    remove_action( 'wp_head', 'wlwmanifest_link' );
    remove_action( 'wp_head', 'wp_generator' );
    remove_action( 'wp_head', 'start_post_rel_link' );
    remove_action( 'wp_head', 'index_rel_link' );
    remove_action( 'wp_head', 'adjacent_posts_rel_link' );         // for WordPress < 3.0
    remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head' ); // for WordPress >= 3.0
}

// remove extra CSS that 'Recent Comments' widget injects
add_action( 'widgets_init', 'remove_recent_comments_style' );
function remove_recent_comments_style() {
    global $wp_widget_factory;
    remove_action( 'wp_head', array(
        $wp_widget_factory->widgets['WP_Widget_Recent_Comments'],
        'recent_comments_style'
    ) );
}

23

ライブサイトで使用するエラーデバッグとログを有効にする

これは、通常デフォルトで無効になっているWP_DEBUG定数を使用するために作成したコードです。さて、WP_DEBUGを有効にして、負の副作用なしでライブサイトで使用できるようにする方法を作成しましたが、エラーを強制的に表示したり、 / wp-contentディレクトリのエラーと通知。

このコードをwp-config.phpファイルにドロップし(バックアップを保存した後)、サイトのURLの最後に?debug = 1、2、または3パラメーターを渡すことができます。

?debug = 1 =すべてのエラー/通知を表示?debug = 2 =表示を強制?debug = 3 =すべてのエラーのdebug.logファイルを/ wp-content dirに作成します。

/**
* Written by Jared Williams - http://new2wp.com
* @wp-config.php replace WP_DEBUG constant with this code
* Enable WP debugging for usage on a live site
* http://core.trac.wordpress.org/browser/trunk/wp-includes/load.php#L230
* Pass the '?debug=#' parameter at the end of any url on site
*
* http://example.com/?debug=1, /?debug=2, /?debug=3
*/
if ( isset($_GET['debug']) && $_GET['debug'] == '1' ) {
    // enable the reporting of notices during development - E_ALL
    define('WP_DEBUG', true);
} elseif ( isset($_GET['debug']) && $_GET['debug'] == '2' ) {
    // must be true for WP_DEBUG_DISPLAY to work
    define('WP_DEBUG', true);
    // force the display of errors
    define('WP_DEBUG_DISPLAY', true);
} elseif ( isset($_GET['debug']) && $_GET['debug'] == '3' ) {
    // must be true for WP_DEBUG_LOG to work
    define('WP_DEBUG', true);
    // log errors to debug.log in the wp-content directory
    define('WP_DEBUG_LOG', true);
}

興味があれば、Comluvのために書いたゲストポストで詳細を説明します。http://comluv.com/dev/enable-debugging-and-logging-for-live-site-usage/

私はまだこれをパスワードで保護するか、できれば何らかの方法でif(current_user_can( 'manage_themes')and is_logged_in()で動作させる方法に取り組んでいます。

しかし、それはより多くのトリッキーになるところです。


ライブ、ステージング、およびdevデータベース接続の詳細のセットアップに似たものを使用します。
トム

20

公開ページに動的タイトルを自動的に追加する

テスト済み: Wordpress 3.0.1

以下のコードを使用すると、公開されているページ/投稿に基づいて動的なページタイトルが自動的に作成されます。

/* Dynamic Titles **/
// This sets your <title> depending on what page you're on, for better formatting and for SEO
// You need to set the variable $longd to some custom text at the beginning of the function
function dynamictitles() {
$longd = __('Enter your longdescription here.', 'texdomainstring');
    if ( is_single() ) {
      wp_title('');
      echo ' | '.get_bloginfo('name');

} else if ( is_page() || is_paged() ) {
      bloginfo('name');
      wp_title('|');

} else if ( is_author() ) {
      bloginfo('name');
      wp_title(' | '.__('Author', 'texdomainstring'));

} else if ( is_category() ) {
      bloginfo('name');
      wp_title(' | '.__('Archive for', 'texdomainstring'));

} else if ( is_tag() ) {
      echo get_bloginfo('name').' | '.__('Tag archive for', 'texdomainstring');
      wp_title('');

} else if ( is_archive() ) {
      echo get_bloginfo('name').' | '.__('Archive for', 'texdomainstring');
      wp_title('');

} else if ( is_search() ) {
      echo get_bloginfo('name').' | '.__('Search Results', 'texdomainstring');
} else if ( is_404() ) {
      echo get_bloginfo('name').' | '.__('404 Error (Page Not Found)', 'texdomainstring');

} else if ( is_home() ) {
      echo get_bloginfo('name').' | '.get_bloginfo('description');

} else {
      echo get_bloginfo('name').' | '.($blog_longd);
}
}

20

新しい役割と機能-一度だけ実行してください!

私はこれらを手元に置いています、これはプラグインなしでそれらを行う正しい方法です。これらはオプションデータベースに単一のフィールド(prefix_user_roles)を設定し、それらを設定するためのプラグインは必要ありません。使用可能な機能のリストとその機能の説明については、コーデックスのページを参照してください。 これらのブロックのいずれかのコメントを外し、ページをロードしてからコメントを追加するだけです!ここでは、必要な機能を備えたロールを作成しています。

/* Capabilities */

// To add the new role, using 'international' as the short name and
// 'International Blogger' as the displayed name in the User list and edit page:
/*
add_role('international', 'International Blogger', array(
    'read' => true, // True allows that capability, False specifically removes it.
    'edit_posts' => true,
    'delete_posts' => true,
    'edit_published_posts' => true,
    'publish_posts' => true,
    'edit_files' => true,
    'import' => true,
    'upload_files' => true //last in array needs no comma!
));
*/


// To remove one outright or remove one of the defaults:
/* 
remove_role('international');
*/

役割を削除して再追加するよりも、既存の役割を追加/削除する方が便利な場合があります。繰り返しになりますが、コメントを外し、ページをリロードしてから再度コメントするだけです。これにより、ロール/機能がオプションテーブルに適切に保存されます。(これにより、開発者はそれらを制御し、同じことを行うかさばるプラグインのオーバーヘッドを削除できます。)ここでは、公開された投稿を削除するように作成者の役割を変更しています(デフォルト)公開された投稿(デフォルトではこの役割では不可能です)-* add_cap *または* remove_cap *を使用します。

/*
$edit_role = get_role('author');
   $edit_role->add_cap('edit_published_posts');
   $edit_role->remove_cap('delete_published_posts');
*/

このように変更するサイトのCodexページからグリッド付きのスプレッドシートを保持しているので、functions.phpファイルにコメントアウトされたコードを残しておいても、設定方法を覚えることができます。これらの例をコメント解除しないでください。そうしないと、ページがロードされるたびにデータベースに書き込まれます。


上記の関数は、オプションデータベースのフィールドに書き込みます。コメントしてコメントを外すのが良い方法です。ユーザーロール用のプラグインがありますが、上記の機能を使用する場合、これらの機能を実行したままにすることはできません。また、複数回設定したり、特定のユーザーが何かにアクセスしているかどうかに基づいて設定する必要はありません。必要な場合は、そのユーザーに特定の一意のロールを設定します。コーデックスを参照してください。プラグインなしでそれを行う場合、上記で書いたすべてが100%正しいです。ほとんどすべての場合、ユーザーロールを設定する必要があるのは1回だけです。
tomcat23

@ tomcat23:説明のために、ロールがまだ存在しない場合にのみロールを追加する関数でラップしました。別のメモ:組み込みのロールからキャップを取得し、組み込みのロールから機能を追加/削除することで、ロールをロール階層のどこかに配置する方が簡単だと思います。キャップがexと 管理者および編集者。-私があなたの答えを編集したことを気にしないでください。そうした場合、plsはそれをロールバックします。:)
kaiser

1
@ tomcat23-この時点で橋の下の水。私が言っているのは、非難することには興味がなく、前進するすべての人に平和をもたらすことだけです。:)
マイクシンケル

2
@MikeSchinkelはい、あなたは正しいです。@kaiserあなたにin辱をおかけしたことをおMyび申し上げます。
tomcat23

1
@MikeSchinkel:平和を取り戻してくれてありがとう。@ tomcat23:いいえ、そうしませんでした。私はそのような批判に対処できます。私もおologiesびします。
カイザー

19

Wordpressカスタム管理フッター

//管理フッターテキストをカスタマイズします
function custom_admin_footer(){
        echo 'カスタムフッターテキストとhtmlをここに追加';
} 
add_filter( 'admin_footer_text'、 'custom_admin_footer');

これは、開発者として私に連絡するための簡単な参照点としてクライアントサイトに使用します。


19

ウィジェットでショートコードを有効にする

// shortcode in widgets
if ( !is_admin() ){
    add_filter('widget_text', 'do_shortcode', 11);
}

18

RSSフィードを無効にする機能

テスト済み: Wordpress 3.0.1

WordpressベースのWebサイトを静的に維持する場合は、RSSフィードを無効にできます。

この機能を使用できます:

function fb_disable_feed() {
wp_die( __('No feed available,please visit our <a href="'. get_bloginfo('url') .'">homepage</a>!') );
}

add_action('do_feed', 'fb_disable_feed', 1);
add_action('do_feed_rdf', 'fb_disable_feed', 1);
add_action('do_feed_rss', 'fb_disable_feed', 1);
add_action('do_feed_rss2', 'fb_disable_feed', 1);
add_action('do_feed_atom', 'fb_disable_feed', 1);

出典:bueltge.de/wordpress-feeds-deaktivieren/794(フランクブエルテ)
fuxia

トスコありがとう!ソースは英語でも利用可能ですwpengineer.com/287/disable-wordpress-feed
bueltge

16

「Howdy」メッセージを「Welcome」に変更します

この機能を使用すると、管理領域の右上にある「ハウディ」メッセージをカスタマイズできます。
この関数は、JQueryを使用して「Howdy」メッセージを「Welcome」に変更します。

/****** Customize admin message "Howdy" to "Welcome" ******/
$nohowdy = "Welcome";

if (is_admin()) {
    add_action('init', 'artdev_nohowdy_h');
    add_action('admin_footer', 'artdev_nohowdy_f');
}
// Load jQuery
function artdev_nohowdy_h() {
    wp_enqueue_script('jquery');
}
// Modify
function artdev_nohowdy_f() {
global $nohowdy;
echo <<<JS
<script type="text/javascript">
//<![CDATA[
var nohowdy = "$nohowdy";
jQuery('#user_info p')
    .html(
    jQuery('#user_info p')
        .html()
        .replace(/Howdy/,nohowdy)
    );
//]]>
JS;
}

gettextフィルターを使用したPHPバージョン:

add_filter('gettext', 'change_howdy', 10, 3);

function change_howdy($translated, $text, $domain) {

    if (!is_admin() || 'default' != $domain)
        return $translated;

    if (false !== strpos($translated, 'Howdy'))
        return str_replace('Howdy', 'Welcome', $translated);

    return $translated;
}

3
これは既にPHP側で編集できないので、まったく出力されませんか?
-hakre

ここでは確実に3.0+バージョンで動作しますが、古いバージョンでは動作しないのはなぜですか 使用している他のプラグインがこれに関与しているかどうかを確認してください。ここのテキストはJQuery、おそらくJQueryプラグインに置き換えられましたか?
フィリップ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.