එය කෝඩෙක්ස් හි නිබන්ධන වලින් අඩක් සහ බ්ලොග්ස්ෆියර් භාවිතය query_posts()
හා අඩක් භාවිතා කිරීම වැනි ය WP_Query
. ගනුදෙනුව කුමක්ද?
එය කෝඩෙක්ස් හි නිබන්ධන වලින් අඩක් සහ බ්ලොග්ස්ෆියර් භාවිතය query_posts()
හා අඩක් භාවිතා කිරීම වැනි ය WP_Query
. ගනුදෙනුව කුමක්ද?
Answers:
query_posts()
පිටුවක ප්රධාන විමසුම නව විමසුමේ නව අවස්ථාවකින් ප්රතිස්ථාපනය කිරීමෙන් එය වෙනස් කිරීම සඳහා ඕනෑවට වඩා සරල හා ගැටළු සහගත ක්රමයකි. එය අකාර්යක්ෂමයි (SQL විමසුම් නැවත ක්රියාත්මක කරයි) සහ සමහර තත්වයන් තුළ එය සම්පූර්ණයෙන්ම අසාර්ථක වනු ඇත (විශේෂයෙන් බොහෝ විට තනතුරු පේජින් සමඟ කටයුතු කිරීමේදී). ඕනෑම නවීන WP කේතයක් pre_get_posts
මේ සඳහා කොක්ක භාවිතා කිරීම වැනි වඩාත් විශ්වාසදායක ක්රම භාවිතා කළ යුතුය . TL; DR කිසි විටෙකත් query_posts () භාවිතා නොකරන්න .
get_posts()
භාවිතයේ ඉතා සමාන වන අතර එකම තර්ක පිළිගනී (විවිධ පෙරනිමි වැනි සමහර සූක්ෂ්මතාවයන් සහිතව), නමුත් පෝස්ට් සමූහයක් ලබා දෙයි, ගෝලීය විචල්යයන් වෙනස් නොකරයි, ඕනෑම තැනක භාවිතා කිරීමට ආරක්ෂිත වේ.
WP_Query
තිරය පිටුපස බලගන්වන පන්තියයි, නමුත් ඔබට ඔබේම අවස්ථාව නිර්මාණය කර වැඩ කළ හැකිය. ටිකක් සංකීර්ණ, අඩු සීමාවන්, ඕනෑම තැනක භාවිතා කිරීමට ආරක්ෂිතයි.
query_posts()
යනු කුඩා එතීමේ කාර්යයකි WP_Query
, එය කරන එකම අමතර දෙය (ගැලීම් $wp_query
query_posts()
සමඟ ප්රතිස්ථාපනය කිරීමෙන් WP_Query
කාර්ය සාධනයේ කිසිදු වෙනසක් සිදු නොවනු ඇත, මුල් පිටුවේ විමසුම තවමත් ක්රියාත්මක වන්නේ එය මූලික බරෙහි කොටසක් වන බැවිනි. ඔබගේ සැකිලි ගොනුවට කිසිසේත්ම ලූපයක් නොතිබුණද එම විමසුම් ක්රියාත්මක වේ.
query_posts
නැත වෙනස් සියලු දී ප්රධාන පුඩුවක්, එය විස්ථාපනය එය පසු එය දැනටමත් ක්රියාත්මක කර ඇත. ප්රධාන ලූපය වෙනස් කිරීමට හොඳම ක්රමය pre_get_posts
පෙරනයක් හරහා ය . developper.wordpress.com/2012/05/14/…
query_posts
- ඔබ කිසි විටෙකත් භාවිතා නොකළ යුතුය query_posts
. Ar රාර්ස්ට් පවසා ඇති දේ හැරුණු විට, ඇත්ත වශයෙන්ම විශාල ගැටළුව query_posts
වන්නේ, එය ප්රධාන විමසුම් වස්තුව බිඳ දමයි (ගබඩා කර ඇත $wp_query
). ප්ලගීන සහ අභිරුචි කේත විශාල ප්රමාණයක් ප්රධාන විමසුම් වස්තුව මත රඳා පවතී, එබැවින් ප්රධාන විමසුම් වස්තුව බිඳ දැමීම යන්නෙන් අදහස් වන්නේ ඔබ ප්ලගීන සහ අභිරුචි කේත වල ක්රියාකාරිත්වය බිඳ දමමින් සිටින බවයි. එවැනි එක් කාර්යයක් පමණක් වැදගත් pagination ශ්රිතය වේ, එබැවින් ඔබ ප්රධාන විමසුම බිඳ දැමුවහොත්, ඔබ pagination බිඳ දමයි.
කොතරම් නරකදැයි ඔප්පු කිරීමට query_posts
, ඕනෑම අච්චුවක, පහත සඳහන් දේ කර ප්රති .ල සංසන්දනය කරන්න
var_dump( $wp_query );
query_posts( '&posts_per_page=-1' );
var_dump( $wp_query );
get_posts
සහ ද්විතීයික විමසුම් ( අදාළ ලිපි, ස්ලයිඩර්, විශේෂාංග අන්තර්ගතය සහ ස්ථිතික මුල් පිටුවල අන්තර්ගතය වැනි ) WP_Query
සෑදීම සඳහා නිවැරදි ක්රමය වේ . එය සටහන් කළ යුතුය, ඔබ මුල් පිටුවේ, තනි පිටුවේ හෝ ඕනෑම ආකාරයක සංරක්ෂිත පිටුවක ප්රධාන විමසුමට පක්ෂව කිසිවක් භාවිතා නොකළ යුතුය. ඔබට ප්රධාන විමසුම වෙනස් කිරීමට අවශ්ය නම්, එසේ කිරීමට භාවිතා කරන්න, අභිරුචි විමසුමක් නොවේ. ( යාවත්කාලීන කිරීම: ස්ථිතික මුල් පිටු සහ සත්ය පිටු සඳහා, සත්ය පිටුවල සහ ස්ථිතික මුල් පිටුවල pre_get_posts භාවිතා කිරීම බලන්න *)pre_get_posts
සාරාංශයක් ලෙස, WP_Query
ප්රධාන විමසුම මඟින් භාවිතා කරනු ලබන අතර එය ද භාවිතා කරයි get_posts
, නමුත් get_posts()
භාවිතයන් වුවද WP_Query
, වෙනස්කම් කිහිපයක් තිබේ
get_posts
වඩා වේගවත් WP_Query
. ආන්තිකය වෙබ් අඩවියේ මුළු තනතුරු ප්රමාණය මත රඳා පවතී. මේ සඳහා හේතුව, ඇත get_posts
වෙයි 'no_found_rows' => true
කිරීමට පෙරනිමියෙන් WP_Query
මඟහරියි / නීතිමය පිගත කඩාගෙන යාම. සමඟ 'no_found_rows' => true
, WP_Query
විමසන ලද පෝස්ට් ප්රමාණය ලබා ගනී, පසුව ඇප ලබා ගනී, පෙරනිමියෙන්, එය පේජින් ගණනය කිරීම සඳහා විමසුමට ගැලපෙන සියලුම තනතුරු සඳහා තවදුරටත් සොයයි.
මෙම හේතුව නිසා, get_posts()
පේජින් නොවන විමසුම් සඳහා පමණක් භාවිතා කළ යුතුය. පේජින් get_posts
කිරීම ඇත්තෙන්ම එක් විශාල අවුලකි. WP_Query
සියලුම පිටු විමසීම් සඳහා භාවිතා කළ යුතුය
get_posts()
මෙම පෙරහන් මගින් බලපෑමට posts_*
ලක්වන පෙරහන් වලට බලපෑම් නොකරයි WP_Query
. හේතුව get_posts
, පෙරනිමියෙන්, සමත් 'suppress_filters' => true
වීමයිWP_Query
get_posts
වැනි අමතර පරාමිතික කිහිපයක් ඇත include
, exclude
, numberposts
හා category
. මෙම පරාමිතීන් WP_Query
සම්මත වීමට පෙර වලංගු පරාමිතීන් බවට වෙනස් වේ WP_Query
. include
බවට වෙනස් වී යයි post__in
, exclude
බවට post__not_in
, category
බවට cat
සහ numberposts
බවට posts_per_page
. යන්තම් සටහන, සියලු සම්මත කළ හැකි බව පරාමිතීන් WP_Query
සමඟ වැඩ get_posts
, ඔබ හැකි පෙරනිමි පරාමිතීන් භාවිතා නොසලකා නොවget_posts
get_posts
ප්රතිලාභ පමණක් $posts
දේපල WP_Query
අතර WP_Query
සම්පූර්ණ වස්තුව පැමිණේ. මෙම වස්තුව කොන්දේසි, පේජින් කිරීම සහ ලූපය තුළ භාවිතා කළ හැකි වෙනත් ප්රයෝජනවත් තොරතුරු සම්බන්ධයෙන් බෙහෙවින් ප්රයෝජනවත් වේ.
get_posts
ලූපය භාවිතා නොකරයි, නමුත් සටහන් foreach
පෙන්වීමට ලූපයක්. එසේම, පෙරනිමියෙන් අච්චු ටැග් නොමැත. setup_postdata( $post )
අච්චු ටැග් ලබා ගැනීමට භාවිතා කළ යුතුය. WP_Query
පුඩුවක් භාවිතා කරන අතර අච්චු ටැග් පෙරනිමියෙන් ලබා ගත හැකිය
get_posts
වෙයි 'ignore_sticky_posts' => 1
කිරීමට WP_Query
, ඒ නිසා get_posts
පෙරනිමියෙන් ඇලෙන සුළු තනතුරු නොතකා
, ඉහත මත පදනම් භාවිතය යන්න get_posts
හෝ WP_Query
ඔබ දක්වා වන අතර, ඔබ ඇත්තටම විමසුම සිට අවශ්ය නැත. ඉහත දැක්වෙන්නේ ඔබේ අභිමතය පරිදි ඔබට මග පෙන්විය යුතුය
මූලික වෙනස වන්නේ query_posts()
එය ඇත්ත වශයෙන්ම වත්මන් ලූපය වෙනස් කිරීම සඳහා පමණි. ඔබ අවසන් වූ පසු, ලූපය නැවත සකස් කර එහි ප්රීතිමත් මාර්ගයට යැවිය යුතුය. ඔබේ "විමසුම" මූලික වශයෙන් ඔබ ශ්රිතයට යොමු කරන URL නූලක් වන නිසා මෙම ක්රමය තේරුම් ගැනීමට ටිකක් පහසු වේ:
query_posts('meta_key=color&meta_value=blue');
අනෙක් අතට, WP_Query
එය පොදු අරමුණු සඳහා වන මෙවලමක් වන අතර, එය කෙලින්ම MySQL විමසුම් ලිවීමට සමාන query_posts()
ය. ඔබට එය ඕනෑම තැනක භාවිතා කළ හැකිය (ලූපයේ පමණක් නොවේ) සහ එය දැනට ක්රියාත්මක වන කිසිදු පශ්චාත් විමසුමකට බාධා නොකරයි.
WP_Query
එය සිදු වන විට මම බොහෝ විට භාවිතා කිරීමට නැඹුරු වෙමි . ඇත්ත වශයෙන්ම, එය ඔබගේ විශේෂිත නඩුවට පැමිණේ.
සරලව භාවිතා කිරීමේ අවශ්යතාවයක් නොමැත query_posts()
. එය කරන්නේ නව WP_Query වස්තුවක් ස්ථාපනය කර එම නව වස්තුව නැවත පැවරීම පමණි global wp_query
.
යොමුව සඳහා, පහත දැක්වෙන්නේ එම සත්ය query_posts()
ශ්රිතයයි.
function query_posts($query) {
$GLOBALS['wp_query'] = new WP_Query();
return $GLOBALS['wp_query']->query($query);
}
ඔබට ගැඹුරු අභිරුචි විමසුම් ස්ක්රිප්ට් එකක් සෑදීමට අවශ්ය නම් ඔබේම WP_Query වස්තුව ස්ථාපනය කරන්න. නැතහොත් get_posts()
ඔබට කළ යුතු වන්නේ සැහැල්ලු හැසිරවීමක් මෙහි සහ එතැනින් නම් පමණි.
කෙසේ වෙතත්, මම ඔබට නිර්දේශ කරන්නේ ඔබටම උදව්වක් wp_includes/query.php
කර WP_Query
පන්තියට ගොස් පරීක්ෂා කර බලන්න.
එය වෙනත් විමසුම් ප්රති result ල වලට ද බලපාන බැවින් භාවිතා wp_reset_query()
කිරීමෙන් පසු ඔබ භාවිතා කරන බවට වග බලා ගන්න query_posts()
.