it-swarm.com.de

Wie mache ich einen Beitrag auf der Admin-Seite klebrig?

ich arbeite mit Restaurant-Plug-In, die benutzerdefinierten Beitragstyp verwenden.
die frage ist, ob es möglich ist, einen post auszuwählen und ihn im admin klebrig zu machen (immer ganz oben)?
Ich brauche dies, weil es schwierig wird, die Artikel (Beiträge) zu finden, wenn Sie dem Restaurantmenü viele Artikel hinzufügen.

also suche ich nur nach einer Lösung, um den Post vom Post-Typ per Schnecke zu finden, und mache ihn auf der Admin-Seite klebrig (nicht auf der Vorderseite).

ich habe Code erstellt, der den richtigen Beitrag findet, aber wie kann er klebrig werden?

        $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

"Admin Stickies" für benutzerdefinierte Beitragstypen:

Um selbstklebende benutzerdefinierte Posts im Backend zu unterstützen, können Sie den folgenden Codeausschnitt in Ihrer functions.php -Datei im aktuellen Designverzeichnis oder in Ihrem benutzerdefinierten Plugin verwenden:

/**
 * 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 ) );
});

hier können Sie den $cpt und den $ids an Ihre Bedürfnisse anpassen.

Wir könnten auch ein benutzerdefiniertes Metafeld erstellen, z. is_admin_sticky für diese admin sticky cpt posts. Dann können wir sie alle holen mit:

/**
 * 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 );
});

Das Demo-Plugin "Admin Stickies":

Wir verwenden das folgende Plugin, um dies zu unterstützen:

<?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

Die Haftnotizen werden in der Option sticky_posts gespeichert und sind nur für normale Notizen verfügbar.

Hier hijacken wir den option_sticky_posts-Filter, um dies für benutzerdefinierte Beitragstypen im Backend zu unterstützen.

Wenn wir unseren option_sticky_posts-Filter-Rückruf nach dem ersten Durchlauf nicht entfernen, wirkt sich dies auch auf die is_sticky()-Funktion aus. Dann erhalten wir die native CSS-Klasse sticky in der Tabellenzeile. Deshalb habe ich die Filterentfernung auskommentiert.

Wir können auch den Filter post_class verwenden, um der entsprechenden Tabellenzeile unsere benutzerdefinierte CSS-Klasse is-admin-sticky hinzuzufügen.

Diese Demo könnte noch erweitert werden, um das Front-End zu unterstützen, möglicherweise mit dem dritten Eingabeparameter:

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

wobei $context'front', 'back' oder 'both' sein kann.

6
birgire