wake-up-neo.net

Wie füge ich eine 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 wp-admin/post-new.php?post_category=12 und wp-admin/post-new.php?cat=12 ausprobiert, aber keiner hat funktioniert. Ich habe auch versucht, den Namen anstelle der ID der Kategorie zu verwenden. das hatte auch keine auswirkung.

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

8
A T

Dave James Miller von GitHub hat diesen für mich genagelt. Keine der Arbeiten stammt von mir, ich poste nur seinen Code, der in einen Plguin eingepackt ist, da er wie angekündigt perfekt 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: <code><a href="<?= esc_attr(admin_url('post-new.php?post_title=Default+title&category=category1&tags=tag1,tag2')) ?>">New post</a></code>
 * 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);
4
user67014

Hängen Sie sich in wp_insert_post ein, testen Sie den Post-Status für auto-draft und die URL für einen GET-Parameter.

Aber zuerst brauchen wir eine Hilfsfunktion, um den Parameter GET abzurufen 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'] ) );
}

Nun der Auto-Draft-Handler:

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 aufgerufen wurde. Um den anderen Fall zu finden, müssen Sie die Option default_category filtern:

add_filter( 'pre_option_default_category', 't5_get_default_cat_by_url' );

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

enter image description here

Siehe auch:

8
fuxia

Ich denke, Sie können über die Standardoption default_category gehen und option_default_category filtern, 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 lautet post_cat und Sie können die Kategorie wie folgt festlegen: /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&uuml;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' ) );
1
bueltge

Mir ist klar, dass dies bereits beantwortet wurde, aber ich wollte meine eigene Einstellung hinzufügen. Ich habe es hier einem Gist hinzugefügt https://Gist.github.com/malcalevak/ba05b4fbed0c6e33ac8c18c1451bd857

Um Ihnen den Ärger zu ersparen, ist hier 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 );

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.

0
Malcalevak