Получить все продукты с английской версии — WooCommerce & amp; WPML

Я разрабатываю веб-приложение, которое работает с базой данных WordPress. На моем веб-сайте (который работает с WooCommerce и WPML) у меня есть продукты на двух языках — английском (1-й) и сербском (2-й). Я написал код SQL, который получает продукты из базы данных, их обычные цены и цены продажи и т. Д., Но я хочу получить ТОЛЬКО продукты, где lang = en (продукты из английской версии). Проблема в том, что я не знаю, как их получить.

Простой SQL:

$sql = 'SELECT * from `wp_posts` WHERE post_type = product';

Это метод, который ВЫБРАТЬ из базы данных:

// SELECT
public function select (
$table_1 = ' wp_posts ',
$table_2 = ' wp_postmeta ',
$rows = ' t1.id, t1.post_title, guid, post_type ',
$where = ' t1.post_status = "publish" AND t1.post_type = "product" OR t1.post_type = "product_variation" ',
$groupby = ' t1.ID, t1.post_title '
) {

// Connect to database and set charset
$this->connect();
$this->conn->set_charset('utf8');// Published products
$sql = "SELECT $rows,
max(case when meta_key = '_regular_price' then t2.meta_value end) AS price,
max(case when meta_key = '_sale_price' then t2.meta_value end) AS sale,
max(case when meta_key = 'attribute_colors' then t2.meta_value end) AS colors,
max(case when meta_key = 'attribute_number' then t2.meta_value end)
FROM $table_1 AS t1
INNER JOIN $table_2 AS t2 ON ( t1.ID = t2.post_id )
WHERE $where
GROUP BY $groupby";

$result = mysqli_query($this->conn, $sql);
$published_products_count = mysqli_num_rows($result);// Trashed products
$trashed_sql = "SELECT post_status FROM `wp_posts`
WHERE post_status = 'trash'";

$trashed_result = mysqli_query($this->conn, $trashed_sql);
$trashed_products_count = mysqli_num_rows($trashed_result);// If results -> show them
if ($result) {

printf( "\t\t" . "<p>There are <strong>%d published</strong> products and <strong>%d trashed</strong>.</p>", $published_products_count, $trashed_products_count);

$table = '
<table class="pure-table pure-table-bordered">
<thead>
<tr>
<th>Row. №</th>
<th>ID</th>
<th>Product</th>
<th>Regular price</th>
<th>Sale price</th>
<th>Type</th>
<th>Edit</th>
</tr>
</thead>';

$row_number = 1;

while ($row = $result->fetch_assoc()) {

$table .= '
<tr>
<td>' . $row_number++ . '</td>
<td>' . $row["id"] . '</td>
<td><a href="http://www.enroll.rs/wp-admin/post.php?post=' . $row["id"] . '&action=edit" target="_blank">' . $row["post_title"] . '</a></td>
<td class="price">' . $row["price"] . '</td>
<td class="sale">' . $row["sale"] . '</td>
<td>' . $row["post_type"] . '</td>
<td><a href="edit_form.php?id=' . $row["id"] . '">Edit</a></td>
</tr>';
}

$table .= '
</table>';

echo $table;
}

// If no results
else {
echo 'There isn't any products';
}
}

Я надеюсь, что кто-нибудь поможет мне!

Заранее спасибо! 🙂

Постскриптум Приложение не основано на WordPress!

0

Решение

Плагин WPML создает несколько новых таблиц для управления многоязычностью, не влияя на стандартные таблицы сообщений WP. В частности, это создает wp_icl_translations таблица, где хранятся отношения между постами и языками.

Вам нужно добавить два новых оператора JOIN к вашему запросу:

JOIN wp_icl_translations t ON wp_posts.ID = t.element_id AND t.element_type = 'post_product' JOIN wp_icl_languages l ON t.language_code=l.code AND l.active=1

Затем вы можете добавить новое условие к вашему ГДЕ утверждение как это:

AND t.language_code='en'

Надеюсь это поможет.
С уважением.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]