• Resolved olligranlund

    (@olligranlund)


    Hello

    Currently when inspecting a page in the native language I get a set ID and locale, however when inspecting the translation the ID is the same but locale different. How can I get each of these pages URLs *somewhere else* with using eg. get_permalink or filters. Currently if I use get_permalink( SET_ID ), I’ll receive only one of the URLs when there are actually 2 pages using the same page ID. Is there any way of getting all the language versions of a certain page?

Viewing 9 replies - 1 through 9 (of 9 total)
  • Plugin Support Alex

    (@alexcozmoslabs)

    The post translations are not in fact separate posts and they are stored in a different MySQL table. TranslatePress does not create new posts for the translated versions of the original post. But the translated versions will have separate URLs. That means every page has a separate URL for each language no matter if that page is translated or not.

    Basically, the post ID is the same for both original content & its translations.

    Thread Starter olligranlund

    (@olligranlund)

    Hello Alex

    I noticed the same thing that you are re-using the same post-id for both language version. I’m currently developing a plugin and would like to add support for Translatepress but I’m unable to fully do that due to not having the right tools.

    I’m looking for a way to get the permalink of a specific page in specific language, do you offer any hook or function that could be utilized for this?

    The plugin that I’m developing creates dynamic pages with add_rewrite_rule and populates those with content. You pretty much choose a parent page, and if the parent page URL had some set sub-pages in the URL, the rewrite rule kicks in and returns a page according to the specs in the URL. E.g. “exampleurl.com/parent/post1234” where post1234 comes from a external source and is being served if we get a match at “exampleurl.com/parent/%s”.

    If you could provide some hook so that I could get the permalink of a specific language, I would be able to make the plugin I’m working on to support Translatepress fully.

    One example how it could look like:
    $value = apply_filters( ‘trp_permalink’, ‘domain.com/parent’, ‘de’ );

    and $value would become “domain.com/de/elternteil”

    Plugin Support Alex

    (@alexcozmoslabs)

    Construct the links based on home_url() The language parameter will get added automatically. There is an internal function get_url_for_language() that automatically adds the language parameter. Regardless of what you use, you’ll need to add data-no-translation on the links or we’ll try to process them and might remove the language param in certain cases.

    We will try to document this on our website: https://translatepress.com/docs/translatepress/

    Thread Starter olligranlund

    (@olligranlund)

    One isse that comes directly up when using home_url() is that I need to verify the data of various languages under one locale, hence needing somehow in a iteration to check what the permalink for a specific page is.

    Maybe this pseudocode helps to bring up the issue:

    e.g.
    $permalinks = [];
    $languages = get_all_used_two_letter_language_slugs();
    $parent_page_id = 123;
    foreach( $languages as $lang ){
    $permalinks[$lang] = get_permalink($parent_page_id);
    }

    The home_url() can maybe give the right language but I would still be missing the translated name of the page, if someone uses the Pro-version of your plugin. Also building the language manually in would not be feasible as the language could be /en/ or /english/ or something else.

    Thread Starter olligranlund

    (@olligranlund)

    Any updates on this?

    Plugin Author Cristian Antohe

    (@sareiodata)

    Hello,

    You shouldn’t really have to create that list of translated pages. If possible always create url’s based on the default language using site_url() instead of home_url(), or using WordPress functions like get_permalink(). Then list those url’s and TranslatePress will try to convert them when needed to their similar language.

    If you do need it, then use the rest api.

    The rest-api is processed through the translation engine in TranslatePress. So you can access it at /de/wp-json/wp/v2/posts for example. Basically every REST endpoint is processed when accessed via the language prefix.

    So you’ll now have a list of posts in that language, with the correct permalink.

    You can also access de/wp-json/wp/v2/posts/1 where 1 is the post ID. Again, you should receive a translated version.

    As of right now, we don’t have a simple function where you receive the slug of a particular.

    There are limitations of what we can do due to how we’re translating WordPress and there are projects where you should probably use a different translation plugin like WPML or Polylang. And there’s nothing wrong with that.

    Thread Starter olligranlund

    (@olligranlund)

    In my use case I would need the translation slugs during PHP-processing. I feel that it would be really wrong to have to do a wp_remote_get towards the internal API just to get a version of a URL in a different language. I would appreciate if you could expose some functions from the plugin that custom/integration solutions would be more manageable ??

    I think I could do a workaround with that rest-api solution but right now it feels much more tedious than it should be.

    Plugin Author Cristian Antohe

    (@sareiodata)

    Hi,

    We’ve added this docs page recently: https://translatepress.com/docs/developers/translating-an-internal-url/

    But it will retrieve the permalinks, not the slugs. I should have suggested this sooner.

    Hope it helps.

    Thread Starter olligranlund

    (@olligranlund)

    Hello

    This is enough for me to make a workaround with some home_url() and string replacements ?? Thank you for the updated instructions. I noticed that there is a small issue in the instructions with the parameter name.

    “$language” should be “$target_language”

    Also, you mention language code yet you show a locale code e.g. “en” vs “en_GB”. I tested this with language codes and got it working, maybe you could update the example to host “en” or some other language like “es” to clarify it.

Viewing 9 replies - 1 through 9 (of 9 total)
  • The topic ‘Get permalink of translated page’ is closed to new replies.