- Statut : non résolu
- Ce sujet contient 29 réponses, 8 participants et a été mis à jour pour la dernière fois par Tche, le il y a 10 années et 3 mois.
-
AuteurMessages
-
28 juillet 2014 à 10 h 34 min #771855
En fait notre site compte plus 700 articles et le faire à la main me semble périlleux. J’avais également pensé à lancer un « trouver remplacer » dans la bdd sur les h2… puis je suis tombé sur l’article de Wabeo et la fonction qu’il utilise le fait très bien… en tout cas quand je la place dans mon thème twentyfourteen parent.
<?php
/**
* Twenty Fourteen functions and definitions
*
* Set up the theme and provides some helper functions, which are used in the
* theme as custom template tags. Others are attached to action and filter
* hooks in WordPress to change core functionality.
*
* When using a child theme you can override certain functions (those wrapped
* in a function_exists() call) by defining them first in your child theme's
* functions.php file. The child theme's functions.php file is included before
* the parent theme's file, so the child theme functions would be used.
*
* @link http://codex.wordpress.org/Theme_Development
* @link http://codex.wordpress.org/Child_Themes
*
* Functions that are not pluggable (not wrapped in function_exists()) are
* instead attached to a filter or action hook.
*
* For more information on hooks, actions, and filters,
* @link http://codex.wordpress.org/Plugin_API
*
* @package WordPress
* @subpackage Twenty_Fourteen
* @since Twenty Fourteen 1.0
*/
/**
* Set up the content width value based on the theme's design.
*
* @see twentyfourteen_content_width()
*
* @since Twenty Fourteen 1.0
*/
if ( ! isset( $content_width ) ) {
$content_width = 474;
}
/**
* Twenty Fourteen only works in WordPress 3.6 or later.
*/
if ( version_compare( $GLOBALS['wp_version'], '3.6', '<' ) ) {
require get_template_directory() . '/inc/back-compat.php';
}
if ( ! function_exists( 'twentyfourteen_setup' ) ) :
/**
* Twenty Fourteen setup.
*
* Set up theme defaults and registers support for various WordPress features.
*
* Note that this function is hooked into the after_setup_theme hook, which
* runs before the init hook. The init hook is too late for some features, such
* as indicating support post thumbnails.
*
* @since Twenty Fourteen 1.0
*/
function twentyfourteen_setup() {
/*
* Make Twenty Fourteen available for translation.
*
* Translations can be added to the /languages/ directory.
* If you're building a theme based on Twenty Fourteen, use a find and
* replace to change 'twentyfourteen' to the name of your theme in all
* template files.
*/
load_theme_textdomain( 'twentyfourteen', get_template_directory() . '/languages' );
// This theme styles the visual editor to resemble the theme style.
add_editor_style( array( 'css/editor-style.css', twentyfourteen_font_url() ) );
// Add RSS feed links to for posts and comments.
add_theme_support( ‘automatic-feed-links’ );
// Enable support for Post Thumbnails, and declare two sizes.
add_theme_support( ‘post-thumbnails’ );
set_post_thumbnail_size( 672, 372, true );
add_image_size( ‘twentyfourteen-full-width’, 1038, 576, true );
// This theme uses wp_nav_menu() in two locations.
register_nav_menus( array(
‘primary’ => __( ‘Top primary menu’, ‘twentyfourteen’ ),
‘secondary’ => __( ‘Secondary menu in left sidebar’, ‘twentyfourteen’ ),
) );
/*
* Switch default core markup for search form, comment form, and comments
* to output valid HTML5.
*/
add_theme_support( ‘html5’, array(
‘search-form’, ‘comment-form’, ‘comment-list’, ‘gallery’, ‘caption’
) );
/*
* Enable support for Post Formats.
* See http://codex.wordpress.org/Post_Formats
*/
add_theme_support( ‘post-formats’, array(
‘aside’, ‘image’, ‘video’, ‘audio’, ‘quote’, ‘link’, ‘gallery’,
) );
// This theme allows users to set a custom background.
add_theme_support( ‘custom-background’, apply_filters( ‘twentyfourteen_custom_background_args’, array(
‘default-color’ => ‘f5f5f5’,
) ) );
// Add support for featured content.
add_theme_support( ‘featured-content’, array(
‘featured_content_filter’ => ‘twentyfourteen_get_featured_posts’,
‘max_posts’ => 6,
) );
// This theme uses its own gallery styles.
add_filter( ‘use_default_gallery_style’, ‘__return_false’ );
}
endif; // twentyfourteen_setup
add_action( ‘after_setup_theme’, ‘twentyfourteen_setup’ );
/**
* Adjust content_width value for image attachment template.
*
* @since Twenty Fourteen 1.0
*/
function twentyfourteen_content_width() {
if ( is_attachment() && wp_attachment_is_image() ) {
$GLOBALS[‘content_width’] = 810;
}
}
add_action( ‘template_redirect’, ‘twentyfourteen_content_width’ );
/**
* Getter function for Featured Content Plugin.
*
* @since Twenty Fourteen 1.0
*
* @return array An array of WP_Post objects.
*/
function twentyfourteen_get_featured_posts() {
/**
* Filter the featured posts to return in Twenty Fourteen.
*
* @since Twenty Fourteen 1.0
*
* @param array|bool $posts Array of featured posts, otherwise false.
*/
return apply_filters( ‘twentyfourteen_get_featured_posts’, array() );
}
/**
* A helper conditional function that returns a boolean value.
*
* @since Twenty Fourteen 1.0
*
* @return bool Whether there are featured posts.
*/
function twentyfourteen_has_featured_posts() {
return ! is_paged() && (bool) twentyfourteen_get_featured_posts();
}
/**
* Register three Twenty Fourteen widget areas.
*
* @since Twenty Fourteen 1.0
*/
function twentyfourteen_widgets_init() {
require get_template_directory() . ‘/inc/widgets.php’;
register_widget( ‘Twenty_Fourteen_Ephemera_Widget’ );
register_sidebar( array(
‘name’ => __( ‘Primary Sidebar’, ‘twentyfourteen’ ),
‘id’ => ‘sidebar-1’,
‘description’ => __( ‘Main sidebar that appears on the left.’, ‘twentyfourteen’ ),
‘before_widget’ => ‘<aside id="%1$s" class="widget %2$s">‘,
‘after_widget’ => ‘</aside>‘,
‘before_title’ => ‘<h1 class="widget-title">‘,
‘after_title’ => ‘</h1>‘,
) );
register_sidebar( array(
‘name’ => __( ‘Content Sidebar’, ‘twentyfourteen’ ),
‘id’ => ‘sidebar-2’,
‘description’ => __( ‘Additional sidebar that appears on the right.’, ‘twentyfourteen’ ),
‘before_widget’ => ‘<aside id="%1$s" class="widget %2$s">‘,
‘after_widget’ => ‘</aside>‘,
‘before_title’ => ‘<h1 class="widget-title">‘,
‘after_title’ => ‘</h1>‘,
) );
register_sidebar( array(
‘name’ => __( ‘Footer Widget Area’, ‘twentyfourteen’ ),
‘id’ => ‘sidebar-3’,
‘description’ => __( ‘Appears in the footer section of the site.’, ‘twentyfourteen’ ),
‘before_widget’ => ‘<aside id="%1$s" class="widget %2$s">‘,
‘after_widget’ => ‘</aside>‘,
‘before_title’ => ‘<h1 class="widget-title">‘,
‘after_title’ => ‘</h1>‘,
) );
}
add_action( ‘widgets_init’, ‘twentyfourteen_widgets_init’ );
/**
* Register Lato Google font for Twenty Fourteen.
*
* @since Twenty Fourteen 1.0
*
* @return string
*/
function twentyfourteen_font_url() {
$font_url = »;
/*
* Translators: If there are characters in your language that are not supported
* by Lato, translate this to ‘off’. Do not translate into your own language.
*/
if ( ‘off’ !== _x( ‘on’, ‘Lato font: on or off’, ‘twentyfourteen’ ) ) {
$font_url = add_query_arg( ‘family’, urlencode( ‘Lato:300,400,700,900,300italic,400italic,700italic’ ), « //fonts.googleapis.com/css » );
}
return $font_url;
}
/**
* Enqueue scripts and styles for the front end.
*
* @since Twenty Fourteen 1.0
*/
function twentyfourteen_scripts() {
// Add Lato font, used in the main stylesheet.
wp_enqueue_style( ‘twentyfourteen-lato’, twentyfourteen_font_url(), array(), null );
// Add Genericons font, used in the main stylesheet.
wp_enqueue_style( ‘genericons’, get_template_directory_uri() . ‘/genericons/genericons.css’, array(), ‘3.0.2’ );
// Load our main stylesheet.
wp_enqueue_style( ‘twentyfourteen-style’, get_stylesheet_uri(), array( ‘genericons’ ) );
// Load the Internet Explorer specific stylesheet.
wp_enqueue_style( ‘twentyfourteen-ie’, get_template_directory_uri() . ‘/css/ie.css’, array( ‘twentyfourteen-style’, ‘genericons’ ), ‘20131205’ );
wp_style_add_data( ‘twentyfourteen-ie’, ‘conditional’, ‘lt IE 9’ );
if ( is_singular() && comments_open() && get_option( ‘thread_comments’ ) ) {
wp_enqueue_script( ‘comment-reply’ );
}
if ( is_singular() && wp_attachment_is_image() ) {
wp_enqueue_script( ‘twentyfourteen-keyboard-image-navigation’, get_template_directory_uri() . ‘/js/keyboard-image-navigation.js’, array( ‘jquery’ ), ‘20130402’ );
}
if ( is_active_sidebar( ‘sidebar-3’ ) ) {
wp_enqueue_script( ‘jquery-masonry’ );
}
if ( is_front_page() && ‘slider’ == get_theme_mod( ‘featured_content_layout’ ) ) {
wp_enqueue_script( ‘twentyfourteen-slider’, get_template_directory_uri() . ‘/js/slider.js’, array( ‘jquery’ ), ‘20131205’, true );
wp_localize_script( ‘twentyfourteen-slider’, ‘featuredSliderDefaults’, array(
‘prevText’ => __( ‘Previous’, ‘twentyfourteen’ ),
‘nextText’ => __( ‘Next’, ‘twentyfourteen’ )
) );
}
wp_enqueue_script( ‘twentyfourteen-script’, get_template_directory_uri() . ‘/js/functions.js’, array( ‘jquery’ ), ‘20140319’, true );
}
add_action( ‘wp_enqueue_scripts’, ‘twentyfourteen_scripts’ );
/**
* Enqueue Google fonts style to admin screen for custom header display.
*
* @since Twenty Fourteen 1.0
*/
function twentyfourteen_admin_fonts() {
wp_enqueue_style( ‘twentyfourteen-lato’, twentyfourteen_font_url(), array(), null );
}
add_action( ‘admin_print_scripts-appearance_page_custom-header’, ‘twentyfourteen_admin_fonts’ );
if ( ! function_exists( ‘twentyfourteen_the_attached_image’ ) ) :
/**
* Print the attached image with a link to the next attached image.
*
* @since Twenty Fourteen 1.0
*/
function twentyfourteen_the_attached_image() {
$post = get_post();
/**
* Filter the default Twenty Fourteen attachment size.
*
* @since Twenty Fourteen 1.0
*
* @param array $dimensions {
* An array of height and width dimensions.
*
* @type int $height Height of the image in pixels. Default 810.
* @type int $width Width of the image in pixels. Default 810.
* }
*/
$attachment_size = apply_filters( ‘twentyfourteen_attachment_size’, array( 810, 810 ) );
$next_attachment_url = wp_get_attachment_url();
/*
* Grab the IDs of all the image attachments in a gallery so we can get the URL
* of the next adjacent image in a gallery, or the first image (if we’re
* looking at the last image in a gallery), or, in a gallery of one, just the
* link to that image file.
*/
$attachment_ids = get_posts( array(
‘post_parent’ => $post->post_parent,
‘fields’ => ‘ids’,
‘numberposts’ => -1,
‘post_status’ => ‘inherit’,
‘post_type’ => ‘attachment’,
‘post_mime_type’ => ‘image’,
‘order’ => ‘ASC’,
‘orderby’ => ‘menu_order ID’,
) );
// If there is more than 1 attachment in a gallery…
if ( count( $attachment_ids ) > 1 ) {
foreach ( $attachment_ids as $attachment_id ) {
if ( $attachment_id == $post->ID ) {
$next_id = current( $attachment_ids );
break;
}
}
// get the URL of the next image attachment…
if ( $next_id ) {
$next_attachment_url = get_attachment_link( $next_id );
}
// or get the URL of the first image attachment.
else {
$next_attachment_url = get_attachment_link( array_shift( $attachment_ids ) );
}
}
printf( ‘<a href="%1$s" rel="attachment">%2$s</a>‘,
esc_url( $next_attachment_url ),
wp_get_attachment_image( $post->ID, $attachment_size )
);
}
endif;
if ( ! function_exists( ‘twentyfourteen_list_authors’ ) ) :
/**
* Print a list of all site contributors who published at least one post.
*
* @since Twenty Fourteen 1.0
*/
function twentyfourteen_list_authors() {
$contributor_ids = get_users( array(
‘fields’ => ‘ID’,
‘orderby’ => ‘post_count’,
‘order’ => ‘DESC’,
‘who’ => ‘authors’,
) );
foreach ( $contributor_ids as $contributor_id ) :
$post_count = count_user_posts( $contributor_id );
// Move on if user has not published a post (yet).
if ( ! $post_count ) {
continue;
}
?>
<div class="contributor">
<div class="contributor-info">
<div class="contributor-avatar"></div>
<div class="contributor-summary">
<h2 class="contributor-name"></h2>
<p class="contributor-bio">
</p>
<a class="button contributor-posts-link" href=" »>
</a>
</div><!-- .contributor-summary -->
</div><!-- .contributor-info -->
</div><!-- .contributor -->
= 2 || $page >= 2 ) {
$title = « $title $sep » . sprintf( __( ‘Page %s’, ‘twentyfourteen’ ), max( $paged, $page ) );
}
return $title;
}
add_filter( ‘wp_title’, ‘twentyfourteen_wp_title’, 10, 2 );
// Implement Custom Header features.
require get_template_directory() . ‘/inc/custom-header.php’;
// Custom template tags for this theme.
require get_template_directory() . ‘/inc/template-tags.php’;
// Add Theme Customizer functionality.
require get_template_directory() . ‘/inc/customizer.php’;
/*
* Add Featured Content functionality.
*
* To overwrite in a plugin, define your own Featured_Content class on or
* before the ‘setup_theme’ hook.
*/
if ( ! class_exists( ‘Featured_Content’ ) && ‘plugins.php’ !== $GLOBALS[‘pagenow’] ) {
require get_template_directory() . ‘/inc/featured-content.php’;
}
/** Génèse des ancres
*/
function replace_ca($matches){
return ».$matches[3]. »;
}
//Ajout d’un filtre sur le contenu
add_filter(‘the_content’, ‘add_anchor_to_title’, 12);
function add_anchor_to_title($content){
if(is_singular(‘post’)){ // s’il s’agit d’un article
global $post;
$pattern = « /(.*?)/i »;
$content = preg_replace_callback($pattern, ‘replace_ca’, $content);
return $content;
}else{
return $content;
}
}
/** Function automenu( $echo = false )
*/
function automenu(){
global $post;
$obj = ‘<nav class="sommaire-article"><ul>‘;
$original_content = $post->post_content;
//on récupère les titres
$patt = « /(.*?)/i »;
preg_match_all($patt, $original_content, $results);
//on génère les liens
foreach ($results[3] as $k=> $r) {
$obj .= ‘<li><a href="#'.sanitize_title($r).'" class="title_lvl'.$results[1][$k].'">‘.$niveau.$r.’</a></li>‘;
}
$obj .= ‘</nav>‘;
if ( $echo )
echo $obj;
else
return $obj;
}
// shortcode
add_shortcode(‘sommaire’,’automenu’);
// template function
automenu( true );Quand j’essaie de la placer dans le functions.php de mon twentyfourteen-child, après l’avoir enlevé du parent, je n’ai pas de msg d’erreur mais le code de la fonction apparait dans toutes mes pages et dans tous mes articles. A mon avis il manque un petit bout, mais lequel? (et pourquoi ça ne pose pas de problème dans le parent?…)
__( ‘First Footer Widget Area’, ‘twentyfourteen’ ),
‘id’ => ‘sidebar-4’,
‘description’ => __( ‘First footer widget area’, ‘twentyfourteen’ ),
‘before_widget’ => ‘<div class="textwidget">‘,
‘after_widget’ => ‘</div>‘,
‘before_title’ => ‘<h3 class="widget-title">‘,
‘after_title’ => ‘</h3>‘,
) );
// Area 6, located in the footer. Empty by default.
register_sidebar( array(
‘name’ => __( ‘Second Footer Widget Area’, ‘twentyfourteen’ ),
‘id’ => ‘sidebar-5’,
‘description’ => __( ‘Second footer widget area’, ‘twentyfourteen’ ),
‘before_widget’ => ‘<div class="textwidget">‘,
‘after_widget’ => ‘</div>‘,
‘before_title’ => ‘<h3 class="widget-title">‘,
‘after_title’ => ‘</h3>‘,
) );
// Area 7, located in the footer. Empty by default.
register_sidebar( array(
‘name’ => __( ‘Third Footer Widget Area’, ‘twentyfourteen’ ),
‘id’ => ‘sidebar-6’,
‘description’ => __( ‘The third footer widget area’, ‘twentyfourteen’ ),
‘before_widget’ => ‘<div class="textwidget">‘,
‘after_widget’ => ‘</div>‘,
‘before_title’ => ‘<h3 class="widget-title">‘,
‘after_title’ => ‘</h3>‘,
) );
// Area 8, located in the footer. Empty by default.
register_sidebar( array(
‘name’ => __( ‘Fourth Footer Widget Area’, ‘twentyfourteen’ ),
‘id’ => ‘sidebar-7’,
‘description’ => __( ‘The fourth footer widget area’, ‘twentyfourteen’ ),
‘before_widget’ => ‘<div class="textwidget">‘,
‘after_widget’ => ‘</div>‘,
‘before_title’ => ‘<h3 class="widget-title">‘,
‘after_title’ => ‘</h3>‘,
) );
}
?>
/** Génèse des ancres
*/
function replace_ca($matches){
return ».$matches[3]. »;
}
//Ajout d’un filtre sur le contenu
add_filter(‘the_content’, ‘add_anchor_to_title’, 12);
function add_anchor_to_title($content){
if(is_singular(‘post’)){ // s’il s’agit d’un article
global $post;
$pattern = « /(.*?)/i »;
$content = preg_replace_callback($pattern, ‘replace_ca’, $content);
return $content;
}else{
return $content;
}
}
/** Function automenu( $echo = false )
*/
function automenu(){
global $post;
$obj = ‘<nav class="sommaire-article"><ul>‘;
$original_content = $post->post_content;
//on récupère les titres
$patt = « /(.*?)/i »;
preg_match_all($patt, $original_content, $results);
//on génère les liens
foreach ($results[3] as $k=> $r) {
$obj .= ‘<li><a href="#'.sanitize_title($r).'" class="title_lvl'.$results[1][$k].'">‘.$niveau.$r.’</a></li>‘;
}
$obj .= ‘</nav>‘;
if ( $echo )
echo $obj;
else
return $obj;
}
// shortcode
add_shortcode(‘sommaire’,’automenu’);
// template function
automenu( true );La première partie du code ci-dessus (création de zone widgetisable)fonctionne bien…
C’est vrai que l’28 juillet 2014 à 10 h 58 min #771856Le premier fichier est-il l’intégralité du fichier funcyions.php du thème parent ?
Comment s’appelle la focntion de vabeo ?28 juillet 2014 à 11 h 01 min #771857Dans le deuxième fichier, il y a une balise de fermeture de session php prématurée à la ligne 43, juste avant le commentaire « geneses des ancres » :
}
?>/* Génèse des ancres
Il faut la supprimer (inutile de la mettre à la fin du function.php car il n’y en a pas nativement sous WordPress
28 juillet 2014 à 11 h 05 min #771858A votre place, j’en feari un petit plugin.
Il suffit de mettre ce code dans un fihiser avec une entete comme celle-ci :< ?php
/**
* Plugin Name: Nom du plugin
* Plugin URI: URI du plugin (si vous le mettez a disposition sur un site)
* Description: Description du plugin et de son contenu
* Version: Version du plugin (si vous le faites évoluer avec un système de version)
* Author: Votre nom (car c'est votre plugin)
* Author URI: l'URI de votre site
* License: La ou les license(s) relative(s) à votre plugin
*/Voir : http://www.deepintheweb.com/creer-un-plugin-wordpress/#.U9YuLlPBD24
Puis de placer ce fichier php dans un dossier et de placer le tout dans le dossier plugin.cela permet à ce sommaire de fonctionner même si vous changez de thèmes, c’est beaucoup plus pratique.
28 juillet 2014 à 11 h 26 min #771859Un ENORME Merci Luciole,
La fonction fonctionne également à partir de l’enfant maintenant. La fonction de Wabeo commençait effectivement à la génèse des Hanchor. Je retiens ton conseil pour le plugin mais puis-je encore profiter de ton expertise. D’après Wabeo si je veux (tiens, tiens) appeler dans un template, par exemple single.php, il suffit d’y insérer:// template function
automenu( true );J’ai tenté de le faire mais sans succès…
<div id="primary" class="content-area">
<div id="content" class="site-content" role="main">
</div><!-- #content -->
</div><!-- #primary -->
<?php
get_sidebar( 'content' );
get_sidebar();
get_footer();Aurais-je laissé traîner un espace ou une mauvaise virgule?
28 juillet 2014 à 11 h 53 min #771860Pour voir les erreurs, modifiez le wp-config.php en mettant le debugage à true, ce qui affichera les erreurs à l’écarn :
define(‘WP_DEBUG’, true);
Je ne vois pas pourquoi il est mis
automenu( true );
puisque la focntion automenu() est définie sans paramètre.
Essayezautomenu();
28 juillet 2014 à 12 h 12 min #771861Ah, je viens de comprendre pourquoi je n’arrivais pas à lire le tuto !
C’est à cause du navigateur Maxthon qui n’interprète pas le CSS comme Firefox. Avec Firefox, ce tuto est parfaitement lisible.28 juillet 2014 à 13 h 49 min #771862Oui, même si le déroulement du menu ne me semble pas des plus pratique (je n’ai pas un très grand écran) ça me semblait quand-même visible 🙂
Je continue à chercher pour l’automenu… je vous tiens au courant.
Mais merci encore pour votre aide!!!30 juillet 2014 à 11 h 33 min #771863Bonjour Luciole,
En passant wp-config en mode débug, j’ai obtenu deux « Notice: Undefined variable: »Le premier sur la ligne $original_content = $post->post_content;
Le second sur la ligne echo $obj;
Depuis, je me documente sur php, je fouille les forums … mais sans réussite.J’ai bien tenté if( ! isset( $obj ) ) $obj = 0; pour initialiser $obj si il n’existe pas et j’ai aussi tenté de retirer les bouts de code mais ça a encore fait pire…
Avez-vous une idée de ce que je devrais faire?
Pensez-vous que je peux simplement replacer le DEBUG en FALSE et continuer le développement?Un tout grand merci d’avance pour votre aide!!!
A bientôt30 juillet 2014 à 11 h 36 min #771864Copiez collez les messages d’erreurs intégraux ainsi que l’intégralité de votre fichier sur lequel vous travaillez.
30 juillet 2014 à 12 h 00 min #771865Merci pour votre rapidité, voici le functions.php:
__( ‘First Footer Widget Area’, ‘twentyfourteen’ ),
‘id’ => ‘sidebar-4’,
‘description’ => __( ‘First footer widget area’, ‘twentyfourteen’ ),
‘before_widget’ => ‘<div class="textwidget">‘,
‘after_widget’ => ‘</div>‘,
‘before_title’ => ‘<h3 class="widget-title">‘,
‘after_title’ => ‘</h3>‘,
) );
// Area 6, located in the footer. Empty by default.
register_sidebar( array(
‘name’ => __( ‘Second Footer Widget Area’, ‘twentyfourteen’ ),
‘id’ => ‘sidebar-5’,
‘description’ => __( ‘Second footer widget area’, ‘twentyfourteen’ ),
‘before_widget’ => ‘<div class="textwidget">‘,
‘after_widget’ => ‘</div>‘,
‘before_title’ => ‘<h3 class="widget-title">‘,
‘after_title’ => ‘</h3>‘,
) );
// Area 7, located in the footer. Empty by default.
register_sidebar( array(
‘name’ => __( ‘Third Footer Widget Area’, ‘twentyfourteen’ ),
‘id’ => ‘sidebar-6’,
‘description’ => __( ‘The third footer widget area’, ‘twentyfourteen’ ),
‘before_widget’ => ‘<div class="textwidget">‘,
‘after_widget’ => ‘</div>‘,
‘before_title’ => ‘<h3 class="widget-title">‘,
‘after_title’ => ‘</h3>‘,
) );
// Area 8, located in the footer. Empty by default.
register_sidebar( array(
‘name’ => __( ‘Fourth Footer Widget Area’, ‘twentyfourteen’ ),
‘id’ => ‘sidebar-7’,
‘description’ => __( ‘The fourth footer widget area’, ‘twentyfourteen’ ),
‘before_widget’ => ‘<div class="textwidget">‘,
‘after_widget’ => ‘</div>‘,
‘before_title’ => ‘<h3 class="widget-title">‘,
‘after_title’ => ‘</h3>‘,
) );
}
/** Génèse des ancres
*/
function replace_ca($matches){
return ».$matches[3]. »;
}
//Ajout d’un filtre sur le contenu
add_filter(‘the_content’, ‘add_anchor_to_title’, 12);
function add_anchor_to_title($content){
if(is_singular(‘post’)){ // s’il s’agit d’un article
global $post;
$pattern = « /(.*?)/i »;
$content = preg_replace_callback($pattern, ‘replace_ca’, $content);
return $content;
}else{
return $content;
}
}
/** Function automenu( $echo = false )
*/
function automenu(){
global $post;
$obj = ‘<nav class="sommaire-article"><ul>‘;
$original_content = $post->post_content;
//on récupère les titres
$patt = « /(.*?)/i »;
preg_match_all($patt, $original_content, $results);
//on génère les liens
foreach ($results[3] as $k=> $r) {
$obj .= ‘<li><a href="#'.sanitize_title($r).'" class="title_lvl'.$results[1][$k].'">‘.$niveau.$r.’</a></li>‘;
}
$obj .= ‘</nav>‘;
if ( $echo )
echo $obj;
else
return $obj;
}
// shortcode
add_shortcode(‘sommaire’,’automenu’);
//template
automenu( true );Et les deux messages d’erreur:
( ! ) Notice: Trying to get property of non-object in C:wampwwwallnewishwp-contentthemestwentyfourteen-childfunctions.php on line 66
Call Stack
# Time Memory Function Location
1 0.0006 250944 {main}( ) ..index.php:0
2 0.0010 254480 require( ‘C:wampwwwallnewishwp-blog-header.php’ ) ..index.php:17
3 0.0013 271240 require_once( ‘C:wampwwwallnewishwp-load.php’ ) ..wp-blog-header.php:12
4 0.0017 282560 require_once( ‘C:wampwwwallnewishwp-config.php’ ) ..wp-load.php:29
5 0.0026 379296 require_once( ‘C:wampwwwallnewishwp-settings.php’ ) ..wp-config.php:90
6 0.1910 18931920 include( ‘C:wampwwwallnewishwp-contentthemestwentyfourteen-childfunctions.php’ ) ..wp-settings.php:326
7 0.1913 18941616 automenu( ) ..functions.php:85( ! ) Notice: Undefined variable: echo in C:wampwwwallnewishwp-contentthemestwentyfourteen-childfunctions.php on line 78
Call Stack
# Time Memory Function Location
1 0.0006 250944 {main}( ) ..index.php:0
2 0.0010 254480 require( ‘C:wampwwwallnewishwp-blog-header.php’ ) ..index.php:17
3 0.0013 271240 require_once( ‘C:wampwwwallnewishwp-load.php’ ) ..wp-blog-header.php:12
4 0.0017 282560 require_once( ‘C:wampwwwallnewishwp-config.php’ ) ..wp-load.php:29
5 0.0026 379296 require_once( ‘C:wampwwwallnewishwp-settings.php’ ) ..wp-config.php:90
6 0.1910 18931920 include( ‘C:wampwwwallnewishwp-contentthemestwentyfourteen-childfunctions.php’ ) ..wp-settings.php:326
7 0.1913 18941616 automenu( ) ..functions.php:85Merci encore
30 juillet 2014 à 12 h 14 min #771866le problème vient du fait que dans son tuto, le code complet ne correspond pas aux extrait qu’il donne auaparvant.
La fonxction automenu dans son tuto est donnée sous deux versions différentes, l’une sans la numératation, l’autre avec.
elles sont toutes les deux écrite avecfunction automenu( $echo = false )
, elle nécessitent donc un argument (true ou false) pour fonctionner.
Or, dans votre fichier, cette fonction n’est pas la même.
Commencez par remplacer cette fonction par celle parmi les deux de son tuto qui vous convient le mieux.30 juillet 2014 à 12 h 48 min #771867Super merci beaucoup Luciole!!! J’ai l’impression que ça débloque aussi mon problème d’insertion dans single.php mais je dois encore trouvé où le mettre…
Passez une excellente journée!!!30 juillet 2014 à 13 h 08 min #771868Il explique dans son tuto, que vous devez le placer dans la boucle de WordPress.
La boucle de WordPress est décrite ici dans le codex :Il est précisé : http://codex.wordpress.org/fr:La_Boucle
La Boucle commence ici :
et finit là :
par exemple, celle du fichier single.php de twentu thirteen est celle-ci (j’ai placé dedans l’appel automenu(true); entre deux balises PHP ouvrante et fermante ::
Vous devrez certainement, l’ajouter aux fichier content.php, single.php et page.php et peut-être d’autres fichiers de votre thème si nécessaire selon ce qu’il affiche (ils doivent avoir la boucvle)
4 août 2014 à 14 h 06 min #771869Donc voilà, pour résumer la solution sans plugin pour créer un sommaire dans wordpress:
– Wabeo présente un tuto ultra complet à suivre à la lettre (code résumé à la fin) pour obtenir un sommaire dont les titres sont numérotés.
– Pour les nuls (comme moi) qui souhaitent intégrer un sommaire sans numérotation supplémentaire (car ils utilisent déjà une système de puces et/ou de numéros pour organiser leurs articles) il suffit :
1. D’ajouter ce qui suit dans functions.php :
/**
Génèse des ancres
*/
function replace_ca($matches){
return ».$matches[3]. »;
}
//Ajout d’un filtre sur le contenu
add_filter(‘the_content’, ‘add_anchor_to_title’, 12);
function add_anchor_to_title($content){
if(is_singular(‘post’)){ // s’il s’agit d’un article
global $post;
$pattern = « /(.*?)/i »;
$content = preg_replace_callback($pattern, ‘replace_ca’, $content);
return $content;
}else{
return $content;
}
}
function automenu( $echo = false ){
global $post;
$obj = ‘<nav class="sommaire-article"><h1 class="widget-title">Sommaire</h1><ul>‘;
$original_content = $post->post_content;
//on récupère les titres
$patt = « /(.*?)/i »;
preg_match_all($patt, $original_content, $results);
//on génère les liens
foreach ($results[3] as $k=> $r) {
$obj .= ‘<li><a class="title_lvl'.$results[1][$k].' " href="#'.sanitize_title($r).'">‘.$r.’</a></li>‘;
}
$obj .= ‘</ul></nav>‘;
if ( $echo )
echo $obj;
else
return $obj;
}
// shortcode
add_shortcode(‘sommaire’,’automenu’);2.a. D’ajouter dans single.php, content.php, sidebar.php ou un autre modèle:
Alors qu’il est conseillé de l’intégrer dans le loop, en ce qui me concerne, je l’utilise sans problème dans une sidebar réservée à mes articles…
2.b. D’ajouter dans certains articles[sommaire]
3. De formater la classe « sommaire-article » dans style.css (attention wabeo utilise un ‘id’ à la place dans functions.php)
.sommaire-article nav {
font-size: 80%;
max-width: 210px;
position: fixed;
}
.sommaire-article ul{
font-size: 80%;
list-style: none outside none !important;
max-width: 210px;
}
.sommaire-article a{
color: #777777 !important;
}
.sommaire-article a:hover{
color: #e5007e !important;
}Remarque: le déplacement fluide dans l’article fonctionne en ajoutant le code suivant dans le fichier .js principal du thème…
// Scroll le sommaire.
jQuery(document).ready(function($){
$(document).on(‘click’,’.sommaire-article a’,function(){
var h = $(this).attr(‘href’);
$(‘body,html’).animate({
scrollTop:$(h).offset().top
}, 500);
return false;
});
});Dans mon cas, avec Twentyfourteen-child, je l’ai ajouté au functions.js de twentyfourteen que j’ai ensuite enregistré dans twentyfourteen-child/js
Voilà au cas où qqn d’autres coincerait sur le tuto… et ne souhaiterait pas pour autant passer par un plugin…
Bon amusement et encore merci à Luciole pour ses lumières… -
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.