Új hozzászólás Aktív témák
-
-
-
-
válasz
FeniX- #21266 üzenetére
Meg lennék lepve, ugyanis ez a kód pár hónapja még működött:
/* +-10 nap tűréssel gyűjti ki az évfordulókat */
'meta_query' => array(
'relation' => 'AND',
'key' => 'evfordulo',
'value' => '[0-9]{4}'.date('md',strtotime("-10 days"))
),
array(
'key' => 'evfordulo',
'compare' => '<=',
'value' => '[0-9]{4}'.date('md',strtotime("+10 days"))
),
),Igaz WP-n belül get_posts fügvényel lekérdezve. Most meg nem ad vissza találatot.
Nem tudom hogy a PHP verzió, vagy WP verzió változása okozta-e de mindegy is. Most arra kéne rájönnöm hogy WP-n belül hogyan bírhatom működésre ezt a fajta lekérdezést, vagy közvetlen adatbázis lekérdezéssel ahogy az előbb próbáltam.Akkor csak az marad, hogy kiszámolok minden napot és egyesével felfűzöm a lekérdezésbe?
-
válasz
FeniX- #21262 üzenetére
Köszi!
De pont nem a LIKE-ot szeretném, hanem egy konkrét tartományt lekérdezni.
A like azért nem a barátom, mert ott nem tudok intervallumot kezelni. Konkrétan a AND $wpdb->postmeta.meta_value LIKE '%1102' csak a mai napi évfordulókat keresi le. Hogyan lesz belőle +-1 hét?
Vagy még nem esett le, hogy azt hogyan kell. Hiszen a hónap elejét végét hogyan kezelem? Ugye a mai nap -1 hét az 1026 lesz.Az évszámtól függetlenül a (mai dátum -15 nap)-tól a (mai dátum +15napig)
AND $wpdb->postmeta.meta_value >= '[0-9]{4}'.date('md',strtotime('-15 days'));
AND $wpdb->postmeta.meta_value <= '[0-9]{4}'.date('md',strtotime('+15 days'));
Vagyis a regexp-ben azt próbálom leírni, hogy bármilyen évszámmal kezdődő dátum érdekel, de csak a megadott tartományon belül. De valamiért nem működik. Akkor sem, ha %1003 és %1202 közötti értékre keresek rá.
Vagy a lekérdezéskor külön jelezni kell valahaol, hogy regexp-es értékadást használok?
-
Közben sikerült kisakkozni, hogyan kell közvetlenül kikérdezni:
$a = '1986'.date('md',strtotime('-10 days'));
$b = '1986'.date('md',strtotime('+10 days'));
global $wpdb;
$posts = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_type='post'
AND ID IN(
SELECT post_id FROM $wpdb->postmeta WHERE $wpdb->postmeta.meta_key='evfordulo'
AND $wpdb->postmeta.meta_value >= '$a'
AND $wpdb->postmeta.meta_value <= '$b'
) ORDER BY post_date DESC");
$i = 0;
echo '<br>';
while($i < count($posts)){
echo $posts[$i]->ID.'<br>';
echo $posts[$i]->post_title.'<br>';
$i++;
}
De hogyan tudom kimaszkozni az éveket? Az
a$ = '[0-9]{4}'.date('md',strtotime('-10 days'));
már nem működik. -
válasz
nevemfel #21259 üzenetére
add_filter( 'posts_where', 'custom_posts_where', 10, 2 );
function custom_posts_where( $where, &$wp_query )
{
global $wpdb;
if ( $custom_post_meta_value = $wp_query->get( 'custom_value' ) ) {
$where .= ' AND ' . $wpdb->postmeta . '.meta_key = "evfordulo" AND ' . $wpdb->postmeta . '.meta_value LIKE \'' . esc_sql( like_escape( $custom_post_meta_value ) ) . '\'';
}
return $where;
}
$args = array(
'post_type' => 'post',
'meta_query' => array(
'relation'=> 'AND',
array(
'key' => 'evfordulo',
'compare' => 'LIKE',
// 'value' => date('md',strtotime("+10 days"))
'custom_value' => date('md',strtotime("+10 days"))
)
)
);
Azt érteni vélem, hogy ha a lekérdezésben találkozik egy "custom_value"-val, akkor azt beilleszti a lekérdezésbe. Ugyanakkor nem végez szűrést. Minden bejegyzést kilistáz.
Ha a custom value-t kikomentelem, akkor és élesítem a sima value-t, akkor máris szűkülnek a találatok, vagyis látszólag nem működik ez a funkció. -
válasz
nevemfel #21257 üzenetére
Köszi a tippeket! Igen, ezt az egyedi query-t én is láttam, de túl bonyolultnak tűnik. Egyáltalán nem értem (még?)a működését, és a próbálkozásaim sorra kudarcba fulladtak (a MariaDB szintaktikai hibára hivatkozva eldobta).
Viszont egy nem túl elegáns, de működő megoldást találtam:array(
'post_type' => 'post',
'posts_per_page' => 8,
'orderby' => 'post_date',
'order' => 'DESC',
'category' => 'current',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'evfordulo',
'compare' => 'REGEXP',
'value' => '[0-9]{4}'.date('md',strtotime("-10 days"))
),
array(
'key' => 'evfordulo',
'compare' => 'REGEXP',
'value' => '[0-9]{4}'.date('md',strtotime("-9 days"))
),
array(
'key' => 'evfordulo',
'compare' => 'REGEXP',
'value' => '[0-9]{4}'.date('md',strtotime("-8 days"))
),
... és így tovább egészen a +10. napig. -
válasz
nevemfel #21255 üzenetére
Köszi a tippet! Sajna sem a regexp, se a * nem jött be.
'value' => '[0-9]{4}1021',
'compare' => 'LIKE'
'value' => '*1021',
'compare' => 'LIKE'
viszont a
'value' => '20221021',
'compare' => 'LIKE'
ugyanúgy megtalálja mint az '='
Működik a
'value' => '1021',
'compare' => 'LIKE'
is, de ez bárhol azonos egyenlőséget keres 2010210 ugyanaz mint a 20221021 -
válasz
FeniX- #21253 üzenetére
Köszi!
Közben lett egy fura problémám:
$posts = get_posts(
array(
'numberposts' => 8,
'post_type' => 'post',
/* +-31 nap tűréssel gyűjti ki az évfordulókat */
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'evfordulo',
'compare' => '>=',
'value' => '19860913'
//'value' => '[0-9]{4}'.date('md',strtotime("-31 days"))
),
array(
'key' => 'evfordulo',
'compare' => '<=',
'value' => '19861114'
//'value' => '[0-9]{4}'.date('md'.strtotime("+31 days"))
),
),
)
Ha konkrét értéket írok be, akkor működik, ha regex-el kimaszkozom az évszámot, akkor nem működik a lekérdezés.
Miért? -
A Wordpress-hez faragok kódot, és a lekérdezésnél elakadtam:
$posts = get_posts(array(
'numberposts' => 8,
'post_type' => 'post',
'meta_key' => 'evfordulo',
'meta_value' => '20210506'));Ez kikeresi azt a 8 bejegyzést, aminek az évfordulója 20210506-ra van állítva.
- Be lehet állítani hogy az évszámtól függetlenül minden május 6-ra eső bejegyzést megkeressen? A '????0506' nem hozott eredményt.Ha nem talál 8 ilyen bejegyzést, akkor bővítse ki a keresést, pl. 20210505-től 20210507-ig, ha még mindég nincs meg a 8 találat, akkor 20210504-től 20210508-ig keressen,...
Ha elsőre jóval több a találatok száma mint 8, akkor véletlenszerűen válasszon belőlük.
-
-
Az in_array()-nak van vmi trükkje? Mert ez nem működik:
$categories = get_the_category();
if ( ! empty( $categories ) ) {
if (in_array('Blabla',$categories)) {
...
}
else {
...
}
}
Pedig a var_dump($categories); szerint van benne Blabla:
array(2) {
[0]=> object(WP_Term)#17210 (16) {
["term_id"]=> int(48)
["name"]=> string(6) "Teszt"
["slug"]=> string(5) "teszt"
["term_group"]=> int(0)
["term_taxonomy_id"]=> int(48)
["taxonomy"]=> string(8) "category"
["description"]=> string(1) "A"
["parent"]=> int(0)
["count"]=> int(11900)
["filter"]=> string(3) "raw"
["cat_ID"]=> int(48)
["category_count"]=> int(11900)
["category_description"]=> string(1) "A"
["cat_name"]=> string(6) "Teszt"
["category_nicename"]=> string(5) "teszt"
["category_parent"]=> int(0)
}
[1]=> object(WP_Term)#17465 (16) {
["term_id"]=> int(5906)
["name"]=> string(6) "Blabla"
["slug"]=> string(6) "blabla"
["term_group"]=> int(0)
["term_taxonomy_id"]=> int(5906)
["taxonomy"]=> string(8) "category"
["description"]=> string(0) ""
["parent"]=> int(0)
["count"]=> int(4)
["filter"]=> string(3) "raw"
["cat_ID"]=> int(5906)
["category_count"]=> int(4)
["category_description"]=> string(0) ""
["cat_name"]=> string(6) "Blabla"
["category_nicename"]=> string(6) "blabla"
["category_parent"]=> int(0)
}
}
Valamit rosszul csinálok, de mit?
Új hozzászólás Aktív témák
- BESZÁMÍTÁS! Gigabyte H610M i5 12400F 32GB DDR4 512GB SSD Intel ARC A770 16GB Rampage SHIVA 650W
- BESZÁMÍTÁS! ASUS B460M i7 10700 16GB DDR4 512GB SSD GTX 1080Ti 11GB KOLINK Observatory TG TT 600W
- BESZÁMÍTÁS! ASUS H170M i7 6700 16GB DDR4 512GB SSD GTX 1660 Ti 6GB KOLINK Observatory Lite TT 500W
- BESZÁMÍTÁS! ASRock A520M R3 3100 16GB DDR4 512GB SSD RX 6500XT 4GB BitFenix Neos Thermaltake 500W
- BESZÁMÍTÁS! Asus H110M i5 7400 8GB DDR4 250GB SSD 1TB HDD GTX 1650 4GB ZALMAN S3 TG Chieftec 600W
- Lenovo IdeaPad 3 15IAU7 garancia 109990
- Bomba ár! Fujitsu LifeBook U727 - i3-7GEN I 16GB I 256SSD I 12,5" FHD I Cam I W11 I Garancia!
- BESZÁMÍTÁS! Gigabyte H510M i5 11400F 16GB DDR4 512GB SSD RX 5700XT Rampage SHIVA Zalman 600W
- Telefon felvásárlás!! Samsung Galaxy A12/Samsung Galaxy A22/Samsung Galaxy A32/Samsung Galaxy A52
- BESZÁMÍTÁS! Gigabyte H510M i5 10400F 16GB DDR4 512GB SSD GTX 1080Ti 11GB Rampage SHIVA Zalman 600W
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest