コード例 #1
0
function bogo_get_page_by_path($page_path, $locale = null, $post_type = 'page')
{
    global $wpdb;
    if (!bogo_is_available_locale($locale)) {
        $locale = bogo_get_default_locale();
    }
    $page_path = rawurlencode(urldecode($page_path));
    $page_path = str_replace('%2F', '/', $page_path);
    $page_path = str_replace('%20', ' ', $page_path);
    $parts = explode('/', trim($page_path, '/'));
    $parts = array_map('esc_sql', $parts);
    $parts = array_map('sanitize_title_for_query', $parts);
    $in_string = "'" . implode("','", $parts) . "'";
    $post_type_sql = $post_type;
    $wpdb->escape_by_ref($post_type_sql);
    $q = "SELECT ID, post_name, post_parent FROM {$wpdb->posts}";
    $q .= " LEFT JOIN {$wpdb->postmeta} ON ID = {$wpdb->postmeta}.post_id AND meta_key = '_locale'";
    $q .= " WHERE 1=1";
    $q .= " AND post_name IN ({$in_string})";
    $q .= " AND (post_type = '{$post_type_sql}' OR post_type = 'attachment')";
    $q .= " AND (1=0";
    $q .= $wpdb->prepare(" OR meta_value LIKE %s", $locale);
    $q .= bogo_is_default_locale($locale) ? " OR meta_id IS NULL" : "";
    $q .= ")";
    $pages = $wpdb->get_results($q, OBJECT_K);
    $revparts = array_reverse($parts);
    $foundid = 0;
    foreach ((array) $pages as $page) {
        if ($page->post_name != $revparts[0]) {
            continue;
        }
        $count = 0;
        $p = $page;
        while ($p->post_parent != 0 && isset($pages[$p->post_parent])) {
            $count++;
            $parent = $pages[$p->post_parent];
            if (!isset($revparts[$count]) || $parent->post_name != $revparts[$count]) {
                break;
            }
            $p = $parent;
        }
        if ($p->post_parent == 0 && $count + 1 == count($revparts) && $p->post_name == $revparts[$count]) {
            $foundid = $page->ID;
            break;
        }
    }
    if ($foundid) {
        return get_page($foundid);
    }
    return null;
}
コード例 #2
0
function bogo_adjacent_post_where($where, $in_same_term, $excluded_terms)
{
    global $wpdb;
    $post = get_post();
    if ($post && bogo_is_localizable_post_type(get_post_type($post))) {
        $locale = bogo_get_post_locale($post->ID);
        $where .= " AND (1=0";
        $where .= $wpdb->prepare(" OR postmeta_bogo.meta_value LIKE %s", $locale);
        if (bogo_is_default_locale($locale)) {
            $where .= " OR postmeta_bogo.meta_id IS NULL";
        }
        $where .= ")";
    }
    return $where;
}
コード例 #3
0
function bogo_get_local_post($post_id)
{
    global $wpdb;
    if (is_admin() || empty($post_id)) {
        return $post_id;
    }
    $post_type = get_post_type($post_id);
    if (!post_type_exists($post_type) || !bogo_is_localizable_post_type($post_type)) {
        return $post_id;
    }
    $locale = get_locale();
    if (bogo_get_post_locale($post_id) == $locale) {
        return $post_id;
    }
    $original = get_post_meta($post_id, '_original_post', true);
    if (empty($original)) {
        $original = $post_id;
    }
    $q = "SELECT ID FROM {$wpdb->posts} AS posts";
    $q .= " LEFT JOIN {$wpdb->postmeta} AS pm1";
    $q .= " ON posts.ID = pm1.post_id AND pm1.meta_key = '_original_post'";
    $q .= " LEFT JOIN {$wpdb->postmeta} AS pm2";
    $q .= " ON posts.ID = pm2.post_id AND pm2.meta_key = '_locale'";
    $q .= " WHERE 1=1";
    $q .= $wpdb->prepare(" AND post_type = %s", $post_type);
    $q .= $wpdb->prepare(" AND (ID = %d OR pm1.meta_value = %d)", $original, $original);
    $q .= " AND (1=0";
    $q .= $wpdb->prepare(" OR pm2.meta_value LIKE %s", $locale);
    $q .= bogo_is_default_locale($locale) ? " OR pm2.meta_id IS NULL" : "";
    $q .= ")";
    $translation = absint($wpdb->get_var($q));
    if ($translation) {
        return $translation;
    }
    return $post_id;
}