Como adicionar um link personalizado a um menu com um URL relativo ao URL do blog

11

Parte do meu trabalho é criar sites do Wordpress. Eu costumo trabalhar no meu laptop até ter algo bom o suficiente para ser enviado para o servidor de teste, onde o cliente o analisa.

Eu crio um VirtualHost para cada novo projeto, então estou sempre trabalhando com uma instalação do Wordpress em um domínio que se parece com http://local.example.com/ , mas quando o site é enviado para o servidor de teste (não controlado por mim), o domínio pode acabar sendo algo como http://testserver.com/arbitrary/path/example/ .

O problema é que, se eu adicionar um link personalizado a um menu que aponte para, por exemplo, /events/ , funcionaria localmente criando um link para http://local.example.com/events/ , mas no servidor de teste, o link apontará para http://testserver/events/ , o que obviamente não está correto.
O que eu quero é fornecer ao link personalizado uma URL que funcione tanto no meu ambiente local quanto no servidor de teste.

Eu já lidei com o problema de alterar as opções home e siteurl Wordpress por:

  • alterando essas configurações no banco de dados local
  • criando um dump do banco de dados
  • atualize o banco de dados no servidor
  • restaurando as opções locais.

Eu não quero usar URLs completos para os links personalizados e ter que substituí-los pela URL do servidor toda vez que eu precisar atualizar o banco de dados do servidor.

Para links dentro do conteúdo da postagem, há um plug-in que resolve o problema de adicionar dois códigos de acesso: enlace , mas não consegui encontrar algo semelhante para links personalizados.

    
por Willington Vega 11.03.2011 / 21:45

5 respostas

7

Eu também estava procurando uma solução para isso e achei simples.

Isso é o que você precisa colocar no campo de URL:

/index.php/internal-site-name

Funciona muito bem!

Atenciosamente Chris

    
por Christian Hatz 02.09.2016 / 20:54
2

Usar a tag <base href=" "> na meta principal fornecerá uma URL básica para todas as âncoras relativas na página.

Referência: enlace
12.4 Informação do caminho: o elemento BASE

Links personalizados relativos no wordpress:
Se você quiser que o URL do site seja o URL base de todas as âncoras, adicione isso ao theme / header.php dentro do <head> :

<base href="<?php echo site_url(); ?>/">

eu sei que poderia ser tarde para você, mas poderia ajudar alguém.

    
por David Pacheco 03.05.2017 / 17:59
1

Em um URL personalizado na configuração do menu, é possível usar links relativos ao [blogurl]. O segredo é iniciar o URL relativo com um único / . Quando um / inicia o URL personalizado, o sistema não prefixará o http:// típico e, em tempo de execução, o blogURL atual será gerado no URL de destino.

EXEMPLO
Se você quiser ir para sua página inicial, basta colocar / como o URL personalizado

Se você quiser ir para a página de índice na pasta bbforums , coloque /bbforums como o URL personalizado.

Isso permite que você mova um site para um domínio de teste sem precisar codificar o novo blogURL em todos os links personalizados dos menus.

Por exemplo:
Se meu blog for http://example.com e eu quiser testá-lo em um subdomínio http://test.example.com , o site poderá ser movido entre teste e produção sem problemas de menu usando a convenção de URL relativa mencionada acima. Eu testei com sucesso esta abordagem usando o plugin XCloner para mover o site.

    
por user41251 02.11.2013 / 03:44
1

Primeiro, você precisa instalar este plug-in para obter códigos de acesso de URL.

Adicione este código ao seu arquivo functions.php em seu tema:

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 );
    } 
}

Em seguida, você precisa chamar a função wp_nav_menu dos arquivos de modelos:

$arg = array( 
    'menu'        => "main-menu", 
    'echo'        => true, 
    'fallback_cb' => 'wp_page_menu', 
    'depth'       => 0, 
    'walker'      => new description_walker() 
); 
wp_nav_menu( $arg );

É isso. Em seguida, vá para a seção do menu de back-end.

Por exemplo, se eu quiser fornecer o URL da página para um link personalizado, adicionarei o seguinte:

http://::blogurl-id='1302'::

Agora você pode ir para o front-end e verificar se o shortcode funciona.

    
por Manimaran 16.03.2012 / 14:57
0

Você pode usar o filtro nav_menu_link_attributes para inspecionar e modificar o atributo href para cada item de menu antes de sua saída.

Neste exemplo, procuramos os atributos href que começam com / e prefixamos o URL do site de teste nesse caso:

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 );

Você pode criar um plug-in simples com esse código e ativá-lo apenas no servidor de teste ou criar algum tipo de sinalizador que condicionalmente aplique esse filtro quando o ambiente do site de teste estiver presente.

    
por Milo 03.05.2017 / 18:44

Tags