Skip to content

Instantly share code, notes, and snippets.

View sabrina-zeidan's full-sized avatar

Sabrina Zeidan sabrina-zeidan

View GitHub Profile
@sabrina-zeidan
sabrina-zeidan / posts_with_no_thumbs.php
Created July 29, 2024 16:57
Get all post with no thumbnails [WordPress]
// Get posts with no thumbnails
//add_action('wp_head', 'sz_posts_without_thumbs');
function sz_posts_without_thumbs() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1,
'fields' => 'ids',
'no_found_rows' => true,
'ignore_sticky_posts' => true,
@sabrina-zeidan
sabrina-zeidan / compare_cat_queries.php
Created July 29, 2024 15:55
Compare performance of query that retrieves posts by category [WordPress]
//SZ Compare queries performance
// Function to fetch and display random posts using the initial slow method
function fetch_random_posts_initial() {
$start_time = microtime(true);
$args = array(
'cat' => array(1, 9, 10, 11, 44, 94),
'posts_per_page' => 3,
'no_found_rows' => true,
'ignore_sticky_posts' => true,
@sabrina-zeidan
sabrina-zeidan / list_transients_by_prefix.php
Last active June 9, 2024 18:43
List or delete all transients with a specific prefix WordPress
function delete_transients_with_prefix( $prefix ) {
foreach ( get_transient_keys_with_prefix( $prefix ) as $key ) {
// delete_transient( $key );
echo "<br>". $key." ".get_transient( $key );
}
}
/**
* Gets all transient keys in the database with a specific prefix.
*
@sabrina-zeidan
sabrina-zeidan / list_all_hooks.php
Created December 20, 2023 15:38
List all hooks firing in the order [WordPress]
//This goes in functions.php or plugin file or wherever
function dump_hook( $tag, $hook ) {
ksort($hook);
echo "<pre>>>>>>\t$tag<br>";
foreach( $hook as $priority => $functions ) {
echo $priority;
@sabrina-zeidan
sabrina-zeidan / .hatccess
Created September 27, 2023 08:33
webp redirection on nexcess servers
RewriteEngine On
# Check if the request is for a PNG or JPEG file
RewriteCond %{REQUEST_FILENAME} \.(png|jpe?g)$
# Check if a WebP version of the file exists
RewriteCond %{REQUEST_FILENAME}.webp -f
# Redirect to the WebP version of the file
RewriteRule ^(.+)\.(png|jpe?g)$ $1.$2.webp [NC,L]
@sabrina-zeidan
sabrina-zeidan / test_queries_time.php
Last active February 12, 2024 19:06
Performance of a few common database queries [WordPress]
//Measure performance of some WP funcitons
$startTime = microtime(true);
$guarded_pages = get_posts([
'posts_per_page' => 100,
'no_found_rows' => true,
'post_type' => SpeedGuard_Admin::$cpt_name,
'post_status' => 'publish',
'fields' => 'ids'
] );
@sabrina-zeidan
sabrina-zeidan / sz_repeat_purchase_wtf.php
Last active February 23, 2023 01:20
Disable repeat purchase WooCommerce [WordPress]
/** Disable repeat purchase V 22.20 7:40 -- on Adding to Cart check **/
add_filter( 'woocommerce_add_to_cart_validation', 'limit_cart_items_from_category', 10, 5 );
function limit_cart_items_from_category ( $passed, $product_id, $quantity, $variation_id = 0, $variations = null ){
$current_product_id = ($variation_id === 0) ? $product_id : $variation_id;
// Loop through cart items checking if the product is already in cart
foreach ( WC()->cart->get_cart() as $cart_item ){
if( $cart_item['data']->get_id() == $current_product_id ) {
wc_add_notice( __('This product is already in your cart.', 'woocommerce' ), 'error' );
return false;
@sabrina-zeidan
sabrina-zeidan / webp_for_site.conf
Last active January 9, 2023 19:43
Serve WebP without plugin straight from the server
upstream php {
{{#each fastcgi_servers}}
server {{this}};
{{/each}}
}
# SZ START
# Check if client is capable of handling webp
map $http_accept $webp_suffix {
default "";
@sabrina-zeidan
sabrina-zeidan / generate_alt_from_title.php
Created October 2, 2022 20:50
Generate image alt from the post title -- for the first image in the post [WordPress]
// Generate image alt from the post title -- for the first image in the post
add_filter('the_content', 'add_alt_tags', 99999);
function add_alt_tags($content) {
global $post;
preg_match_all('/<img[^>]+>/i', $content, $images);
if(!is_null($images)) {
foreach($images[0] as $index => $value) {
//If no alt
// if(!preg_match('/alt=/', $value)) {
$new_img = str_replace('<img', '<img alt="'.get_the_title().'"', $images[0][$index]);
@sabrina-zeidan
sabrina-zeidan / stop_loading_blocks_crap_fse.php
Last active May 3, 2023 21:34
Stop loading block's CSS and JS if the block is not used -- for Full Site Edit themes [WordPress]
// Avoid loading unused assets, both JS and CSS
// Removes both CSS and JS
// For Full Site Editing Theme!
// In a better world block's author makes sure the block's assests are loaded only if block is actually in use (via enqueue_block_assets). For other cases we can do it ourselves
// In this example I load Swiper's block assets only where the block is used
// TODO: Works for content on Singular content only. if block is elsewhere or it's archive use this https://wordpress.stackexchange.com/questions/392493/find-if-widget-block-is-active
add_filter( 'style_loader_tag', 'sz_stop_loading_unused_block_crap', 9999, 3 );
add_filter( 'script_loader_tag', 'sz_stop_loading_unused_block_crap', 10, 3 );
function sz_stop_loading_unused_block_crap( $tag, $handle, $src ) {