Beste Sammlung von Code für Ihre functions.php-Datei [geschlossen]


332

Bitte stimmen Sie über die Frage und alle Antworten ab, die Sie nützlich finden, indem Sie auf den Pfeil nach oben links neben der Frage oder Antwort klicken.

Wie bei vielen anderen, die sich diesen Beitrag gerade ansehen, habe ich verschiedene Blogs, Foren und Diskussionsgruppen gelesen, um meine WordPress-Kenntnisse zu verbessern. In den letzten 12 Monaten hatte ich die Mission, die Verwendung von Plugins durch Hinzufügen von Code zu meiner functions.phpDatei zu ersetzen . Obwohl ich völlig einverstanden bin, dass Plugins in vielen Situationen sehr nützlich sind, hat meine Erfahrung gezeigt, dass in 90% der Anwendungsfälle, obwohl ein Plugin vorhanden sein könnte, die tatsächliche Verwendung zu unnötigen Komplikationen und Kompatibilitätsproblemen führen kann. Außerdem haben solche Plugins in vielen Fällen Menüs und andere Admin-Elemente hinzugefügt, die ich nicht möchte oder benötige.

In den meisten Fällen habe ich festgestellt, dass ich durch die Analyse des Plugin-Codes den gewünschten Code herausnehmen und in meinen Code einbauen konnte functions.php. Dadurch erhielt ich genau die Funktionalität, die ich benötigte, ohne unnötige Elemente einbeziehen zu müssen.

Der Zweck dieses Beitrags ist also mein Versuch, Sie, den Leser / Administrator / Entwickler, dazu zu bewegen, mir und anderen hier Codebits mitzuteilen, die Sie nützlich finden und die Ihrer Themendatei hinzugefügt haben function.php, um WordPress zu erweitern oder zu verbessern, ohne a zu verwenden Plugin.

Wenn Sie hier eine Antwort einreichen, geben Sie bitte jedem Code-Bit einen Titel, lassen Sie uns wissen, mit welcher Version von WordPress Sie kompatibel sind, fügen Sie eine Beschreibung hinzu, die Ihrer Meinung nach die Funktion am besten beschreibt, und fügen Sie (falls zutreffend) einen Link zum Original hinzu Plugin oder Quelle, in der Sie die Informationen gefunden haben.

Ich freue mich auf alle Ihre Antworten und werde natürlich meine eigenen neuen Funde hinzufügen, wann immer ich sie finde.


13
Wenn man bedenkt, dass die ersten fünf Antworten vom OP stammen und die Frage eher darauf abzielt, eine Reihe von Antworten zu sammeln, als eine einzige endgültige Antwort, sollte dies ein Community-Wiki sein.
EAMann,

17
Alle Antworten, die sich nicht auf ein Thema beziehen, sollten entfernt werden. Dieser Thread ist ein gutes Beispiel für schlechte Codierungspraktiken.
fuxia

17
Ich denke, es wäre besser, die Leute zu ermutigen , ein benutzerdefiniertes Funktions-Plugin zu erstellen, anstatt die Funktionen ihres Themas zu verwenden.php
Ian Dunn

3
@ NetConstructor.com Die reine Anzahl der Seitenaufrufe ist kein Indikator für die Qualität. Wir sollten spezifische Fragen mit spezifischen Antworten und guten Codierungspraktiken anregen. Dieser Thread ist das Gegenteil.
fuxia

6
@ NetConstructor.com Diskutieren Sie auf Meta, wo die Leute Ihre Argumente besser sehen können. :)
fuxia

Antworten:


107

Aktiviere die versteckte Admin-Funktion, um ALLE Site-Einstellungen anzuzeigen

Getestet auf: Wordpress 3.1 RC3

Dieses kleine Stück Code macht etwas ziemlich Cooles. Es wird Ihrem Einstellungsmenü eine zusätzliche Option mit einem Link zu "Alle Einstellungen" hinzugefügt, die Ihnen eine vollständige Liste aller Einstellungen zeigt, die Sie in Ihrer Datenbank in Bezug auf Ihre WordPress-Site vorgenommen haben. Durch den folgenden Code wird dieser Link nur für einen Administrator sichtbar und für alle anderen Benutzer ausgeblendet.

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

Fantastisch für die Entwicklung! Ich benutze die Optionen Tabelle häufig DB - Versionen für meine Plug-In speichern ... phpMyAdmin mit einer alten DB - Version zurücksetzen ein Upgrade - Skript zu testen , ist ein Schmerz ... das wird es machen so viel einfacher !!!
EAMann

3
Sie können dieselbe Optionsseite auch aufrufen (wenn Sie angemeldet sind), indem Sie zu yoursite / wp-admin / options.php
j08691

89

Ändern Sie den Link zum Login-Logo und zur Bild-URL

Getestet auf: WordPress 3.0.1

Mit diesem Code können Sie auf einfache Weise das Logo der WordPress-Anmeldeseite sowie den href-Link und den Titel des Logos ändern.

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

BEARBEITEN: Wenn Sie das Site-Logo als Ersatz für das Anmeldelogo verwenden möchten, können Sie die folgenden Informationen dynamisch abrufen (getestet in 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

Fügen Sie benutzerdefinierte Beitragstypen in die Suchergebnisse ein.

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

Fügen Sie Ihre benutzerdefinierten Beitragstypen standardmäßig zum RSS-Hauptfeed Ihrer Website hinzu.

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

Fügen Sie benutzerdefinierte Beitragstypen in das Admin-Dashboard-Widget "Right Now" ein

Dies schließt Ihre benutzerdefinierten Beitragstypen und die Anzahl der Beiträge für jeden Typ im Dashboard-Widget "Right Now" ein.

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

Zum letzten Ausschnitt dieser Antwort. Dies ist eine großartige Ergänzung, da ich diese manuell für jeden Beitragstyp hinzugefügt habe. Das einzige Problem, das ich dabei habe, ist, dass die Daten nach dem Standardeintrag "Kategorie" und "Tag" hinzugefügt werden. Könnten Sie Ihre Antwort aktualisieren, um die Standard- "Kategorie" - oder "Tag" -Einheiten nach unten zu verschieben oder zu entfernen, damit sie manuell hinzugefügt werden können?
NetConstructor.com

@ NetConstructor.com Ich glaube nicht, dass ich Ihre Anfrage verstehe. Wenn ich das tue, dann denke ich, wäre es etwas schwieriger und ich habe momentan keine Zeit, um herauszufinden, wie es geht.
Jaredwilli

Fügen Sie benutzerdefinierte Beitragstypen in die Suchergebnisse ein. Jetzt können Sie dies mit exclude_from_searchparam von register_post_type...
Krzysiek Dróżdż

78

Entfernen Sie die Update-Benachrichtigung für alle Benutzer mit Ausnahme von ADMIN-Benutzer

Getestet auf: Wordpress 3.0.1

Dieser Code stellt sicher, dass keine anderen Benutzer als "admin" von WordPress benachrichtigt werden, wenn Updates verfügbar sind.

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

Die Version wurde so geändert, dass nur Update-Benachrichtigungen für Administratorbenutzer angezeigt werden (im Gegensatz zum Benutzer "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
Dies ist weit weniger als ideal. Es wird nur funktionieren, wenn der Login des Administrators immer noch der Standard 'admin' ist, was aus Sicherheitsgründen nicht der Fall sein sollte. Stattdessen sollten Sie nach einer bestimmten Funktion suchen, damit die Benutzer Nachrichten sehen können.
Jerclarke

1
Das heißt, wenn (! Current_user_can ('manage_options')) {... add_filter ...} - Entschuldigung für den doppelten Kommentar, ich habe vergessen, dass beim Eingeben von Kommentaren)
jerclarke

Aus diesem Grund habe ich den Kommentar zum Code hinzugefügt, in dem Sie den Benutzernamen des Administrators ändern können. Wie würden Sie es verbessern / umschreiben?
NetConstructor.com

Der beste Weg ist, das globale $ user_login und get_currentuserinfo () zu entfernen und stattdessen current_user_can in Ihrer if-Klausel zu verwenden. Es ist nur 1 Zeile anstelle von 3 und es ist die Standardmethode. Sie können überprüfen, welche spezifischen Funktionen für ACT für die Nachrichten erforderlich sind. In diesem Fall gibt es 'update_core' und 'update_plugins'.
Jerclarke

2
also: if (! current_user_can ('update_plugins')) {/ * MELDUNGEN ENTFERNEN * /}
jerclarke

72

Laden von jQuery aus dem Google CDN

Getestet auf: 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' );
}
}

Entfernen Sie die WordPress-Versionsinformationen für Sicherheit

Getestet auf: Wordpress 3.0.1

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

Hinzufügen von Spam und Löschen von Links zu Kommentaren im Frontend

Getestet auf: Wordpress 3.0.1

Dies erleichtert das Verwalten von Kommentaren im Frontend, indem Spam hinzugefügt und Links gelöscht werden. **

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

Verzögern Sie die Veröffentlichung im RSS-Feed

Getestet auf: Wordpress 3.0.1

Schließlich möchte ich das Posten in meinen RSS-Feeds um 10-15 Minuten verschieben, da ich in meinem Text immer mindestens ein paar Fehler finde. Andere Verwendungszwecke sind, wenn Sie möchten, dass Inhalte für einen Tag oder eine Woche exklusiv für Ihre Website sind, bevor sie an Ihre RSS-Reader gesendet werden.

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

Quelle auf meinem Beitrag: wpengineer.com/320/publish-the-feed-later mit mehr Informationen
Bueltge

1
Sie können den Generatorfilter auch einfach entfernen:remove_action('wp_head', 'wp_generator');
Gipetto

25
ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js läuft nach nur einer Stunde ab. Verwenden Sie immer die Vollversionsinformationen wie ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js - diese verfallen nach einem Jahr.
fuxia

5
Der Code "Entfernen der WordPress-Versionsinformationen für Sicherheit" erhöht die Sicherheit Ihrer Website in keiner Weise. Es hört nicht einmal auf, die auf Ihrer Site verwendete WP-Version zu veröffentlichen.
Joseph Scott

1
Nicht wahr, Joseph. Wenn Ihre WordPress-Version verfügbar ist, können die Leute sehen, ob Sie eine ältere Version verwenden, wodurch Ihre Schwachstellen aufgedeckt werden. Es ist immer eine gute Entscheidung, dies von allen WordPress-Installationen zu entfernen. Persönlich weiß ich nicht einmal, warum sie es dort an erster Stelle gestellt haben, da es sich um ein Sicherheitsproblem handelt.
Jeremy

58

Stellen Sie eine maximale Anzahl von Post-Revisionen ein, um ein Aufblähen der Datenbank zu vermeiden.

Getestet auf: Wordpress 3.0.1

Die Standardeinstellung ist unendlich. Dadurch werden nur die letzten 5 Änderungen gespeichert:

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

FWIW gibt es eine Menge großartiger Ideen für CONSTANTS, die auf der Codex-Seite Editieren von wp-config.php eingestellt werden können .


Kann dies pro Beitragstyp festgelegt werden?
NetConstructor.com

Wenn man die Verwendung in wp_save_post_revision () betrachtet, scheint es keine Möglichkeit zu geben, nach Beitragstypen zu unterscheiden. Es gibt keinen Filter oder irgendetwas auf dem Wert, obwohl es wahrscheinlich sein sollte.
Jerclarke

Danke Jeremy - An alle anderen, wenn Sie wissen, wie man das macht, posten Sie es bitte hier.
NetConstructor.com

1
Ich persönlich bevorzuge 10. Ich weiß, dass es doppelt ist, aber immer, wenn ich eine Überarbeitung brauche, ist es immer älter als 5
janw

56

Wordpress Profiling-Tools

Ich füge Profiling-Tools gerne in einer separaten Datei hinzu, die ich dann bei Bedarf aus functions.php hinzufüge:

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

Gibt es eine schnelle Möglichkeit, dies so zu ändern, dass das Skript nur aufgerufen wird, wenn Sie ein Administrator sind UND der URL etwas anfügen, um die Debug-Informationen anzuzeigen?
NetConstructor.com

1
So wird es in meinem Theme gemacht: semiologic.com/software/sem-reloaded - die Datei /inc/debug.php ist in /functions.php oder /inc/init.php enthalten (kann mich nicht an den Anfang meiner Datei erinnern) Kopf).
Denis de Bernardy

52

Scharfzeichnen von Bildern mit geänderter Größe (nur JPG)

Diese Funktion schärft verkleinerte JPG-Bilder. Ein Beispiel für den Unterschied: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);

viel, viel bessere JPEGs, vielen Dank! getestet in 3,4-Alpha
Brasofilo


Wohin geht diese Funktion?
StevieD,

@StevieD - wie der Titel schon sagt, befindet es sich in der Datei functions.php in Ihrer Vorlage. Ich wäre allerdings vorsichtig, diese Funktion ist fast 8 Jahre alt.
timofey.com

51

Entfernen Sie die Standard-Wordpress-Metaboxen

Getestet auf: Wordpress 3.0.1

Mit diesem Code können Sie bestimmte Meta-Boxen entfernen, die WordPress standardmäßig zu den Standardbildschirmen "Beitrag hinzufügen / bearbeiten" und "Seite hinzufügen / bearbeiten" hinzufügt.

// 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
Laut diesem wordpress.stackexchange.com/questions/34030/… würde ich den Slugdiv nicht auf diese Weise verstecken, sondern stattdessen diesen gist.github.com/1863830 verwenden

@CorvanNoorloos Dein Github-Link ist kaputt.
User7003859

48

Entfernen Sie "Wordpress" zum "WordPress" Filter

Getestet auf: Wordpress 3.0.1

Mit WordPress Version 3.0 wurde ein Filter hinzugefügt, der automatisch alle Instanzen von "WordPress" (ohne Großbuchstaben P) in "WordPress" (mit Großbuchstaben P) in Post-Inhalten, Post-Titeln und Kommentartexten konvertiert. Einige Leute sehen dies als aufdringlich an, ich muss nur von Zeit zu Zeit WordPress falsch schreiben und fand den Filter etwas nervig.

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

toller kleiner Fund. Eines dieser Dinge, die nur ein weiteres Stück Code entfernen, das nicht benötigt wird
NetConstructor.com

5
In WordPress 3.0.1 wird dieser Filter mit Priorität 11 hinzugefügt , sodass Sie ihn 11als dritten Parameter hinzufügen müssen , um ihn zu entfernen.
Jan Fabry

46

Passen Sie das Dashboard an

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

function my_custom_dashboard_widgets() {
   global $wp_meta_boxes;

Entfernen Sie diese Dashboard-Widgets ...

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

Hinzufügen eines benutzerdefinierten Widgets mit dem Namen "Hilfe und Support"

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

Dies ist der Inhalt für Ihr benutzerdefiniertes Widget

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

44

Benutzerdefinierte Benutzerprofilfelder hinzufügen

Fügen Sie den folgenden Code in Ihre functions.php-Datei ein, um benutzerdefinierte Benutzerprofilfelder hinzuzufügen. Bearbeiten oder fügen Sie nach Belieben Linien hinzu.

Denken Sie daran, die Zeile nicht zu entfernen: return $ contactmethods; Andernfalls funktioniert das nicht.

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

Um benutzerdefinierte Felder anzuzeigen, können Sie eine der beiden unten aufgeführten Methoden verwenden.

Option 1:

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

Option 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

Passen Sie die Reihenfolge des Admin-Menüs an

getestet auf: Wordpress 3.0.1

Mit diesem Code können Sie die Reihenfolge der Elemente im Admin-Menü neu organisieren. Alles, was Sie tun müssen, ist auf einen vorhandenen Link im Admin-Menü zu klicken und alles vor der / wp-admin / URL zu kopieren. Die folgende Reihenfolge gibt die Reihenfolge an, in der das neue Admin-Menü angezeigt wird.

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

Gibt es wirklich einen Kernfilter mit dem Namen custom_menu_order? Ich konnte keinen finden ...
Kaiser


40

Funktion zum Ändern der Länge des Ausschnitts

Getestet auf: Wordpress 3.0.1

Standardmäßig sind alle Auszüge auf 55 Wörter begrenzt. Mit dem folgenden Code können Sie diese Standardeinstellungen überschreiben:

function new_excerpt_length($length) { 
    return 100;
}

add_filter('excerpt_length', 'new_excerpt_length');

In diesem Beispiel wird die Auszugslänge auf 100 Wörter geändert, Sie können sie jedoch auf dieselbe Weise in einen beliebigen Wert ändern.


@ user402 ... besteht diese Begrenzung aus Wörtern oder Zeichen? Könntest du posten, wie man beides macht?
NetConstructor.com

3
@ NetConstructor.com Diese Funktion (und die excerpt_lengthHaken) Kappe durch Worte .
EAMann,

Heh. Ich habe diesen Filter zum Kern hinzugefügt. :)
Dougal Campbell

38

Hinzufügen von Miniaturansichten in der Liste "Beiträge / Seiten verwalten"

Sie können dies zu Ihren Funktionen hinzufügen, um in der Liste "Beitrag verwalten / bearbeiten" und "Seiten" eine neue Spalte mit der Vorschau der Miniaturansichten anzuzeigen.

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

Wie verschiebe ich die Spalte ganz nach links?
Rich

38

Entfernen Sie Pings in Ihrem eigenen Blog

Getestet auf: 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' );

Wie oft und wann pingt sich WordPress selbst an?
NetConstructor.com

Ich habe dieses Problem tatsächlich ziemlich oft. Wenn ich einen internen Link auf einen anderen Beitrag in meinem WP-Blog verweise, erhalte ich von mir einen Trackback oder Pingback (weiß nicht mehr, welchen). Es ist nervig.
Sahas Katta

Hier gilt das gleiche. Ich habe ein Nachrichten- / Magazin-Blog und verweise ziemlich oft auf andere Artikel.
Steven

35

Aktivieren Sie die GZIP-Ausgabekomprimierung

Normalerweise sollte der Server so eingerichtet sein, dass dies automatisch erfolgt, aber viele gemeinsam genutzte Hosts tun dies nicht (wahrscheinlich, um die Bandbreitennutzung des Clients zu erhöhen).

 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-Abfragen, Zeitaufwand und Speicherverbrauch anzeigen

Getestet auf: 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} -->" ;
}

Dann folgt dieser Code unter dem obigen Code, der den obigen Code automatisch in die Fußzeile Ihrer öffentlichen Website einfügt (stellen Sie sicher, dass Ihr Theme wp_footer aufruft):

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

Kann mehrfach aufgerufen werden.


für PHP <5.2 verwendenmemory_get_usage()
onetrickpony

31

Heben Sie die Registrierung der WP-Standardwidgets auf

Getestet auf: 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);

Ich habe es in Version 3.1.4 verwendet. Aber die Widgets sind immer noch da. Hat jemand eine Idee?
user391

Arbeitet immer noch an WP 4.5 :)
Tim Malone

30

Automatisches Extrahieren des ersten Bildes aus dem Beitragsinhalt

Getestet auf: Wordpress 3.0.1

Mit diesem Code wird automatisch das erste Bild extrahiert, das einem Beitrag zugeordnet ist, und Sie können es durch Aufrufen der Funktion getImage anzeigen / verwenden.

// 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
Nett, aber get_the_image macht auch hier einen sehr guten Job. wordpress.org/extend/plugins/get-the-image
artlung

richtig, aber dies funktioniert anders und behebt verschiedene Probleme, die get_the_image nicht berücksichtigt
NetConstructor.com

3
Was macht es anders als das get_the_image-Skript?
Matt

1
@matt - In WordPress gibt es verschiedene Möglichkeiten, wie Bilder zu Beiträgen hinzugefügt werden können, und ich denke, dass das Skript get_the_image nur einen davon betrachtet. Dabei wird geprüft, ob ein Bild vorhanden ist, und dieses Bild wird zuerst verwendet, sofern verfügbar. Als nächstes wird meines Erachtens das erste Bild gesucht, das zum Inhalt des Beitrags hinzugefügt wurde. Wird dieses Bild nicht gefunden, wird in der Mediengalerie nach dem Bild mit der höchsten Sortierung gesucht Bestellung (zumindest erinnere ich mich so an die Bestellung).
NetConstructor.com

Ich schlage vor, wordpress.org/extend/plugins/auto-post-thumbnail Erzeugt das Post-Thumbnail (empfohlenes Thumbnail) automatisch aus dem ersten Bild im Post oder einem benutzerdefinierten Post-Typ, wenn kein Post-Thumbnail festgelegt ist
Ünsal Korkmaz

27

Geben Sie in der Kopfzeile aus, welche Designvorlagendatei ein Beitrag / eine Seite verwendet

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

Kürzen Sie die Standard-DIV-Ausgabe, wenn Ihr Thema post_class verwendet.

Wenn Ihr Thema etwas wie verwendet

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

Sie können verrückte lange Divs in Ihrer Quelle haben, die so oder noch länger aussehen könnten:

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

Dies kann Ihre Quelle wirklich überladen und in den meisten Fällen eher unnötig erscheinen. 3-4 tief zu gehen ist gut genug.

Für das obere Beispiel können wir die Ausgabe wie folgt aufteilen:

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

Dies schneidet die Ausgabe so, dass sie nur die ersten 5 Werte enthält. Das obige Beispiel lautet also:

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

In Kategoriearchiven werden alle Beiträge unabhängig vom Beitragstyp angezeigt: Geeignet für benutzerdefinierte Beitragstypen

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

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

Entfernen Sie unerwünschte Dashboard-Elemente

Dies wurde bereits gepostet, hatte aber nicht die vollständige Liste der Elemente. Besonders die nervigen "eingehenden Links!"

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

Entfernen von "Read More" -Seitensprüngen **

kehren Sie stattdessen zum Seitenanfang zurück. Wenn Sie auf "read more" klicken, springt das Programm zu der Stelle auf der Seite, die ärgerlich sein kann. Dadurch wird die Seite normal geladen und es wird kein Sprung ausgeführt.

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

Schränken Sie die ADMIN-Menüelemente basierend auf dem Benutzernamen ein . Ersetzen Sie den Benutzernamen durch den Namen eines tatsächlichen Benutzers.

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

// alternativ kannst du auch if ($ current_user-> user_login! = 'admin') verwenden, wahrscheinlich nützlicher

Gestalten Sie die Tag-Cloud

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

Vollständige Referenz der Optionen hier (es gibt viele!) Http://codex.wordpress.org/Function_Reference/wp_tag_cloud

Standard-Timer für RSS-Widget-Updates ändern

(Standard sind 6 oder 12 Stunden, die ich vergessen habe (1800 = 30 Minuten).

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

Könnten Sie bitte jede dieser Antworten in den nächsten Wochen in separate Antworten aufteilen? Ich wollte es für Sie tun, wollte es aber nicht so erscheinen lassen, als würde ich Ihre Antworten würdigen. Auf jeden Fall - ich versuche, dies so zu organisieren, dass Benutzer die gesuchten Informationen leicht finden können. Vielen Dank im Voraus
NetConstructor.com

Ich habe nur den Code "ADMIN-Menüelemente basierend auf dem Benutzernamen einschränken, Benutzernamen durch einen tatsächlichen Benutzernamen ersetzen" verwendet. Das ist großartig, aber Sie können den Code aktualisieren, um zu zeigen, wie dies für eine bestimmte "Benutzerrolle" getan werden kann. Ich denke das wäre sehr nützlich!
NetConstructor.com

Sorry NetConstructor Ich habe gerade Ihren Kommentar gesehen. Für die Benutzerrolle würde ich "current_user_can" verwenden. Ich habe keine Zeit, es zu testen, aber wenn ich es tue, werde ich es hinzufügen.
Wyck

Standardwert für wp_feed_cache_transient_lifetime ist 43200 (12 Stunden)
brasofilo

26

Hinweis zur Plugin-Aktualisierung NUR für INAKTIVE Plugins entfernen

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
Dies ist nicht unbedingt eine gute Idee - ein inaktives Plugin ist immer noch im Dateisystem vorhanden, und ein unsicheres Plugin kann immer noch zum Hacken der Site verwendet werden. Plugins sollten immer auf dem neuesten Stand gehalten werden.
Tim Malone

25

Überflüssige Informationen und HTML im <head>Tag entfernen

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

Aktivieren Sie das Debuggen und Protokollieren von Fehlern für die Verwendung auf Live-Sites

Dies ist ein Teil des Codes, den ich geschrieben habe, um die WP_DEBUG-Konstanten zu verwenden, die normalerweise standardmäßig deaktiviert sind. Nun, ich habe eine Möglichkeit geschaffen, nicht nur WP_DEBUG zu aktivieren, damit Sie es auf einer Live-Site ohne negative Nebenwirkungen verwenden können, sondern auch die anderen Debug-Konstanten, um die Anzeige von Fehlern zu erzwingen und eine Protokolldatei von zu erstellen die Fehler und Hinweise im Verzeichnis / wp-content.

Legen Sie diesen Code in Ihrer wp-config.php-Datei ab (NACH DEM SPEICHERN EINES SICHERUNGSFALLS) und übergeben Sie am Ende jeder URL auf Ihrer Site die Parameter? Debug = 1, 2 oder 3.

? debug = 1 = zeigt alle Fehler / Hinweise an? debug = 2 = erzwingt deren Anzeige? debug = 3 = erstellt eine debug.log-Datei mit allen Fehlern in / 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);
}

Auf den Gastbeitrag, den ich bei Interesse für Comluv geschrieben habe, gehe ich genauer ein: http://comluv.com/dev/enable-debugging-and-logging-for-live-site-usage/

Ich arbeite immer noch an einer Möglichkeit, dies entweder passwortgeschützt zu machen oder es vorzugsweise irgendwie funktionieren zu lassen, wenn (current_user_can ('manage_themes') und is_logged_in ().

Aber das ist, wo es viel schwieriger wird.


Wir verwenden etwas Ähnliches, um die Verbindungsdetails für Live-, Staging- und Entwicklerdatenbank einzurichten.
Tom

20

Dynamische Titel automatisch zu öffentlichen Seiten hinzufügen

Getestet auf: Wordpress 3.0.1

Wenn Sie den folgenden Code verwenden, werden automatisch dynamische Seitentitel erstellt, die auf den öffentlich angezeigten Seiten / Posts basieren.

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

Neue Rollen und Funktionen - Nur einmal ausführen!

Ich halte diese zur Hand , das ist der richtige Weg, um sie ohne Plugin zu machen. Sie legen ein einzelnes Feld (prefix_user_roles) in der Optionsdatenbank fest, und Sie benötigen kein Plugin, um sie festzulegen. Auf der Codex-Seite finden Sie eine Liste der verfügbaren Funktionen und Beschreibungen ihrer Funktionen. Sie müssen nur einen dieser Blöcke auskommentieren, eine Seite laden und sie dann erneut kommentieren! Hier erstelle ich eine Rolle mit den Funktionen, die ich benötige:

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

Es ist manchmal praktisch, eine vorhandene Rolle hinzuzufügen / zu entfernen, anstatt eine Rolle zu entfernen und erneut hinzuzufügen. Auch hier müssen Sie nur das Kommentarzeichen entfernen, eine Seite neu laden und sie dann erneut kommentieren. Dadurch wird die Rolle / Funktion ordnungsgemäß in der Optionstabelle gespeichert. (Auf diese Weise können Sie als Entwickler diese steuern und den Overhead der umfangreichen Plugins entfernen, die das Gleiche tun.) Hier ändere ich die Autorenrolle, um die veröffentlichten Beiträge zu löschen (Standardeinstellung), ihnen jedoch die Möglichkeit zum Bearbeiten ihre veröffentlichten Beiträge (was für diese Rolle standardmäßig nicht möglich ist) - mit * add_cap * oder * remove_cap *.

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

Ich behalte eine Tabelle mit dem Raster auf der Codex-Seite für Sites, die auf diese Weise geändert werden, damit ich mich erinnern kann, wie die Dinge eingestellt sind, obwohl der auskommentierte Code in Ihrer functions.php-Datei funktionieren wird. Lassen Sie diese Beispiele nicht unkommentiert, da sie sonst bei jedem Laden der Seite in die Datenbank geschrieben werden!


Die oben erwähnten Funktionen schreiben in ein Feld in der Optionsdatenbank. Kommentieren und Kommentieren ist der richtige Weg. Es gibt Plugins für Benutzerrollen. Wenn Sie jedoch die oben genannten Funktionen verwenden, können Sie diese Funktionen nicht ausführen und müssen sie NICHT mehrmals oder basierend darauf festlegen, ob ein bestimmter Benutzer auf etwas zugreift. Wenn Sie das möchten, richten Sie diesem Benutzer eine bestimmte, eindeutige Rolle ein. Und beziehen Sie sich auf den Codex, alles, was ich oben schreibe, ist zu 100% korrekt, wenn Sie es ohne Plugin tun. In fast allen Fällen müssen Sie die Benutzerrollen nur einmal festlegen.
Tomcat23

@ tomcat23: Zur Veranschaulichung habe ich es in eine Funktion eingewickelt, um die Rolle nur dann hinzuzufügen, wenn sie noch nicht existiert. Noch eine Anmerkung: Ich denke, es wäre einfacher, die Rolle irgendwo in der Rollenhierarchie zu platzieren, indem man die Obergrenzen von einer eingebauten Rolle abruft und dann die Fähigkeiten der eingebauten Rolle hinzufügt / daraus entfernt. Würde es klarer und leichter zu merken machen, wenn die Kappen irgendwo zwischen ex platziert sind. admin und editor. - Ich hoffe es macht dir nichts aus, dass ich deine Antwort bearbeitet habe. Wenn Sie dies tun, rollen Sie es bitte zurück. :)
Kaiser

1
@ tomcat23 - Wasser unter der Brücke an dieser Stelle. Ich sage nur, ich bin nicht daran interessiert, Schuld zuzuweisen, nur daran, Frieden für alle zu haben, die sich vorwärts bewegen. :)
MikeSchinkel

2
@MikeSchinkel Ja, du hast recht. @kaiser Ich entschuldige mich, wenn ich dich beleidigt habe.
Tomcat23

1
@MikeSchinkel: danke, dass du den Frieden wieder hergestellt hast. @ Tomcat23: Nein, hast du nicht. Mit dieser Art von Kritik kann ich umgehen. Ich entschuldige mich auch.
Kaiser

19

Benutzerdefinierte Wordpress-Admin-Fußzeile

// Admin Footer Text anpassen
Funktion custom_admin_footer () {
        Echo 'Fügen Sie hier Ihren benutzerdefinierten Fußzeilentext und HTML hinzu';
} 
add_filter ('admin_footer_text', 'custom_admin_footer');

Ich benutze dies für Client-Sites als einfachen Bezugspunkt, um mich als Entwickler zu kontaktieren.


19

Aktivieren Sie Shortcodes in Widgets

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

18

Funktion zum Deaktivieren von RSS-Feeds

Getestet auf: Wordpress 3.0.1

Sie können RSS-Feeds deaktivieren, wenn Sie Ihre Wordpress-basierte Website als statisch beibehalten möchten.

Sie können diese Funktion verwenden:

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


Danke Toscho! die Quelle ist auch in Englisch wpengineer.com/287/disable-wordpress-feed
Bueltge

16

Ändere die "Howdy" Nachricht in "Welcome"

Mit dieser Funktion können Sie die "Howdy" -Nachricht oben rechts in Ihrem Admin-Bereich anpassen.
Diese Funktion verwendet JQuery, um die Meldung "Howdy" in "Welcome" zu ändern.

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

PHP-Version mit gettextFilter:

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
Kann dies nicht schon auf der PHP-Seite bearbeitet werden, damit es überhaupt nicht ausgegeben wird?
Hakre

Es funktioniert hier sicher in 3.0+ Versionen, aber warum nicht in älteren Versionen? Überprüfen Sie, ob ein anderes von Ihnen verwendetes Plugin dafür verantwortlich ist. Der Text hier wurde durch JQuery ersetzt, vielleicht ein JQuery-Plugin?
Philip
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.