web-dev-qa-db-ja.com

ブログのURLに相対的なURLでメニューにカスタムリンクを追加する方法

私の仕事の一部はWordpressのウェブサイトを作成することです。私は通常クライアントがそれをレビューするテストサーバーにアップロードされるのに十分な何かがあるまで私のラップトップで作業します。

私はいつもhttp://local.example.com/のようなドメインでWordpressのインストールをしているので、私は新しいプロジェクトごとにVirtualHostを作成しています。 http://testserver.com/arbitrary/path/example/

問題は、たとえば/events/を指すカスタムリンクをメニューに追加すると、ローカルでhttp://local.example.com/events/へのリンクを作成することで問題なく機能することですが、テストサーバーでは、リンクがhttp://testserver/events/を指すことは明らかです。右。
私が欲しいのは私のローカル環境とテストサーバーの両方で機能するURLをカスタムリンクに与えることです。

私はhomesiteurlのWordpressオプションを以下のように変更する問題をすでに処理しています。

  • ローカルデータベースの設定を変更する
  • データベースのダンプを作成する
  • サーバー上のデータベースを更新する
  • ローカルオプションを復元します。

カスタムリンクに完全なURLを使用したくないし、サーバーのデータベースを更新する必要があるたびにそれらをサーバーのURLに置き換える必要もありません。

投稿コンテンツ内のリンクには、2つのショートコードを追加することで問題を解決するプラグインがあります。 http://wordpress.org/extend/plugins/url-shortcodes/ カスタムリンクの場合も同様です。

12
Willington Vega

私はまたこれのための解決策を探していました、そして私は簡単なものを見つけました。

これは、URLフィールドに入力する必要があるものです。

/index.php/internal-site-name

enter image description here

それはちょうどうまくいきます!

よろしくクリス

8
Christian Hatz

head meta <base href=" ">タグを使用すると、ページ内のすべての相対アンカーにベースURLが与えられます。

参照:
https://www.w3.org/TR/html4/struct/links.html
12.4パス情報:BASE要素

ワードプレスの相対カスタムリンク:
サイトのURLをすべてのアンカーのベースURLにする場合は、これを<head>内の theme/header.php に追加します。

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

私はあなたに遅れるかもしれませんが、他の人を助けることができることを知っています。

3
David Pacheco

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

このコードで簡単なプラグインを作成してテストサーバー上でのみアクティブにすることも、テストサイト環境が存在するときに条件付きでこのフィルタを適用するある種のフラグを作成することもできます。

3
Milo

メニュー設定のカスタムURLでは、[blogurl]への相対リンクを使用することができます。その秘密は、相対URLを単一の/で始めることです。単一の/がカスタムURLを開始すると、システムは通常のhttp://を前に付けず、実行時に現在のblogURLがターゲットURLに生成されます。

_ example _
ホームページにアクセスしたい場合は、カスタムURLとして単に/を入力してください。

フォルダbbforums内のインデックスページに行きたい場合は、カスタムURLとして/bbforumsを入れてください。

これにより、メニューのすべてのカスタムリンクに新しいblogURLをハードコードしなくても、サイトをテストドメインに移動できます。

例えば:
私のブログがhttp://example.comでサブドメインhttp://test.example.comでテストしたい場合は、上記の相対URL規約を使用して、メニューの問題なくサイトをテストと本番の間で移動できます。私はサイトを移動するためにXClonerプラグインを使ってこのアプローチをうまくテストしました。

1
user41251

最初に このプラグインをインストールする必要があります 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'::

これでフロントエンドに行き、ショートコードが機能することを確認できます。

1
Manimaran