There’s a lot of things you can do to improve and extend Wordpress, beyond plugins and themes.
Deny script access
Add to the top of a script (after <?php)
if ( !defined('ABSPATH') ) {
die("<!-- Not allowed -->");
}
If anyone tries to run the script file directly, instead of Wordpress running it, it will fail. This can stop others from gathering details directly from scripts.
Scripts, css, fonts
Choose, modify, or erase unneeded ones.
function custom_replace_css() {
// for those plugins that add fonts but not together:
wp_deregister_style('freehand-regular-latin,all');
wp_deregister_style('over_the_rainbow-regular-latin,all');
// list fonts here separated by |
$allfonts='Freehand:regular|Over+the+Rainbow:regular';
wp_register_style("many-fonts","https://fonts.googleapis.com/css?family=$allfonts&subset=latin,all");
wp_enqueue_style('many-fonts');
// remove unneeded scripts by their tag (usually id= but look in the plugin code)
wp_deregister_style('script-tag');
}
add_action('wp_enqueue_scripts','custom_replace_css',11);
From here
function mytheme_dequeue_fonts() {
wp_dequeue_style( 'twentytwelve-fonts' );
}
add_action( 'wp_enqueue_scripts', 'mytheme_dequeue_fonts', 11 );
Ref: https://wordpress.stackexchange.com/questions/66524/remove-open-sans-from-twenty-twelve-theme
Use google jquery
/* Disable WordPress jQuery */
wp_deregister_script('jquery');
/* Register jQuery's CDN Version */
wp_register_script('jquery', 'https://code.jquery.com/jquery-1.7.2.min.js');
/* Or Use Google CDN Version */
wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js');
/* Enable New Script */
wp_enqueue_script('jquery');
Ref: here (archive.org)
Redirect Comment post
You can do a lot more, but here’s an idea
add_action('comment_post_redirect', 'your_redirect_function');
// A function that redirects your users after they have commented.
function your_redirect_function ($location, $comment) {
// Here all you need to do is return the url of your target page.
$page = 'http://www.stackoverflow.com';
return $page;
}
Ref: https://stackoverflow.com/questions/18561939/wordpress-redirect-user-after-commenting
Shortcodes and Widgets
To let widgets use shortcodes (well, process them, that is…), add to ‘‘functions.php’’ or custom plugin:
add_filter('widget_text', 'do_shortcode');
Ref: https://digwp.com/2010/03/shortcodes-in-widgets/
Remove post features
Sometimes you need to remove post features, like excerpt or trackbacks.
<?php remove_post_type_support( $post_type, $supports ) ?>
where $post_type is usually ‘post’ and type is the feature to remove see Codex for a list of types.
Example:
add_action( 'init', 'my_custom_init' );
function my_custom_init() {
remove_post_type_support( 'post', 'excerpt' );
}
Add Design Credit
<?php
// Put a tagline on the admin panel
function remove_footer_admin () {
?>
<span id="footer-thankyou">
Fueled by <a href="https://www.wordpress.org" target="_blank">WordPress</a>|
Site Design and Layout by <a href="https://www.supertechcrew.com" target="_blank">Matt Bagley</a>|
</span><!-- .site-info -->
<?php
}
add_filter('admin_footer_text', 'remove_footer_admin');
?>
Load Scripts Conditionally
if( !is_admin()){
wp_register_script('flex', get_template_directory_uri() . '/js/flexslider.js', array('jquery'), '1.8.0', true );
wp_register_script('vids', get_template_directory_uri() . '/js/fitvids.js', array('jquery'), '1.0.0', true );
wp_register_script('custom', get_template_directory_uri() . '/js/custom.js', array('jquery'), '1.0.0', true );
}
Ref: https://www.organizedthemes.com/loading-scripts-conditionally/
Get list of scripts
Look in plugin code, or:
global $wp_styles;
foreach($wp_styles as $main_obj => $vals){
if(is_array($vals)){
// echo var_dump($vals);
foreach($vals as $name => $obj){
if(!empty($obj->handle)){
// echo $obj->handle, '<br />';
echo '"'.$obj->handle. '", ';
}
}
}
}
Ref: https://stackoverflow.com/a/12796054
Remove url in comments
function remove_comment_fields($fields) {
unset($fields['url']);
return $fields;
}
add_filter('comment_form_default_fields','remove_comment_fields');
Break out of Frames
I will not be trapped…
// Break Out of Frames for WordPress
function break_out_of_frames() {
if (!is_preview()) {
echo "\n<script type=\"text/javascript\">";
echo "\n<!--";
echo "\nif (parent.frames.length > 0) { parent.location.href = location.href; }";
echo "\n-->";
echo "\n</script>\n\n";
}
}
add_action('wp_head', 'break_out_of_frames');
Set attached image as Featured
// @ https://wp-mix.com/set-attachment-featured-image/
add_filter('the_content', 'set_featured_image_from_attachment');
function set_featured_image_from_attachment($content) {
global $post;
if (has_post_thumbnail()) {
// display the featured image
$content = the_post_thumbnail() . $content;
} else {
// get & set the featured image
$attachments = get_children(array(
'post_parent' => $post->ID,
'post_status' => 'inherit',
'post_type' => 'attachment',
'post_mime_type' => 'image',
'order' => 'ASC',
'orderby' => 'menu_order'
));
if ($attachments) {
foreach ($attachments as $attachment) {
set_post_thumbnail($post->ID, $attachment->ID);
break;
}
// display the featured image
$content = the_post_thumbnail() . $content;
}
}
return $content;
}
Add thumbnail to feed
function rss_post_thumbnail($content) {
global $post;
if(has_post_thumbnail($post->ID)) {
$content = get_the_post_thumbnail($post->ID) . $content;
}
return $content;
}
add_filter('the_excerpt_rss', 'rss_post_thumbnail');
add_filter('the_content_feed', 'rss_post_thumbnail');
Add previous/next Name
There should be a better way to do this.
<?php
$p = get_adjacent_post(false, '', true);
if(!empty($p)) echo '<div class="prev"><a href="' . get_permalink($p->ID) . '" title="' . $p->post_title . '">' . $p->post_title . '</a></div>';
$n = get_adjacent_post(false, '', false);
if(!empty($n)) echo '<div class="next"><a href="' . get_permalink($n->ID) . '" title="' .
$n->post_title . '">' . $n->post_title . '</a></div>';
?>
Show Single Result
For search results.
add_action('template_redirect', 'redirect_single_post');
function redirect_single_post() {
if (is_search()) {
global $wp_query;
if ($wp_query->post_count == 1 && $wp_query->max_num_pages == 1) {
wp_redirect( get_permalink( $wp_query->posts['0']->ID ) );
exit;
}
}
}
Req Real Comments
Set minimum length on comments.
add_filter( 'preprocess_comment', 'minimal_comment_length' );
function minimal_comment_length( $commentdata ) {
$minimalCommentLength = 20;
if ( strlen( trim( $commentdata['comment_content'] ) ) < $minimalCommentLength )
{
wp_die( 'All comments must be at least ' . $minimalCommentLength . ' characters long.' );
}
return $commentdata;
}
Admin notice
Show a note only to other admins.
// Admin Note
function adminnote($atts, $content = NULL){
if(current_user_can('edit_themes') || is_user_logged_in()){
return 'Admin Notice‘ . $content . ‘';
} } add_shortcode('note', 'adminnote');
// Use [note]This will appear only to admins[/note]
Add Content to Feed
function feedFilter($query) {
if ($query->is_feed) {
add_filter('the_content','feedContentFilter');
}
return $query;
}
add_filter('pre_get_posts','feedFilter');
function feedContentFilter($content) {
$content .= '<p>Extra RSS content goes here... </p>';
return $content;
}
Allow PHP in Widgets
function php_text($text) {
if (strpos($text, '<' . '?') !== false) {
ob_start();
eval('?' . '>' . $text);
$text = ob_get_contents();
ob_end_clean();
}
return $text;
}
add_filter('widget_text', 'php_text', 99)
Style First Paragraph
function first_paragraph($content){
global $post;
if ($post->post_type == "post"){
return preg_replace('/<p([^>]+)?>/', '<p$1 class="first">', $content, 1); }
else {
return $content;
}
}
add_filter('the_content', 'first_paragraph');
Add Thumbnails to Post List
/****** 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 );
Remove Images from Content
This is useful for showing full content on home page without the images. From here.
add_filter('the_content', 'filter_images',2);
function filter_images($content){
return preg_replace(‘/< img alt=”” />]+./’,”,$content);
}
This one may be better for custom themes.
<?php
$content = get_the_content();
$postOutput = preg_replace('/<img[^>]+./','', $content);
echo $postOutput;
?>