Skip to content

Instantly share code, notes, and snippets.

View willybahuaud's full-sized avatar

Willy Bahuaud willybahuaud

View GitHub Profile
@willybahuaud
willybahuaud / duplicate-auto.php
Last active January 6, 2022 23:54
Automatic posts duplication across languages (polylang pro)
<?php
/**
* Cette action permet lors d'une sauvegarde d'article, de le dupliquer automatiquement dans toutes les langues
*/
add_action( 'pll_save_post', 'w_force_duplicate_post', 10, 3 );
function w_force_duplicate_post( $post_id, $post, $translations ) {
remove_filter( 'pll_save_post', 'w_force_duplicate_post' );
if ( 'event' != get_post_type( $post ) ) {
return false;
}
@willybahuaud
willybahuaud / filter.php
Last active January 6, 2022 23:46
filter wpastra custom layout conditions
<?php
add_filter( 'astra_display_on_list', 'w_astra_display_on_list_pro' );
function w_astra_display_on_list_pro( $rules ) {
// look at $rules array to see where you should add your filter
$rules['basic']['value']['pro_only'] = 'Pages professionnels';
return $rules;
}
function my_condition_is_ok_here( $id ) {
@willybahuaud
willybahuaud / filter-search.php
Last active May 24, 2021 14:08
rechercher par mot clé api wordpress
<?php
add_filter('terms_clauses', 'w_term_search_clauses', 10, 3 );
function w_term_search_clauses( $clauses, $taxonomies, $args ) {
if ( ! empty( $taxonomies ) && in_array( 'product_cat', $taxonomies ) ) {
if ( ! empty( $args['search'] ) ) {
global $wpdb;
$like = '%' . $wpdb->esc_like( $args['search'] ) . '%';
$clauses['join'] .= " INNER JOIN {$wpdb->termmeta} AS tm ON t.term_id = tm.term_id";
$clauses['where'] = preg_replace( '/\)$/', $wpdb->prepare(" OR (tm.meta_key = 'analog_search' AND tm.meta_value LIKE %s))", $like ), $clauses['where'] );
@willybahuaud
willybahuaud / filters.php
Last active May 21, 2021 22:00
Facets filters by cookies
<?php
add_shortcode( 'menu-product-filter', 'w_product_filters' );
function w_product_filters() {
$cat = get_queried_object_id(); // si on est sur un ontenu, si c'est une archive on force la valeur (sans tirets)
$current = array();
if ( ! empty( $_COOKIE['w_filters'] ) ) {
$filters = json_decode( stripslashes( $_COOKIE['w_filters'] ) );
if ( ! empty( $filters->$cat ) ) {
@willybahuaud
willybahuaud / debug-hooks.php
Last active January 6, 2022 23:58
debug hooks and filters
<?php
function trace_hooks() {
global $wp_filter;
foreach ( $wp_filter[current_filter()]->callbacks as $f ) {
var_dump( current_filter(), $f );
}
}
add_action( 'all', 'trace_hooks' );
@willybahuaud
willybahuaud / order-by-taxonomy.php
Created November 14, 2019 15:56
Order by taxonomy terms
<?php
add_action( 'pre_get_posts', 'w_filter_query' );
function w_filter_query( $q ) {
if ( ! is_admin() && $q->is_main_query() && is_post_type_archive( 'recipe' ) ) {
$q->set( 'posts_per_page', -1 );
$q->set( 'need_special_order', 'type-recette' );
}
}
add_filter('posts_clauses', 'w_orderby_tax_clauses', 10, 2 );
@willybahuaud
willybahuaud / filtre.php
Last active April 3, 2018 21:18
Préfixer les articles par l’URL du page for posts (avec WPML)
<?php
add_filter( 'post_link', 'w_post_link', 10, 3 );
function w_post_link( $url, $post, $leavename=false ) {
if ( $post->post_type == 'post' ) {
global $sitepress;
$lang = apply_filters( 'wpml_post_language_details', 'fr', $post->ID );
$base = get_permalink( icl_object_id( get_option( 'page_for_posts' ), 'page', true, $lang['language_code'] ) );
$url = str_replace( $sitepress->language_url( $lang['language_code'] ), $base, $url );
}
<?php
add_filter( 'the_title', 'willy_insert_missing_unsecable' );
add_filter( 'the_content', 'willy_insert_missing_unsecable' );
function willy_insert_missing_unsecable( $text ) {
$patterns = array(
'« ' => '«&nbsp;',
' »' => '&nbsp;»',
' :' => '&nbsp;:',
' !' => '&nbsp;!',
@willybahuaud
willybahuaud / filter-menu-item-by-user-status.php
Last active October 16, 2016 17:23
Filtrer les éléments d’un menu selon que l’utilisateur est connecté
<?php
add_filter( 'wp_nav_menu_objects', 'willy_filter_wp_nav_menu_object_by_user_status' );
function willy_filter_wp_nav_menu_object_by_user_status( $items ) {
if ( ! is_admin() ) {
foreach ( $items as $k => $item ) {
if ( is_array( $item->classes )
&& ( ( in_array( 'logged-only', $item->classes ) && ! is_user_logged_in() )
|| ( in_array( 'not-logged-only', $item->classes ) && is_user_logged_in() ) ) ) {
unset( $items[ $k ] );
@willybahuaud
willybahuaud / exemple.php
Last active August 10, 2020 13:49
wp_dropdown_category multiple
<?php
wp_dropdown_categories( array(
'taxonomy' => 'category',
'multiple' => true,
'walker' => new Willy_Walker_CategoryDropdown(),
'selected' => array( 10, 12 ), // selected terms…
'hide_empty' => false,
) );