Estoy tratando de recuperar las ID de las publicaciones con un cierto valor meta (esto funciona bien) Luego trato de pasarlas a través de post__not_in y no excluye las publicaciones de la búsqueda de wordpress.
Tengo la matriz de enteros (de un var_dump):
array(2) { [0]=> int(373) [1]=> int(247) }
Sin embargo, ahora necesito convertir esa matriz en 373,247 para usarla en post__not_in. ¿Algunas ideas?
remove_action('pre_get_posts','exclude_pages_from_search');
$hidePages = new WP_Query( array (
'post_type' => array( 'post', 'page', 'offer', 'review', 'project' ),
'ignore_sticky_posts' => true,
'posts_per_page' => -1,
'meta_key' => 'edit_screen_sitemap',
'meta_value' => 'hide',
'fields' => 'ids'
));
$test = $hidePages->posts;
function exclude_pages_from_search($query) {
if ( !is_admin() ) {
if ( $query->is_main_query() ) {
if ($query->is_search) {
$query->set('post__not_in', $test);
}
}
}
} add_action('pre_get_posts','exclude_pages_from_search');
El problema que tenía originalmente era que estaba implosionando la matriz y convirtiéndola en una cadena cuando necesitaba una matriz de enteros. Así que eliminé la implosión de la consulta y la dejé como una variable que, por supuesto, se convirtió en una matriz de enteros, ya que post___not_in solo permite matrices de enteros.
Luego me encontré con el problema de una fuga de memoria si ejecutaba la consulta dentro de la función, así que tuve que averiguar cómo ejecutarla fuera de la función y aún poder usar la variable dentro de la función, ya que no estaría definida.
Con la adición de $ hidePageIds globales, pude acceder a la variable que contiene la matriz de enteros dentro de la función y, por lo tanto, pasarla en la consulta post__not_in.
remove_action('pre_get_posts','exclude_pages_from_search');
$hidePages = new WP_Query( array (
'post_type' => array( 'post', 'page', 'offer', 'review', 'project' ),
'ignore_sticky_posts' => true,
'posts_per_page' => -1,
'meta_key' => 'edit_screen_sitemap',
'meta_value' => 'hide',
'fields' => 'ids'
));
$hidePageIds = $hidePages->posts;
function exclude_pages_from_search($query) {
if ( !is_admin() ) {
if ( $query->is_main_query() ) {
if ($query->is_search) {
global $hidePageIds;
$query->set('post__not_in', $hidePageIds);
}
}
}
} add_action('pre_get_posts','exclude_pages_from_search');
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras