Using WordPress ‘posts_selection’ PHP action

The posts_selection WordPress action is used to announce the query’s current selection parameters, primarily for caching plugins.


add_action('posts_selection', 'my_custom_function');

function my_custom_function($selection) {
    // your custom code here
    return $selection;


  • $selection (string) – The assembled selection query.

More information

See WordPress Developer Resources: posts_selection


Log Selection Query

Log the selection query to a file for debugging purposes.

add_action('posts_selection', 'log_selection_query');

function log_selection_query($selection) {
    error_log("Selection query: " . $selection);
    return $selection;

Modify Selection Query

Modify the selection query to include posts with a specific meta key.

add_action('posts_selection', 'modify_selection_query');

function modify_selection_query($selection) {
    $modified_selection = $selection . " AND post_id IN (SELECT post_id FROM wp_postmeta WHERE meta_key = 'custom_meta_key')";
    return $modified_selection;

Cache Selection Query Results

Cache the results of a selection query for faster subsequent queries.

add_action('posts_selection', 'cache_selection_query_results');

function cache_selection_query_results($selection) {
    // Check if the result is already cached
    $cached_result = get_transient('my_cached_query');
    if ($cached_result !== false) {
        return $cached_result;

    // Cache the result for 1 hour
    set_transient('my_cached_query', $selection, 3600);
    return $selection;

Monitor Selection Query Performance

Measure the time taken to execute a selection query.

add_action('posts_selection', 'monitor_selection_query_performance');

function monitor_selection_query_performance($selection) {
    $start_time = microtime(true);
    $result = $selection;
    $end_time = microtime(true);

    $time_taken = $end_time - $start_time;
    error_log("Selection query took: " . $time_taken . " seconds");
    return $result;

Apply Custom Sorting

Apply custom sorting to the selection query based on a specific meta key.

add_action('posts_selection', 'apply_custom_sorting');

function apply_custom_sorting($selection) {
    $custom_sorting = $selection . " ORDER BY wp_postmeta.meta_value ASC";
    return $custom_sorting;