블로그 URL과 관련된 URL을 사용하여 메뉴에 사용자 정의 링크를 추가하는 방법


16

내 작업의 일부는 Wordpress 웹 사이트를 만드는 것입니다. 나는 보통 클라이언트가 그것을 검토하는 테스트 서버에 업로드하기에 충분한 무언가를 가질 때까지 랩톱에서 작업합니다.

나는 모든 새 프로젝트에 대해 VirtualHost를 만들므로 항상 같은 도메인에서 Wordpress 설치를 사용하고 http://local.example.com/있지만 사이트가 테스트 서버에 업로드되면 (내가 제어하지 않음) 도메인이 다음과 같이 끝날 수 있습니다 http://testserver.com/arbitrary/path/example/.

문제는 예를 들어을 가리키는 메뉴에 사용자 정의 링크를 추가하면에 /events/대한 링크를 로컬로 생성하는 http://local.example.com/events/것이 좋지만 테스트 서버에서는 링크가을 가리킬 것 http://testserver/events/입니다.
내가 원하는 것은 사용자 정의 링크에 로컬 환경과 테스트 서버 모두에서 작동하는 URL을 제공하는 것입니다.

나는 이미 다음 home과 같이 siteurlWordpress 옵션 을 변경하는 문제를 처리합니다 .

  • 로컬 데이터베이스에서 해당 설정 변경
  • 데이터베이스 덤프 작성
  • 서버에서 데이터베이스를 업데이트
  • 로컬 옵션 복원

사용자 정의 링크에 전체 URL을 사용하고 싶지 않으며 서버 데이터베이스를 업데이트해야 할 때마다 URL을 서버 URL로 바꿔야합니다.

게시물 내용 내부 링크는이 해결할 수있는 문제 문제가이 단축 코드 추가하는 플러그인입니다 : http://wordpress.org/extend/plugins/url-shortcodes/은 ,하지만 사용자 정의 링크 비슷한 뭔가를 찾을 수 없어 .


5
윌링 턴, 어디에서나 작동하는 URL로 당신을 도울 수 없습니다. 내가 할 수있는 일은 spectacu.la/search-and-replace-for-wordpress-databases를 가리 키는 것입니다 . 나는 David의 검색 및 바꾸기를 꽤 오랫동안 사용 해 왔으며 직렬화 된 데이터에서도 url을 변경하는 것이 좋습니다. 그래서 내가하는 방법입니다 : 하드 코딩 된 링크 및 데이터베이스를 다른 도메인으로 옮긴 후 변환하십시오. 행운을 빕니다, Peter
Peter

지금까지 필자가 개발 환경에서 실제 환경으로 성공적으로 이동하는 유일한 방법은 SQL 덤프를 수행하여 홈 및 사이트 URL 옵션을 변경하는 것이 아니라 전체 파일을 검색하고 바꾸는 것입니다. URL이 1000 번 이상있는 파일이 있습니다. (여전히 그것이 어떻게 최고치에 도달했는지는 모르겠다)
Rob Williams

@Peter, @Rob은 답변 해 주셔서 감사합니다. 검색 및 교체가 유일한 해결책 일까 걱정했지만 먼저 문의하고 싶었습니다. 해당 스크립트를 살펴 보겠습니다.
Willington Vega

가장 좋은 방법은 내가 제안한 것과 같은 스크립트를 사용하는 것입니다. 검색 및 바꾸기 문자열의 길이가 동일하지 않은 경우 DB 덤프에서 텍스트 검색 및 바꾸기는 직렬화 된 데이터 (특히 wp_options에서 발견됨)를 고정합니다. 해당 데이터는 길이 스펙으로 db에 저장되므로 . 성공, 피터
피터

답변:


9

나는 또한 이것에 대한 해결책을 찾고 있었고 간단한 것을 발견했다.

이것은 URL 필드에 배치해야하는 것입니다.

/index.php/internal-site-name

여기에 이미지 설명을 입력하십시오

잘 작동합니다!

안부 인사 크리스


1
이것은 작동하지만 index.php를 포함하도록 URL을 변경합니다. 링크가 # 개인 단일 페이지 응용 프로그램의 경우 먼저 페이지를 새로 고친 다음 대상으로 처음으로 이동합니다. 그럼에도 불구하고 좋은 아이디어
Catalin Deaconescu

index.php 부분없이 / something을 사용했고 작동하는 것 같습니다
user3808307

4

nav_menu_link_attributes필터를 사용하여 출력하기 전에 각 메뉴 항목의 href 속성을 검사하고 수정할 수 있습니다 .

이 예에서는로 시작하는 모든 href 속성을 /찾고이 경우 테스트 사이트 URL을 추가합니다.

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

이 코드로 간단한 플러그인을 만들어 테스트 서버에서만 활성화하거나 테스트 사이트 환경이있을 때이 필터를 조건부로 적용하는 일종의 플래그를 만들 수 있습니다.


그것이 내가 찾은 최고의 방법입니다! 그러나 @Milo하십시오.이 똑똑한 워드 프레스 기본 URL로 세 번째 줄을 변경하십시오 (wordpress의 site_url입니다) : $ atts [ 'href'] = site_url (). $ atts [ 'href'];
gtamborero

2

<base href=" ">헤드 메타에 태그를 사용 하면 페이지의 모든 상대 앵커에 기본 URL이 제공됩니다.

참조 :
https://www.w3.org/TR/html4/struct/links.html
12.4 경로 정보 : BASE 요소

워드 프레스의 상대 사용자 정의 링크 :
사이트 URL이 모든 앵커의 기본 URL이되도록 하려면 : 내의 theme / header.php에 이것을 추가 하십시오 <head>.

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

나는 당신에게 늦을 수 있지만 다른 사람을 도울 수 있다는 것을 알고 있습니다.


유망 해 보인다. 테스트하고 다시보고하겠습니다.
Eric Hepperle-CodeSlayer2010

ehepperle.com/sites/in-progress/some-wp-site-root/사이트 루트를 명시 적으로 설정하지 않으면 경로와 함께 작동하지 않습니다 . base태그를 사용하면 웹 개발 속도가 눈에 띄게 향상되지 않습니다. 다른 사이트로 마이그레이션 할 때는 기본을 다시 정의해야하기 때문입니다. 그러나 href 값의 길이를 줄이는 값을 볼 수 있습니다.
Eric Hepperle-CodeSlayer2010

아이디어는 좋지만 wp 사용자 정의 메뉴에서 상대 경로를 사용할 때 Wordpress가 기본 경로를 무시하는 것 같습니다 (예 : / contact)
gtamborero

1

메뉴 설정의 사용자 정의 URL에서 [blogurl]에 대한 상대 링크를 사용할 수 있습니다. 비밀은 단일로 상대 URL을 시작하는 것 /입니다. 단일 /가 사용자 정의 URL을 시작하면 시스템은 일반적인 URL을 앞에 두지 않으며 http://실행시 대상 URL에 현재 blogURL이 생성됩니다.


홈페이지로 이동 /하려면 사용자 정의 URL로 입력하십시오.

당신이 폴더에 인덱스 페이지로 이동하려면 bbforums다음 넣어 /bbforums사용자 정의 URL로.

이를 통해 메뉴의 모든 사용자 정의 링크에서 새 blogURL을 하드 코딩하지 않고도 사이트를 테스트 도메인으로 이동할 수 있습니다.

예를 들어 :
내 블로그가 http://example.com있고 하위 도메인에서 블로그 를 테스트하려는 경우 http://test.example.com위에서 언급 한 상대 URL 규칙을 사용하여 메뉴 문제없이 테스트와 프로덕션간에 사이트를 이동할 수 있습니다. 사이트를 이동시키기 위해 XCloner 플러그인을 사용하여이 방법을 성공적으로 테스트했습니다.


6
슬래시가있는 블로그 URL (예 : example.com/blog) 에서는 작동하지 않습니다 . 메뉴 항목 '/'을 따라 가면 example.com으로 이동 합니다.
Jimpanzee

1

먼저 URL 단축 코드를 위해이 플러그인 을 설치해야 합니다 .

이 코드를 functions.php테마 의 파일에 추가하십시오 .

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

그런 다음 wp_nav_menu템플릿 파일에서 함수 를 호출해야 합니다.

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

그게 다야. 그런 다음 백엔드 메뉴 섹션으로 이동하십시오.

예를 들어, 페이지 URL을 사용자 정의 링크에 제공하려면 다음과 같이 추가하십시오.

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

이제 프론트 엔드로 가서 단축 코드가 작동하는지 확인할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.