Wie füge ich Kategorie zu ‘wp-admin / post-new.php’ hinzu?

Ich möchte einen Link haben, um einen neuen Beitrag zu erstellen, der auch die Kategorie festlegt.

Ich habe versucht, wp-admin/post-new.php?post_category=12 und wp-admin/post-new.php?cat=12 , aber keiner der beiden funktionierte. Ich habe auch versucht, den Namen anstelle der ID der Kategorie zu verwenden; was auch keinen Einfluss hatte.

Wie erstelle ich einen Link zu einem neuen Post mit einer Standardkategorie?

Solutions Collecting From Web of "Wie füge ich Kategorie zu ‘wp-admin / post-new.php’ hinzu?"

Dave James Miller bei GitHub hat das für mich erledigt. Keiner der Arbeit ist von mir, ich poste nur seinen Code in einen Pluguin verpackt, da es perfekt wie beworben funktioniert:

 < ?php /** * Plugin Name: Set default category from url parameter * Plugin URI: https://gist.github.com/davejamesmiller/1966543 * Description: enables you to setup new post links with the post_title, category and tags in the url: New post * Version: 0.0.1 * Author: davejamesmiller * Author URI: https://gist.github.com/davejamesmiller */ // I used this code to automatically set the default post title, category and // tags for a new WordPress post based on which link was clicked. It could also // be tweaked to hard-code the values instead of using request parameters. add_filter('wp_get_object_terms', function($terms, $object_ids, $taxonomies, $args) { if (!$terms && basename($_SERVER['PHP_SELF']) == 'post-new.php') { // Category - note: only 1 category is supported currently if ($taxonomies == "'category'" && isset($_REQUEST['category'])) { $id = get_cat_id($_REQUEST['category']); if ($id) { return array($id); } } // Tags if ($taxonomies == "'post_tag'" && isset($_REQUEST['tags'])) { $tags = $_REQUEST['tags']; $tags = is_array($tags) ? $tags : explode( ',', trim($tags, " \n\t\r\0\x0B,") ); $term_ids = array(); foreach ($tags as $term) { if ( !$term_info = term_exists($term, 'post_tag') ) { // Skip if a non-existent term ID is passed. if ( is_int($term) ) continue; $term_info = wp_insert_term($term, 'post_tag'); } $term_ids[] = $term_info['term_id']; } return $term_ids; } } return $terms; }, 10, 4); 

wp_insert_post , testen Sie den Post-Status für den auto-draft und die URL für einen GET Parameter.

Aber zuerst brauchen wir eine Hilfsfunktion, um den GET Parameter zu erhalten und zu bereinigen:

 /** * Set default category. * * @wp-hook pre_option_default_category * @return string Category slug */ function t5_get_default_cat_by_url() { if ( ! isset( $_GET['post_cat'] ) ) return FALSE; return array_map( 'sanitize_title', explode( ',', $_GET['post_cat'] ) ); } 

Jetzt der Auto-Entwurfshandler:

 add_action( 'wp_insert_post', 't5_draft_category', 10, 2 ); /** * Add category by URL parameter to auto-drafts. * * @wp-hook wp_insert_post * @param int $post_ID * @param object $post * @return WP_Error|array An error object or term ID array. */ function t5_draft_category( $post_ID, $post ) { if ( ! $cat = t5_get_default_cat_by_url() or 'auto-draft' !== $post->post_status ) return; // return value will be used in unit tests only. return wp_set_object_terms( $post_ID, $cat, 'category' ); } 

Dies funktioniert nur, wenn get_default_post_to_edit() mit dem zweiten Parameter $create_in_db auf TRUE . Um den anderen Fall zu default_category müssen Sie die Option default_category :

 add_filter( 'pre_option_default_category', 't5_get_default_cat_by_url' ); 

Jetzt können Sie den Parameter post_cat , um eine kommagetrennte Liste von Kategorie-Slugs zu übergeben:

Bildbeschreibung hier eingeben

Siehe auch:

  • Vorlagen-Plugin für Blog-Posts?
  • Öffnen Sie die Admin-Seite ‘Add New Post’ von WordPress mit Parametern, die über $ _GET gesetzt wurden
  • Force-Kategorie auswählen, bevor Sie einen neuen Beitrag erstellen?

Ich denke, dass Sie über die Standardoption default_category und default_category filtern option_default_category , wenn die URL einen Parameter für die Kategorie hat, wie diese Beispielquelle. Benutze es als Plugin, teste es. Wurde von Grund auf neu geschrieben und nicht getestet.

Der URL-Parameter ist post_cat und Sie können die Kategorie wie diese URL /wp-admin/post-new.php?post_cat=categoryname : /wp-admin/post-new.php?post_cat=categoryname

 < ?php /** * Plugin Name: .my Test * Plugin URI: http://bueltge.de/ * Description: * Version: 0.0.1 * Author: Frank Bültge * Author URI: http://bueltge.de/ */ class Set_Default_Cat_From_Url_Param { protected static $classobj = NULL; public static function init() { NULL === self::$classobj and self::$classobj = new self(); return self::$classobj; } function __construct() { if ( isset( $_GET['post_cat'] ) ) add_filter( 'option_default_category', array( $this, 'get_category' ) ); } function get_category( $category ) { if ( isset( $_GET['post_cat'] ) ) $category = get_cat_ID( esc_attr( $_GET['post_cat'] ) ); return $category; } } add_action( 'load-post-new.php', array( 'Set_Default_Cat_From_Url_Param', 'init' ) ); 

Ich weiß, dass dies bereits beantwortet wurde, aber ich wollte meine eigene Aufnahme hinzufügen. Ich habe es hier zu einem Geist https://gist.github.com/malcalevak/ba05b4fbed0c6e33ac8c18c1451bd857 hinzugefügt

Um Ihnen die Mühe zu ersparen, hier ist der Code:

 function set_category () { global $post; //Check for a category parameter in our URL, and sanitize it as a string $category_slug = filter_input(INPUT_GET, 'category', FILTER_SANITIZE_STRING, array("options" => array("default" => 0))); //If we've got a category by that name, set the post terms for it if ( $category = get_category_by_slug($category_slug) ) { wp_set_post_terms( $post->ID, array($category->term_id), 'category' ); } } //hook it into our post-new.php specific action hook add_action( 'admin_head-post-new.php', 'set_category', 10, 1 ); 

Ähnlich wie bei allen anderen, würden Sie es über /wp-admin/post-new.php?category=categoryname auslösen

Zu Ihrer Information, wenn Sie erweiterte benutzerdefinierte Felder wie @Aphire verwenden, wird dies funktionieren.