2013-09-28 17 views
7

Używam tej kwerendy w skrypcie PHP poza Wordpress, aby pobrać dane z ich wybrane obrazyPobierz wordpress posty z polecanymi obrazu za pośrednictwem SQL

SELECT (SELECT guid FROM wp_posts WHERE id = m.meta_value) AS url 
FROM wp_posts p, wp_postmeta m 
WHERE p.post_type = 'post' 
AND p.post_status = 'publish' 
AND p.id = m.post_id 
AND m.meta_key = '_thumbnail_id' 

... i to działa dobrze.

Ale w ten sposób otrzymuję pełny adres URL obrazu. Muszę pobrać "średnie" lub "miniaturowe" rozmiary tych zdjęć.

¿Jakikolwiek sposób osiągnąć ten cel?

Odpowiedz

1

Możesz wypróbować tę kwerendę dla rozmiaru miniatury, dla średniego obrazu nie jestem pewien co do odpowiedniego rozmiaru, jeśli znasz wymiar, a następnie utwórz niestandardowy alias, jak zrobiłem poniżej, używając rozszerzenia SUBSTRING_INDEX, aby uzyskać rozszerzenie pliku, a następnie użyłem CONCAT funkcja z kolumną post_name i wymiarami + rozszerzenie, podobnie można to zrobić dla średniej wielkości, ponieważ wszystkie przesłane pliki trafiają do folderu wysyłania, można analizować wygenerowane nazwy kciuków to original attachment name + -150x150 or other dimensions, więc z tej logiki kciuki otrzymują nazwę z wymiarami , załączniki do postu są przechowywane w post_meta z postem i mają kluczową nazwę _wp_attachment_metadata, która przechowuje wszystkie informacje o różnych rozmiarach pliku, ale w postaci serializowanej, więc w zapytaniu mysql nie możesz odserializować e dane

SELECT  
CONCAT(p.`post_name` ,'-150x150.', 
SUBSTRING_INDEX((SELECT `guid` FROM wp_posts WHERE id = m.meta_value), '.', -1))  
AS `thumbnail`, 
(SELECT guid FROM wp_posts WHERE id = m.meta_value) AS `full` 
FROM wp_posts p, wp_postmeta m 
WHERE p.post_type = 'post' 
AND p.post_status = 'publish' 
AND p.id = m.post_id 
AND m.meta_key = '_thumbnail_id' 

Ta kwerenda działa dla mnie, aby uzyskać miniaturę o rozmiarze 150 * 150 nadzieję, że pracuje dla Ciebie także

2

oto odpowiedź:

SELECT TITRE,DESCR,URL, CONCAT(LEFT(IMG, LENGTH(IMG) - LOCATE('.', 
REVERSE(IMG))),'-150x150.',SUBSTRING_INDEX(IMG, '.', -1)) AS IMG FROM (
SELECT  
p.`post_title` AS TITRE, 
(SELECT `meta_value` FROM wp_postmeta WHERE `post_id` = p.`ID` and `meta_key`='_yoast_wpseo_metadesc') AS DESCR, 
p.`guid` AS URL, 
(SELECT `guid` FROM wp_posts WHERE id = m.meta_value) AS IMG 
FROM wp_posts p, wp_postmeta m 
WHERE p.post_type = 'post' 
AND p.post_status = 'publish' 
AND p.id = m.post_id 
AND m.meta_key = '_thumbnail_id') TT 

where DESCR is not null 
2

Poniższe zapytanie, dostosowaną z powyższego rozwiązałem mój szczególny problem polegający na tym, że chciałem pobrać cztery ostatnie posty i ich polecane obrazy. Plus POST_NAME z którego mógłbym zbudować ładny URL

SELECT title, post_name, date, content, CONCAT(LEFT(image, LENGTH(image) - LOCATE('.', REVERSE(image))),'-150x150.',SUBSTRING_INDEX(image, '.', -1)) AS image 
FROM (
    SELECT  
    p.post_title AS title, 
    p.post_status AS 'status', 
    p.post_date AS date, 
    p.post_content AS content, 
    p.post_name AS post_name, 
    (SELECT `guid` FROM wp_posts WHERE id = m.meta_value) AS image 
    FROM wp_posts p, wp_postmeta m 
    WHERE p.post_type = 'post' 
    AND p.post_status = 'publish' 
    AND p.id = m.post_id 
    AND m.meta_key = '_thumbnail_id' 
    ORDER BY date DESC 
    LIMIT 4 
) TT 

Oczywiście stamtąd łatwo jest zrobić wyjątek itp przy użyciu:

for($i=0; $i< $num_rows; $i++){ 
    $post_content = mysql_result($query_result, $i, "content"); 
    $post_excerpt = substr($post_content, 0, 90); 
    $post_permalink = $post_url . mysql_result($query_result, $i, "post_name"); 

    echo $post_permalink; //etc 

} 
Powiązane problemy