Comment ajouter un lien personnalisé à un menu avec une URL relative à l'URL du blog
-
-
Willington,je nepeuxpas vous aider à une URL quifonctionnen'importe où.Ce queje peuxfaire,c'est vous diriger vers http://spectacu.la/search-and-replace-for-wordpress-databases/.J'utilise la rechercheet le remplacement de David depuis un certaintempset jetravaillebien pour changer,parexemple.url -même dans les données sérialisées.Voilà commentje fais:juste des liens codésen duret convertir après avoir déplacé labase de données vers un autre domaine.Bonne chance,PeterWillington, i cant help you to an url that works anywhere. What i can do is point you to http://spectacu.la/search-and-replace-for-wordpress-databases/. I've been using David's search&replace for quite some time and i works good to change e.g. url's - even when in serialized data. So that is how i do it: just hardcoded links and convert after moving the database to another domain. Good luck, Peter
- 5
- 2011-03-11
- Peter
-
Jusqu'àprésent,le seulmoyen quej'aitrouvépourpasser avec succès d'unenvironnement de développement à unenvironnementen directest après avoireffectué le vidage SQLpoureffectuer une rechercheet un remplacement sur l'ensemble dufichier,pas seulement changer les options homeet siteurl.J'aieu desfichiers où l'URL était làplus de 1000fois.(jene saistoujourspas commentil a réussi à atteindre ceniveau :))So far the only way that I've found to successfully move from a dev environment to a live environment is after doing the SQL dump to do a search and replace on the entire file, not just change the home and siteurl options. I've had files where the URL was in there over 1000 times. (still don't know how it managed to get that high :) )
- 0
- 2011-03-13
- Rob Williams
-
@Peter,@Robmerci lesgars d'avoir répondu,j'avaispeur que la rechercheet le remplacement soit la seule solution,maisje voulais d'abord demander.Je vaisjeter un œil à ce script.@Peter, @Rob thank you guys for answering, I was afraid that search-and-replace was the only solution but wanted to ask first. I'll take a look at that script.
- 0
- 2011-03-13
- Willington Vega
-
Lemieuxest d'utiliser un script comme celui quej'ai suggéré.Notez qu'une recherche detexteet un remplacement dans un vidage de labase de donnéesbousilleront les données sérialisées (enparticuliertrouvées dans wp_options) siet quand la longueur des chaînes de rechercheet de remplacementn'estpas lamême,puisque ces données sont stockées dans labase de données avec une spécification de longueur.Succès,PeterBest is to use a script like the one I suggested. Notice that a text search & replace in a db dump will screw up serialized data (especially found in wp_options) if and when the length of the search and replace strings is not the same, since that data is stored in the db with a length specification. Success, Peter
- 0
- 2011-03-14
- Peter
-
5 réponses
- votes
-
- 2016-09-02
Je cherchais également une solution à ceproblèmeet j'en aitrouvé une simple.
Voici ce que vous devezplacer dans le champ URL:
/index.php/internal-site-name
Celafonctionnetrèsbien!
Meilleures salutations Chris
I was also looking for a solution for this and I found simple one.
This is what you need to place into the URL field:
/index.php/internal-site-name
It works just fine!
Best Regards Chris
-
Celafonctionnemais cela change également l'urlpourinclure l'index.php.Dans le cas d'une application d'une seulepage avec # liens,elle actualiserait d'abord lapage,puis vous conduirait à la destination (uniquement lapremièrefois).Même ainsi,unebonneidéeThis works but it also changes the url to include the index.php. In the case of a single page application with # links, it would first refresh the page and then take you to the destination (only the first time). Even so, a good idea
- 1
- 2017-03-21
- Catalin Deaconescu
-
J'ai utilisé/quelque chose sans lapartieindex.phpet semblefonctionnerI used /something without the index.php part and seems to work
- 0
- 2020-02-17
- user3808307
-
- 2017-05-03
Vouspouvez utiliser lefiltre
nav_menu_link_attributes
pourinspecteret modifier l'attribut href de chaque élément demenu avant sa sortie.Dans cetexemple,nous recherchonstous les attributs href commençantpar
/
,et ajoutons l'URL du site detest dans ce cas:function wpd_nav_menu_link_atts( $atts, $item, $args, $depth ){ if( '/' == substr( $atts['href'], 0, 1 ) ){ $atts['href'] = 'http://testserver.com/example' . $atts['href']; } return $atts; } add_filter( 'nav_menu_link_attributes', 'wpd_nav_menu_link_atts', 20, 4 );
Vouspouvez créer un simpleplugin avec ce codeet l'activer uniquement sur votre serveur detest,ou créer une sorte d'indicateur qui applique conditionnellement cefiltre lorsque l'environnement du site detestestprésent.
You can use the
nav_menu_link_attributes
filter to inspect and modify the href attribute for each menu item before it is output.In this example, we look for any href attributes that start with a
/
, and prepend the test site URL in that case:function wpd_nav_menu_link_atts( $atts, $item, $args, $depth ){ if( '/' == substr( $atts['href'], 0, 1 ) ){ $atts['href'] = 'http://testserver.com/example' . $atts['href']; } return $atts; } add_filter( 'nav_menu_link_attributes', 'wpd_nav_menu_link_atts', 20, 4 );
You could create a simple plugin with this code and activate it only on your test server, or create some sort of flag that conditionally applies this filter when the test site environment is present.
-
C'est lemeilleurmoyen quej'aitrouvé!Mais s'il vousplaît @Milo,changez latroisième ligne avec cette URL debase wordpressplusintelligente (obtenez l'url site_url de wordpress): $ atts ['href']=site_url ().$ atts ['href'];That's the best way I found! But please @Milo, change the third line with this smarter wordpress base url (get's the site_url of wordpress): $atts['href'] = site_url() . $atts['href'];
- 1
- 2019-10-22
- gtamborero
-
- 2013-11-02
Sur une URLpersonnalisée dans la configuration dumenu,ilestpossible d'utiliser des liens relatifs vers [blogurl]. Le secretest de démarrer l'URL relative avec un seul
/
. Lorsqu'un seul/démarre l'URLpersonnalisée,le systèmen'ajouterapas lepréfixehttp://
typique,puis l'URLblog actuelle seragénérée dans l'URL cible aumoment de l'exécution.EXEMPLE
Si vous souhaitez accéder à votrepage d'accueil,il vous suffit demettre/
comme URLpersonnaliséeSi vous souhaitez accéder à lapage d'index dans le dossier
bbforums
,mettez/bbforums
comme URLpersonnalisée.Cela vouspermet de déplacer un site vers un domaine detest sans avoir à coderen dur lenouveaublogURL danstous les lienspersonnaliséspour lesmenus.
Parexemple:
Simonblogesthttp://example.com
et queje souhaite letester dans un sous-domainehttp://test.example.com
,le sitepeut être déplacéentre lestestset laproduction sansproblèmes demenuen utilisant la convention d'URL relativementionnée ci-dessus. J'aitesté avec succès cette approcheen utilisant leplugin XClonerpour déplacer le site.On a custom URL in the Menu setup it is possible to use relative links to the [blogurl]. The secret is to start the relative URL with a single
/
. When a single / starts the custom URL the system will not prepend the typicalhttp://
and then the current blogURL will be generated in the target URL at execution time.EXAMPLE
If you want to go to your home page, simply put/
as the custom URLIf you want to go to the index page in the folder
bbforums
then put/bbforums
as the custom URL.This allows you to move a site to a test domain without having to hard code the new blogURL in all the custom links for the menus.
For Example:
If my blog ishttp://example.com
and I want to test it in a subdomainhttp://test.example.com
the site can be moved between test and production without menu problems using the relative URL convention noted above. I have successfully tested this approach using the XCloner plugin to move the site.-
Celane fonctionnepaspour les URL deblog comportant desbarres obliques,parexemple http://www.example.com/blog/.Suivre l'élément demenu «/» vous amènerait simplement à http://example.com.This doesn't work for blog URLs that have slashes, for example http://www.example.com/blog/. Following the menu item '/' would just take you to http://example.com.
- 6
- 2014-10-03
- Jimbali
-
- 2017-05-03
L'utilisation de labalise
<base href=" ">
dans latêtemeta donnera une URL debase àtoutes les ancres relatives de lapage.Référence:
https://www.w3.org/TR/html4/struct/links.html
12.4 Informations sur le chemin: l'élément BASELienspersonnalisés relatifs dans wordpress:
Si vous voulez que l'URL du site soit l'URL debase detoutes les ancres,ajoutez-la au theme/header.php dans<head>
:<base href="<?php echo site_url(); ?>/">
Je sais qu'ilpourrait êtreen retardpour vous,maisje pourrais aider quelqu'un d'autre.
Using
<base href=" ">
tag in the head meta will give a base url to all the relative anchors in the page.Reference:
https://www.w3.org/TR/html4/struct/links.html
12.4 Path information: the BASE elementRelative custom links in wordpress:
If you want the site url to be the base url of all anchors add this to the theme / header.php within the<head>
:<base href="<?php echo site_url(); ?>/">
i know could be late for you but could help someone else.
-
Cela sembleprometteur.Je vais letesteret faire un rapport.Looks promising. I'll test it out and report back.
- 0
- 2019-04-05
- Eric Hepperle - CodeSlayer2010
-
Nefonctionnepas avec des chemins comme `ehepperle.com/sites/in-progress/some-wp-site-root/` sauf si vous définissezexplicitement la racine du site.La vitesse de développement Webn'estpas sensiblement amélioréeen utilisant labalise `base`,car lorsque vousmigrez vers un autre site,vous devrez redéfinir ce qu'est labase.Cependant,je peux voir la valeur de la réduction de la longueur des valeurs href.Doesn't work with paths like `ehepperle.com/sites/in-progress/some-wp-site-root/` unless you explicitly set the site root. Web development speed is not noticeably improved using `base` tag, since when you migrate to another site, you will have to re-define what base is. However, I can see the value in reducing the length of href values.
- 0
- 2019-04-05
- Eric Hepperle - CodeSlayer2010
-
L'idéeestbonnemais semble que Wordpressignore le chemin debase lors de l'utilisation de chemins relatifs sur lesmenuspersonnalisés wp (parexemple:/contact)The Idea is good but seems that Wordpress ignores the Base path when using relative paths on wp custom menus (for example: /contact)
- 0
- 2019-10-22
- gtamborero
-
- 2012-03-16
Vous devez d'abordinstaller ceplugin pour les shortcodes d'URL.
Ajoutez ce code à votrefichier
functions.php
dans votrethème:class description_walker extends Walker_Nav_Menu { function start_el( &$output, $item, $depth, $args ) { global $wp_query; $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; $class_names = $value = ''; $classes = empty( $item->classes ) ? array() : (array) $item->classes; $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) ); $class_names = ' class="'. esc_attr( $class_names ) . '"'; $output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $class_names .'>'; $attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) . '"' : ''; $attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) . '"' : ''; $attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) . '"' : ''; // echo $item->url; $string = explode( '::', $item->url, 3 ); if ( $string[1] ) { $string[1] = str_replace( '-', ' ', $string[1] ); $item->url = do_shortcode( "[$string[1]]" ); } $attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : ''; $prepend = '<strong>'; $append = '</strong>'; $description = ! empty( $item->description ) ? '<span>' . esc_attr( $item->description ) . '</span>' : ''; if ( $depth != 0 ) { $description = $append = $prepend = ""; } $item_output = $args->before; $item_output .= '<a'. $attributes . '>'; $item_output .= $args->link_before . $prepend . apply_filters( 'the_title', $item->title, $item->ID ) . $append; $item_output .= $description . $args->link_after; $item_output .= '</a>'; $item_output .= $args->after; $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args ); } }
Ensuite,vous devez appeler lafonction
wp_nav_menu
àpartir desfichiers demodèles:$arg = array( 'menu' => "main-menu", 'echo' => true, 'fallback_cb' => 'wp_page_menu', 'depth' => 0, 'walker' => new description_walker() ); wp_nav_menu( $arg );
Voilà. Accédezensuite à la section dumenuprincipal.
Parexemple,sije veux donner l'URL de lapage à un lienpersonnalisé,je l'ajouterai comme ceci:
http://::blogurl-id='1302'::
Vouspouvezmaintenant accéder aufront-endet vérifier que le shortcodefonctionne.
First you have to install this plugin for URL shortcodes.
Add this code to your
functions.php
file in your theme:class description_walker extends Walker_Nav_Menu { function start_el( &$output, $item, $depth, $args ) { global $wp_query; $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; $class_names = $value = ''; $classes = empty( $item->classes ) ? array() : (array) $item->classes; $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) ); $class_names = ' class="'. esc_attr( $class_names ) . '"'; $output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $class_names .'>'; $attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) . '"' : ''; $attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) . '"' : ''; $attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) . '"' : ''; // echo $item->url; $string = explode( '::', $item->url, 3 ); if ( $string[1] ) { $string[1] = str_replace( '-', ' ', $string[1] ); $item->url = do_shortcode( "[$string[1]]" ); } $attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : ''; $prepend = '<strong>'; $append = '</strong>'; $description = ! empty( $item->description ) ? '<span>' . esc_attr( $item->description ) . '</span>' : ''; if ( $depth != 0 ) { $description = $append = $prepend = ""; } $item_output = $args->before; $item_output .= '<a'. $attributes . '>'; $item_output .= $args->link_before . $prepend . apply_filters( 'the_title', $item->title, $item->ID ) . $append; $item_output .= $description . $args->link_after; $item_output .= '</a>'; $item_output .= $args->after; $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args ); } }
Then you have to call the
wp_nav_menu
function from the templates files:$arg = array( 'menu' => "main-menu", 'echo' => true, 'fallback_cb' => 'wp_page_menu', 'depth' => 0, 'walker' => new description_walker() ); wp_nav_menu( $arg );
That's it. Then go to the back-end menu section.
For example, if I want to give the page URL to a custom link, I will add it like this:
http://::blogurl-id='1302'::
Now you can go to the front-end and check that the shortcode works.
Unepartie demontravail consiste à créer des sites Web Wordpress. Jetravaillegénéralement surmon ordinateurportablejusqu'à ce quej'aie quelque chose d'assezbonpour êtretéléchargé sur le serveur detest où le client l'examine.
Je crée un VirtualHostpour chaquenouveauprojet,doncje travailletoujours avec uneinstallation Wordpress dans un domaine qui ressemble à
http://local.example.com/
,mais lorsque le siteesttéléchargé sur le serveur detest (non contrôléparmoi),le domainepeutfinirpar être quelque chose commehttp://testserver.com/arbitrary/path/example/
.Leproblèmeest que sij'ajoute un lienpersonnalisé vers unmenu quipointe,parexemple,vers
/events/
,celafonctionneraitbien en localen créant un lien vershttp://local.example.com/events/
,mais dans le serveur detest,le lienpointera vershttp://testserver/events/
,ce quin'est évidemmentpas correct.Ce queje souhaite,c'est donner au lienpersonnalisé une URL quifonctionnerait à lafois surmonenvironnement localet sur le serveur detest.
Jegère déjà leproblème de lamodification des options
home
etsiteurl
Wordpressen:Jene veuxpas utiliser d'URL complètespour les lienspersonnaliséset devoir les remplacerpar l'URL du serveur chaquefois quej'aibesoin demettre àjour labase de données du serveur.
Pour les liens à l'intérieur du contenu de l'article,ilexiste unplugin qui résout leproblèmeen ajoutant deux shortcodes: http://wordpress.org/extend/plugins/url-shortcodes/,maisje n'aipasputrouver quelque chose de similairepour les lienspersonnalisés.