私は自分の言語を扱うためにqTranslateからWPMLに移行する過程にあります。
QTranslateを使うと、スラッグがあることを知っているページや投稿のURLを取得するための非常に簡単な方法がありました。$url = get_language_url(home_url($slug));
今WPMLで私はそれをする方法を見つけることができません...
icl_link_to_element
関数がありますが、リンクをタグに直接出力します。さらに、投稿IDを知る必要があります。
スラッグを知っている、正しい言語の投稿へのリンクを取得する方法はありますか。
実際、Wordpressにはslug/post-nameで投稿を受け取るための本当の機能がありません。しかし、 get_page_by_path() を使うことができますので、カスタムクエリを使う必要はありません。
if(function_exists('icl_object_id')) {
$post = get_page_by_path('your-slug');
$id = icl_object_id($post->ID,'post',true);
$link = get_permalink($id);
}
ここでの唯一の違いは、階層構造を持っている場合はフルパス、すなわち('parent-page/sub-page'
)を使わなければならないということです。投稿や階層化されていないページの場合は、スラッグをパラメータとして使用できます。
次のコードを使用して、スラッグで投稿へのリンクを取得できます。
<?php
global $wpdb;
$id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = 'name-of-slug'");
if(function_exists('icl_object_id')){
get_permalink(icl_object_id($id,'post',true));
}
?>