Dynamische Bedingungen im ‘posts_where’-Filter verwenden

Ich habe den folgenden Code, der Beiträge gibt, die in den letzten 100 Tagen veröffentlicht wurden

function smbd_cats_by_days ($where = '') { $where .= " AND post_date < '" . date('ym-d', strtotime("-100 days")) . "'"; return $where; } add_filter('posts_where', 'smbd_cats_by_days'); 

Es funktioniert gut. Aber jetzt möchte ich diese function generisch machen. (Ich möchte die Anzahl der Tage in einer Variablen speichern anstatt sie als 100 zu kodieren).

Wie geht das?

Solutions Collecting From Web of "Dynamische Bedingungen im ‘posts_where’-Filter verwenden"

Ich hatte Angst, dass du das wolltest. Das kannst du nicht wirklich machen . Folgen Sie dem Link für einige Problemumgehungen. Sie können in functions.php auch eine Variable oder eine Konstante setzen oder eine Designoption dafür erstellen. Dann benutze das in deiner function.

 function smbd_cats_by_days ($where = '') { // global $days_limit; // if a variable // $days_limit = DAYS_LIMIT; // if a constant // $days_limit = get_option('days_limit',100); // you have to uncomment one of the above, // depending on your choice of mechanisms $where .= " AND post_date < '" . date('ym-d', strtotime("-{$days_limit} days")) . "'"; return $where; } add_filter('posts_where', 'smbd_cats_by_days'); 

http://codex.wordpress.org/Function_Reference/get_option

Sie können eine anonyme function verwenden, wie in diesem Blogbeitrag beschrieben , der die Erstellung einer On- posts_where -Fly-function für den posts_where Filter verwendet:

 $options = array( 'max_post_age' => '30 days' ); $age_filter = function ($where = '') use ( $options ) { $where .= " AND post_date > '" . date( 'Ym-d', strtotime( '-' . $options[ 'max_post_age' ] ) ) . "'"; return $where; }; add_filter('posts_where', $age_filter); $query = new WP_Query($args); remove_filter('posts_where', $age_filter); 

Der Autor geht den zusätzlichen Schritt der Umsetzung in einem einzigen Ausdruck, aber die Verwendung der anonymen function sollte für die meisten Umstände perfekt funktionieren.

Es ist auch erwähnenswert, dass WordPress 3.7 eine neue Reihe sehr nützlicher WP_Query zu WP_Query .

EDIT: Als ich mich letzte Nacht entdeckte, ist die Lambda-function (dh function ($where = '') use ( $options ) ) nur in PHP 5.3+ verfügbar.