web-dev-qa-db-ja.com

WPML出力せずにURLを取得

私は自分の言語を扱うためにqTranslateからWPMLに移行する過程にあります。

QTranslateを使うと、スラッグがあることを知っているページや投稿のURLを取得するための非常に簡単な方法がありました。$url = get_language_url(home_url($slug));

今WPMLで私はそれをする方法を見つけることができません...

icl_link_to_element関数がありますが、リンクをタグに直接出力します。さらに、投稿IDを知る必要があります。

スラッグを知っている、正しい言語の投稿へのリンクを取得する方法はありますか。

3
fkoessler

実際、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')を使わなければならないということです。投稿や階層化されていないページの場合は、スラッグをパラメータとして使用できます。

3
s1lv3r

次のコードを使用して、スラッグで投稿へのリンクを取得できます。

<?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)); 
    }
?>
0
Vinod Dalvi