Il me manque un concept de base. J'essaie d'ajouter plusieurs liens "subsubub" ou liens rapides vers
"All | published | draft | trash".
Essayez d'ajouter "Type de message personnalisé renvoyé (#)" et quelques autres. Le (#) est ce qui continue à être changé à 0 sauf si vous êtes sur la page avec les posts.
Je viens d'essayer de définir posts_per_page à la requête comme un commentaire l'a dit ici, mais aucun changement.
Je les ai montrer, mais le compte est faux. Ils affichent tous 0 à moins que vous ne cliquiez sur le lien, le nombre correspondant sera alors renvoyé. Si je vais à dire "Type de message personnalisé renvoyé", le "Type de message personnalisé utilisé" passe à 0.
J'ai essayé wp_reset_query () et wp_reset_post_data (); après chaque requête, mais pas de chance.
J'ai aussi une fonction pour pre_get_posts, qui ajoute simplement $ query-> set ('post_type') pour filtrer le contenu de la page, mais je suppose que les liens sont distincts de pre_get_posts.
Quelqu'un m'indique dans la bonne direction ce que je fais mal?
Oh, et la raison pour laquelle c'est add_filter ('blah', array ($ THIS, 'etc')) est parce que c'est dans une classe, donc je dois spécifier "$ this".
add_filter('views_edit-custom_post_type',array($this,'add_custom_post_type_to_subsubsub'));
public function add_custom_post_type_to_subsubsub($views){
if( ( is_admin() ) && ( $_GET['post_type'] == 'custom_post_type' ) ) {
$query = array(
'post_type' => 'custom_post_type',
'post_status' => 'publish',
'meta_key' => 'special_meta_key'
);
$result = new WP_Query($query);
$class = ($_GET['special_meta_key'] == '1' && $_GET['special_meta_key_returned'] != '1') ? ' class="current"' : '';
$views['custom_post_type'] = sprintf(__('<a href="%s" '.$class.'>custom_post_type Vouchers <span class="count">(%d)</span></a>', 'custom_post_type' ), admin_url('edit.php?post_type=custom_post_type&special_meta_key=1'), $result->found_posts);
$querytwo = array(
'post_type' => 'custom_post_type',
'post_status' => 'publish',
'meta_key' => 'special_meta_key',
'meta_query' => array(
array(
'key' => 'usage_count',
'value' => '0',
'compare' => '>'
)
)
);
$resulttwo = new WP_Query($querytwo);
$class2 = (isset($_GET['special_meta_key_returned']) && $_GET['special_meta_key_returned'] == "1") ? ' class="current"' : '';
$views['custom_post_type_returned'] = sprintf(__('<a href="%s" '.$class2.'>Returned custom_post_type Vouchers <span class="count">(%d)</span></a>', 'custom_post_type' ), admin_url('edit.php?post_type=custom_post_type&special_meta_key_returned=1'), $resulttwo->found_posts);
$querythree = array(
'post_type' => 'custom_post_type',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'usage_count',
'value' => '0',
'compare' => '>'
)
)
);
$resultthree = new WP_Query($querythree);
$class3 = ($_GET['used_type'] == '1') ? ' class="current"' : '';
$views['used_types'] = sprintf(__('<a href="%s" '.$class3.'>Used Vouchers <span class="count">(%d)</span></a>', 'custom_post_type' ), admin_url('edit.php?post_type=custom_post_type&used_type=1'), $resultthree->found_posts);
//exit(var_dump($resulttwo));
return $views;
}
}
Utilisez pre_get_posts
filter & utilisez la fonction is_main_query()
pour vérifier le contexte (comme vous l'avez découvert dans la conversation avec @Milo ), toutefois, n'utilisez pas directement is_main_query()
.
Lorsque vous utilisez is_main_query()
pour vérifier le contexte, il vérifie toujours par rapport au $wp_query
global principal au lieu d'un autre objet de requête personnalisé que vous souhaitez peut-être. Cela peut donc provoquer un comportement inattendu.
Pour vous assurer que vous filtrez le contexte correct, utilisez le paramètre $query
qui a été transmis à la fonction de rappel de pre_get_posts
hook. Donc, au lieu de vérifier is_main_query()
, vous allez vérifier $query->is_main_query()
. Par exemple:
function wpse_example_filter( $query ) {
if ( is_admin() && $query->is_main_query() ) {
// $query modification CODE
}
}
add_action( 'pre_get_posts', 'wpse_example_filter' );