functions.php 파일을위한 최고의 코드 콜렉션 [닫기]


332

질문이나 답변의 왼쪽에있는 위쪽 화살표를 클릭하여 질문과 유용한 답변에 투표하십시오.

현재이 게시물을보고있는 다른 많은 사람들과 마찬가지로, 저는 워드 프레스 기술을 배우고 향상시키기 위해 다양한 블로그, 포럼 및 토론 그룹을 읽고 있습니다. 지난 12 개월 동안 나는 functions.php대신 파일에 코드를 추가하여 플러그인 사용을 대체하는 임무를 수행했습니다 . 플러그인이 많은 상황에서 매우 유용하다는 것에 전적으로 동의하지만 플러그인을 사용하더라도 사용 사례의 90 %에서 실제로 플러그인을 사용하면 불필요한 합병증과 호환성 문제가 발생할 수 있음을 증명했습니다. 또한 많은 경우에 그러한 플러그인은 내가 원하지 않거나 필요하지 않은 메뉴 및 기타 관리 요소를 추가했습니다.

플러그인 코드를 분석하여 원하는 코드를 제거하고 하드 코딩 할 수 있다는 사실을 자주 발견했습니다 functions.php. 이것은 불필요한 요소를 포함하지 않고도 필요한 정확한 기능을 제공했습니다.

따라서이 게시물의 목적은 독자, 관리자 / 개발자, 당신과 나와 다른 사람들과 공유하고 유용하다고 생각하고 테마 function.php파일에 추가 한 코드 비트를 사용하지 않고 WordPress를 확장하거나 향상시키기 위해 추가 한 코드 비트를 공유하려는 나의 시도입니다 . 플러그인.

여기에 답변을 제출할 때 각 코드 비트에 제목을 적어주십시오. 호환되는 것으로 알려진 워드 프레스 버전과 기능에 대해 가장 잘 설명하는 설명을 포함하고 해당되는 경우 원본에 대한 링크를 포함 시키십시오 정보를 찾은 플러그인 또는 소스.

나는 당신의 모든 답변을 기대하고 있으며, 내가 찾을 때마다 새로운 발견을 계속 추가 할 것입니다.


13
처음 5 개의 답변이 OP에 의한 것이고 한 개의 결정적인 답변이 아닌 일련의 답변을 수집하는 데 더 중점을 둔 것으로 보이면 커뮤니티 위키가되어야합니다.
EAMann

17
테마와 관련이없는 모든 답변을 제거해야합니다. 이 스레드는 잘못된 코딩 방법에 대한 좋은 예입니다.
fuxia

17
사람들이 테마 기능을 사용하는 대신 사용자 정의 기능 플러그인만들 도록 권장하는 것이 더 낫
Ian Dunn

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로 이동하여 동일한 옵션 페이지 (로그인 한 경우)로
이동할 수도 있습니다.

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매개 변수 로이 작업을 수행 할 수 있습니다 register_post_type.
Krzysiek Dróż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 키를 누르면 코멘트를 제출하는 것을 잊었습니다)
jerclarke

그렇기 때문에 관리자 사용자 이름을 변경할 수있는 코드에 주석을 추가했습니다. 어떻게 개선 / 재 작성 하시겠습니까?
NetConstructor.com

가장 좋은 방법은 전역 $ user_login 및 get_currentuserinfo ()를 제거하고 대신 if 절에서 current_user_can을 사용하는 것입니다. 3이 아닌 1 줄이며 표준 방법입니다. 메시지에서 ACT를 수행하는 데 필요한 특정 기능을 확인할 수 있습니다.이 경우에는 'update_core'및 'update_plugins'가 있습니다.
jerclarke

2
그래서 : 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 분 동안 게시하는 것을 지연시키고 싶습니다. 다른 용도로는 콘텐츠를 RSS 독자에게 제공하기 전에 하루 또는 일주일 동안 사이트에 독점 콘텐츠를 제공하려는 경우가 있습니다.

// 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 시간 후에 만료됩니다. 1 년 후에 만료되는 ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js 와 같은 정식 버전 정보를 항상 사용하십시오 .
fuxia

5
"보안을 위해 WordPress 버전 정보 제거"코드는 실제로 사이트의 보안을 강화하기 위해 아무 것도하지 않습니다. 귀하의 사이트에서 사용되는 WP 버전의 노출을 중단하지는 않습니다.
Joseph Scott

1
Joseph이 아닙니다. WordPress 버전이 노출되면 사람들이 이전 버전을 실행 중인지 확인할 수 있으므로 취약점이 노출됩니다. 모든 WordPress 설치에서 제거하는 것이 좋습니다. 개인적으로, 나는 그들이 보안 문제이기 때문에 그들이 왜 그것을 거기에 넣었는지조차 알지 못합니다.
Jeremy Jeremy

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);

지금까지 코덱스 페이지 편집 wp-config.php 에서 설정할 수있는 CONSTANTS에 대한 훌륭한 아이디어가 많이 있습니다 .


게시물 유형별로 설정할 수 있습니까?
NetConstructor.com

wp_save_post_revision ()에서의 사용법을 보면 게시물 유형을 기반으로 구별하는 방법이없는 것 같습니다. 값에 필터 나 다른 것은 없지만 아마도 있어야합니다.
jerclarke

감사합니다 Jeremy-다른 사람에게,이 작업을 수행하는 방법을 알고 있다면 여기에 게시하십시오.
NetConstructor.com

1
개인적으로 저는 10을 선호합니다. 저는 그것이 두 배라는 것을 알고 있지만 항상 수정이 필요할 때 항상 5보다 오래되었습니다.
janw

56

워드 프레스 프로파일 링 도구

프로파일 링 도구를 별도의 파일에 추가하고 싶습니다. 필요한 경우 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에 포함되어 있습니다 (내 상단을 기억하지 못합니다) 머리).
Denis de Bernardy

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);

훨씬 더 나은 jpegs, 무리 감사합니다! 3.4-alpha에서 테스트
brasofilo

2
U 사람이 플러그인으로이 원하는 경우 : wordpress.org/extend/plugins/sharpen-resized-images
Ünsal KORKMAZ

이 기능은 어디로 갑니까?
StevieD

@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"(대문자 P 없음)의 모든 인스턴스를 "WordPress"(대문자 P)로 자동 변환하는 WordPress 버전 3.0에 필터가 추가되었습니다. 어떤 사람들은 이것을 방해하는 것으로보고 있습니다. 가끔 워드 프레스를 잘못 입력하고 필터가 다소 성가신 것을 발견했습니다.

// 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 );
}

큰 작은 발견. 필요하지 않은 또 다른 코드를 제거하는 것 중 하나
NetConstructor.com

5
WordPress 3.0.1 에서이 필터는 우선 순위 11 로 추가 11되므로이를 제거하려면 세 번째 매개 변수로 추가해야 합니다.
Jan Fabry

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);

사용자 정의 필드를 표시하려면 아래 나열된 두 가지 방법 중 하나를 사용할 수 있습니다.

옵션 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 );
}

기둥을 가장 왼쪽으로 옮기는 방법은 무엇입니까?
Rich

38

자신의 블로그에 대한 핑 제거

테스트 : 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' );

얼마나 자주 그리고 언제 워드 프레스가 핑을합니까?
NetConstructor.com

나는 실제로 그 문제를 자주 가지고 있습니다. 내 WP 블로그의 다른 게시물에 대한 내부 링크를 참조하면 나 자신으로부터 트랙백 또는 핑백 (어떤 것을 기억하지 못함)을 얻습니다. 짜증나.
Sahas Katta

여기도 마찬가지입니다. 나는 뉴스 / 잡지 블로그를 가지고 있고 다른 기사로의 링크는 꽤 자주있다.
Steven

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} -->" ;
}

그런 다음 위 코드 아래의 코드는 위 코드를 자동으로 공개 웹 사이트의 바닥 글에 삽입합니다 (테마가 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에서 작동 :)
Tim Malone

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 스크립트와 다른 점은 무엇입니까?
matt

1
@ matt-워드 프레스에는 이미지를 게시물에 추가 할 수있는 다양한 방법이 있으며 get_the_image 스크립트는 그중 하나를 보는 것 같습니다. 이것은 추천 이미지가 있는지 확인하고 사용 가능한 경우 먼저 사용합니다. 다음은 게시물 내용에 추가 된 첫 번째 이미지를 확인하고 찾지 못하면 미디어 갤러리에서 정렬이 가장 높은 이미지를 확인합니다 순서 (적어도 순서가 기억되는 방식).
NetConstructor.com

내가 제안 wordpress.org/extend/plugins/auto-post-thumbnail 후 미리보기가 설정되어 있지 않은 경우 자동으로 포스트의 첫번째 이미지 또는 전용 사용자 정의 포스트 유형에서 포스트 썸네일 (특집 미리보기)를 생성
Ünsal KORKMAZ을

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');

username을 기준으로 ADMIN 메뉴 항목을 제한하고 username을 실제 사용자 이름으로 바꿉니다.

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 = 30 분).

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

앞으로 몇 주 내에 각각의 답변을 별도의 답변으로 나눌 수 있습니까? 나는 당신을 위해 그것을하려고했지만 당신의 답변에 대한 크레딧을 받고있는 것처럼 보이게하고 싶지 않았습니다. 어쨌든-사용자가 원하는 정보를 쉽게 찾을 수 있도록 체계적으로 유지하려고합니다. 미리 감사드립니다
NetConstructor.com

방금 "사용자 이름을 기준으로 ADMIN 메뉴 항목 제한, 사용자 이름을 실제 사용자 이름으로 바꾼"코드를 사용했지만 코드를 업데이트하여 특정 "사용자 역할"에 대해이 작업을 수행하는 방법도 보여줄 수 있습니다. 나는 이것이 매우 유용하다고 생각합니다!
NetConstructor.com

죄송합니다. NetConstructor 방금 귀하의 의견을 보았습니다. 사용자 역할에는 "current_user_can"을 사용합니다. 테스트 할 시간이 없지만 추가하면 추가 할 것입니다.
Wyck

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
이것은 반드시 좋은 생각은 아닙니다. 비활성 플러그인이 여전히 파일 시스템에 존재하며 안전하지 않은 플러그인은 여전히 ​​사이트를 해킹하는 데 사용될 수 있습니다. 플러그인은 항상 최신 상태로 유지해야합니다.
Tim Malone

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 = / wp-content dir에 모든 오류의 debug.log 파일을 만듭니다.

/**
* 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/

나는 이것을 암호로 보호하거나 바람직하게 어떻게 든 (current_user_can ( 'manage_themes') 및 is_logged_in ()에서 작동하게 만드는 방법을 찾고 있습니다.

그러나 그것이 더 까다로워지는 곳입니다.


라이브, 스테이징 및 dev 데이터베이스 연결 세부 정보 설정과 유사한 것을 사용합니다.
Tom

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 % 정확합니다. 거의 모든 경우에 대해 사용자 역할을 한 번만 설정하면됩니다.
tomcat23

@ tomcat23 : 설명하기 위해 역할이 존재하지 않을 때만 역할을 추가하는 함수로 묶었습니다. 또 다른 참고 사항 : 기본 제공 역할에서 뚜껑을 검색 한 다음 기본 제공 역할에서 기능을 추가 / 제거하여 역할 계층의 어딘가에 역할을 배치하는 것이 더 쉬울 것 같습니다. 뚜껑이 ex 사이에 있으면 더 명확하고 기억하기 쉽습니다. 관리자 및 편집자. -답변을 수정해도 괜찮습니다. 그렇게하면 pls가 다시 역할을합니다. :)
kaiser

1
@ tomcat23-이 시점에서 다리 아래의 물. 내가 말하고 싶은 것은, 비난하는 것에 관심이없고, 모든 사람이 앞으로 나아갈 수 있도록 평화를 얻는 것입니다. :)
MikeSchinkel

2
@MikeSchinkel 네, 맞습니다. @kaiser 내가 당신을 모욕 한 경우 사과드립니다.
tomcat23

1
@ MikeSchinkel : 평화를 다시 가져 주셔서 감사합니다. @ tomcat23 : 아니, 당신은하지 않았다. 나는 그런 종류의 비판을 다룰 수 있습니다. 저도 사과드립니다.
kaiser

19

워드 프레스 맞춤 관리자 바닥 글

// 관리자 바닥 글 텍스트 사용자 정의
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 Feed를 비활성화하는 기능

테스트 : Wordpress 3.0.1

Wordpress 기반 웹 사이트를 정적으로 유지하려는 경우 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);


고마워 Toscho! 소스는 영어로도 제공됩니다. wpengineer.com/287/disable-wordpress-feed
bueltge

16

"Howdy"메시지를 "Welcome"으로 변경

이 기능을 사용하면 관리 영역의 오른쪽 상단에있는 "Howdy"메시지를 사용자 정의 할 수 있습니다.
이 함수는 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 플러그인입니까?
Philip
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.