- after_setup_theme
- init
- template_redirect
- shutdown
Notes about WordPress Gutenberg themes development.
ACF (6) admin (1) ajax (2) API interactivity (1) block (17) block_style (2) colors (2) constante (1) context (1) conventions (2) cron (1) css (5) custom post type (1) data (1) debug (2) define (1) file_API (1) functions.php (5) git (4) hook (7) i18n (2) js (2) layout (1) loop (1) media (1) media library (1) menu (2) navigation (1) performance (2) post (1) query (3) readmore (1) responsive (1) rest api (1) security (6) spacing (1) sql (1) svg (1) taxonomy (1) theme (1) theme.json (11) typo (2) URL (1) wp-config.php (5) wp cli (3) wp function (7)
-
# hook
-
Redirections
# hookRead more
Si on veut cacher à la fois les single et les archives, le plus simple est public à false. Préciser show_ui et show_in_rest à true pour pouvoir les gérer dans l’admin et dans Gutenberg. Ne pas préciser de rewrite du tout, ou alors à false.
=> les urls ne sont pas du tout accessibles de nulle part (pas de lien “Voir” dans le BO), y compris en SEO : c’est le plus pratique, et pas d’erreurs/oublis possibles.
Pour mémoire, si on veut uniquement cacher les archives, avoir public à true, mais has_archive à false permet de pouvoir gérer une Page au même nom que slug des single. Si on ne veut aucune page au slug des singles, laisser has_archive à true, et créer une redirection via le filter template_redirect. (cas des Rapports d’ecomaison).
Si on veut cacher uniquement les singles mais conserver l’archive (si on n’a pas de page qui fait le job, ce qui est quand même le cas le plus fréquent), il faut passer par du code WP de redirection sur le filter template_redirect et bloquer les singles dans Yoast SEO.
SylvieTo handle redirections:
add_actions( 'template_redirect', 'fn' ); function fn() { wp_redirect( home_url( '/' ), 301 ); exit; }
Sources:
- https://developer.wordpress.org/reference/functions/wp_redirect/
- https://developer.wordpress.org/reference/hooks/template_redirect/
-
Enqueuing styles hooks
Read more
Front + editor
enqueue_block_assets
Editor only
enqueue_block_editor_assets
Sources:
-
Allow .svg import
Read more
add_filter('upload_mimes', 'dw__upload_mimes'); function dw__upload_mimes( $mimes=array() ){ $mimes['svg'] = 'image/svg+xml'; return $mimes; }
-
Block rendering filter
Read more
add_filter( 'render_block', 'dev__paragraph_add_block', 10, 2 ); function dev__paragraph_add_block( $block_content, $block ){ if ( 'core/paragraph' === $block['blockName'] ){ $block_content = new WP_HTML_Tag_Processor( $block_content ); $block_content->next_tag(); /* first tag should always be ul or ol */ $block_content->add_class( 'wp-block-paragraph' ); $block_content->get_updated_html(); } return $block_content; }
-
filter theme.json
Read more
There is a way to intervene on the generation of the css based on the theme.json file.
function update_with_dark_theme( $theme_json ){ $dark_theme = json_decode( file_get_contents( get_template_directory() . '/styles/dark.json' ), true ); return $theme_json->update_with( $dark_theme ); } add_filter( 'wp_theme_json_data_user', 'dsfr_update_with_dark_theme' );
It can be used to switch the theme scheme for e.g.
function dsfr_reload_styles(){ if ( isset( $_GET['scheme'] ) && $_GET['scheme'] == 'dark' ){ add_filter( 'wp_theme_json_data_user', 'dsfr_update_with_dark_theme' ); } wp_enqueue_global_styles(); remove_action( 'wp_print_styles', 'print_emoji_styles' ); header( 'Content-type: text/css' ); wp_print_styles(); exit(); } add_action( 'wp_ajax_dsfr_reload_styles', 'dsfr_reload_styles' ); add_action( 'wp_ajax_nopriv_dsfr_reload_styles', 'dsfr_reload_styles' );
Source : https://fullsiteediting.com/lessons/how-to-filter-theme-json-with-php/