web-dev-qa-db-fra.com

Comment rendre le post collant dans la page d'administration?

je travaille avec un plugin de restaurant utilisant un type de message personnalisé.
La question est de savoir s’il est possible de sélectionner un message et de le rendre collant (toujours en haut) dans l’administrateur?
J'en ai besoin, car lorsque vous ajoutez de nombreux éléments au menu du restaurant, il devient difficile de les trouver (messages).

donc je cherche juste une solution pour trouver un post de type post par slug, et le rend collant dans la page d'administration (pas à l'avant)

j'ai créé un code qui trouve le bon post, mais comment le rendre collant?

        $test = get_page_by_path( 'slug', $output = OBJECT, $post_type = 'post-type' );
        $test_id = $test->ID;
        $test_page = get_post($test_id);
        $test_title = apply_filters('the_title', $test_page->post_title);
1
need-help

"Stickies administrateur" pour les types de publication personnalisés:

Pour prendre en charge les publications personnalisées persistantes dans le backend, vous pouvez utiliser le fragment de code suivant dans votre fichier functions.php du répertoire du thème actuel ou dans votre plug-in personnalisé:

/**
 * Set admin stickies for the 'foodmenu' custom post type 
 */
add_action( 'init', function() {
    if( function_exists( 'wpse_cpt_stickies' ) )
        wpse_cpt_stickies( $cpt = 'foodmenu', $ids = array( 53, 102, 23 ) );
});

où vous pouvez ajuster le $cpt et le $ids à vos besoins.

Nous pourrions également créer un méta-champ personnalisé, par exemple. is_admin_sticky pour ces messages cpt admin collants. Ensuite, nous pouvons tous les récupérer avec:

/**
 * Set admin stickies for the 'foodmenu' custom post type 
 */
add_action( 'init', function() {
    if( function_exists( 'wpse_cpt_stickies' ) )
    {
       // Fetch all sticky posts with the "is_admin_sticky=1" custom field:
       $ids = get_posts( 
           array( 
               'post_type'      => 'foodmenu', 
               'meta_key'       => 'is_admin_sticky',
               'meta_value'     => '1',
               'posts_per_page' => 5,    # <-- Modify this to your needs
           )
       ); 

    wpse_cpt_stickies( $cpt = 'foodmenu', $ids );
});

Le plugin de démonstration "Admin Stickies":

Nous utilisons le plugin suivant pour supporter ceci:

<?php   
/**
 * Plugin Name:   Admin Stickies for custom post types
 * Plugin URI:    http://wordpress.stackexchange.com/a/167371/26350
 * Plugin Author: birgire
 * Version:       0.0.1
 */

function wpse_cpt_stickies( $cpt, $ids )
{
    $stickies = new WPSE_CPT_Admin_Stickies;
    $stickies->init( $cpt, $ids );
}

class WPSE_CPT_Admin_Stickies
{
    private $cpt;
    private $ids;

    public function init( $cpt = 'post' , $ids = array() )
    {
        $this->cpt = $cpt;
        $this->ids = $ids;
        add_action( 'pre_get_posts', array( $this, 'pre_get_posts' ) );
    }

    public function pre_get_posts( $q )
    {
        if( 
            is_admin() 
            && 'edit.php' === $GLOBALS['pagenow']
            && $q->is_main_query() 
            && $this->cpt === $q->get( 'post_type' )
        )
        {
            add_filter( 'post_class', array( $this, 'post_class' ), 10, 3 );    
            add_filter( 'option_sticky_posts', array( $this, 'custom_stickies' ) );
            $q->is_home = 1; # <-- We must use this "hack" to support sticky posts
            $q->set( 'ignore_sticky_posts', 0 );
        } 
    }

    public function custom_stickies( $data )
    {
        // remove_filter( current_filter(), array( $this, __FUNCTION__ ) );
        if( count( $this->ids ) > 0 )
            $data = $this->ids;

        return $data;
    }

    public function post_class( $classes, $class, $post_ID ) 
    {
        // Append the sticky CSS class to the corresponding row:
        if( in_array( $post_ID, $this->ids, true ) )
            $classes[] = 'is-admin-sticky';

        return $classes;
    }

} // end class

Les post-it sont enregistrés dans l’option sticky_posts et elle n’est disponible que pour les posts normaux.

Ici, nous détournons le filtre option_sticky_posts afin de le prendre en charge pour les types de publication personnalisés dans le back-end.

Si nous ne supprimons pas notre rappel de filtre option_sticky_posts, après la première exécution, la fonction is_sticky() sera également affectée. Nous obtiendrons ensuite la classe CSS sticky native dans la ligne du tableau. Par conséquent, j'ai commenté la suppression du filtre.

Nous pouvons également utiliser le filtre post_class pour ajouter notre classe CSS is-admin-sticky personnalisée à la ligne du tableau correspondante.

Cette démo pourrait être étendue pour prendre en charge le front-end, éventuellement avec le troisième paramètre d'entrée:

wpse_cpt_stickies( $cpt, $ids, $context );

$context pourrait être 'front', 'back' ou 'both'.

6
birgire