私の仕事の一部はWordpressのウェブサイトを作成することです。私は通常クライアントがそれをレビューするテストサーバーにアップロードされるのに十分な何かがあるまで私のラップトップで作業します。
私はいつもhttp://local.example.com/
のようなドメインでWordpressのインストールをしているので、私は新しいプロジェクトごとにVirtualHostを作成しています。 http://testserver.com/arbitrary/path/example/
。
問題は、たとえば/events/
を指すカスタムリンクをメニューに追加すると、ローカルでhttp://local.example.com/events/
へのリンクを作成することで問題なく機能することですが、テストサーバーでは、リンクがhttp://testserver/events/
を指すことは明らかです。右。
私が欲しいのは私のローカル環境とテストサーバーの両方で機能するURLをカスタムリンクに与えることです。
私はhome
とsiteurl
のWordpressオプションを以下のように変更する問題をすでに処理しています。
カスタムリンクに完全なURLを使用したくないし、サーバーのデータベースを更新する必要があるたびにそれらをサーバーのURLに置き換える必要もありません。
投稿コンテンツ内のリンクには、2つのショートコードを追加することで問題を解決するプラグインがあります。 http://wordpress.org/extend/plugins/url-shortcodes/ カスタムリンクの場合も同様です。
私はまたこれのための解決策を探していました、そして私は簡単なものを見つけました。
これは、URLフィールドに入力する必要があるものです。
/index.php/internal-site-name
それはちょうどうまくいきます!
よろしくクリス
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(); ?>/">
私はあなたに遅れるかもしれませんが、他の人を助けることができることを知っています。
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 );
このコードで簡単なプラグインを作成してテストサーバー上でのみアクティブにすることも、テストサイト環境が存在するときに条件付きでこのフィルタを適用するある種のフラグを作成することもできます。
メニュー設定のカスタムURLでは、[blogurl]への相対リンクを使用することができます。その秘密は、相対URLを単一の/
で始めることです。単一の/がカスタムURLを開始すると、システムは通常のhttp://
を前に付けず、実行時に現在のblogURLがターゲットURLに生成されます。
_ example _
ホームページにアクセスしたい場合は、カスタムURLとして単に/
を入力してください。
フォルダbbforums
内のインデックスページに行きたい場合は、カスタムURLとして/bbforums
を入れてください。
これにより、メニューのすべてのカスタムリンクに新しいblogURLをハードコードしなくても、サイトをテストドメインに移動できます。
例えば:
私のブログがhttp://example.com
でサブドメインhttp://test.example.com
でテストしたい場合は、上記の相対URL規約を使用して、メニューの問題なくサイトをテストと本番の間で移動できます。私はサイトを移動するためにXClonerプラグインを使ってこのアプローチをうまくテストしました。
最初に このプラグインをインストールする必要があります 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'::
これでフロントエンドに行き、ショートコードが機能することを確認できます。