Frage

Ich verwende PHP, um einen benutzerdefinierten Beitrag dynamisch zu erstellen, und ich brauche den Autor, um eine andere Person als der angemeldete Benutzer zu sein. ich habe das gefunden https://stackoverflow.com/questions/5759359/wordpress-manuell-the-author-of-a-post-php Aber ich frage mich, ob es eine Möglichkeit gibt, dies nach dem Einfügen des Beitrags zu tun. Ich denke, ich könnte nur eine DB -Abfrage machen ...

War es hilfreich?

Lösung

Wenn Sie die ID des Autors kennen, können Sie wp_insert_post verwenden, um die ID und die Autor -ID darauf anzugeben.

$id = $post->ID; // change this to whathever
$user_id = '4'; // change this too

$the_post = array();
$the_post['ID'] = $id;
$the_post['post_author'] = $user_id;

wp_insert_post( $the_post );

Der Trick besteht darin, die ID anzugeben, um den Beitrag zu aktualisieren. Sehen wp_insert_post().

Andere Tipps

Einfachheit und Relevanz zwischen dieser Frage und einer anderen Frage, die auf gestellt wird Paketüberfluss (WordPress - Stellen Sie den Autor eines Beitrags in PHP manuell fest - wie von OP hier auf WPSE verknüpft.).

WordPress scheint einen Wert für die zu erzwingen post_author Beim Einfügen oder Aktualisieren von Beiträgen verwenden wp_insert_post() und wp_update_post().

Der Weg um ihn herum ist die Verwendung des Filterhakens wp_insert_post_data.

/**
 * Filter slashed post data just before it is inserted into the database.
 *
 * @since 2.7.0
 *
 * @param array $data    An array of slashed post data.
 * @param array $postarr An array of sanitized, but otherwise unmodified post data.
 */
$data = apply_filters( 'wp_insert_post_data', $data, $postarr );

Beispiel Verwendung des Filterhakens wp_insert_post_data:

function remove_author_id( $data, $postarr ) {

    if ( $data['post_type'] != 'YOUR-POST-TYPE-HERE' ) {
        return $data;
    }

    $data['post_author'] = 0;

    return $data;

}

add_filter( 'wp_insert_post_data', 'remove_author_id', '99', 2 );

Dies kann besonders gut für das Einfügen oder Aktualisieren von Beiträgen mithilfe der Verwendung sein PHP.

Notiz: Sie möchten sicher sein, dass Sie die Unterstützung für die Unterstützung deaktivieren möchten author in Ihrem benutzerdefinierten Beitragstyp und wahrscheinlich vorsichtig mit den Autorenbezogenen Funktionen im Rahmen dieses Post -Typs.

Wenn dies ein benutzerdefinierter Post -Typ ist und Sie nicht möchten, dass ein Autor einem Beitrag zugewiesen ist, können Sie "Autor" aus entfernen supports( array ) In Register_Post_type. http://codex.wordpress.org/function_reference/register_post_type

Wenn Sie noch Autorenunterstützung für Ihren Post-Typ benötigen, wäre dies viel sinnvoller, um dies in post.php / post-new.php zu tun, indem Sie den Autor-Metabox filtern.

Die Lösung besteht darin, den Dropdown mit wp_dropdown_users einen None oder Null -Benutzer hinzuzufügen 'show_option_none' WordPress wird verwendet <option value="-1"> Für Ihren NULL -Benutzer wird es in der DB als 0 angezeigt.

*Hinweis: Dieses Beispiel verschiebt auch den Autor Div direkt über der Schaltfläche Veröffentlichung.

add_action( 'post_submitbox_misc_actions', 'move_author_meta' );

function move_author_meta() {
    global $post_ID;
    $post = get_post( $post_ID );
    echo '<div id="author" class="misc-pub-section" style="border-top-style:solid; border-top-width:1px; border-top-color:#EEEEEE; border-bottom-width:0px;">Author: ';
    better_author_meta_box( $post );  //This function is being called in replace author_meta_box()

    echo '</div>';

}

function better_author_meta_box($post) { ?>

   <label class="screen-reader-text" for="post_author_override"><?php _e('Author'); ?></label>
  <?php

    if ( 'auto-draft' == $post->post_status ) : $selected = false; elseif (  $post->post_author == 0 || ( ! $post->post_author) ) : $selected = -1; else : $selected = $post->post_author; endif;
    wp_dropdown_users( array(
            'who' => 'authors',
            'name' => 'post_author_override',
            'selected' => $selected ? $selected : (int) -1,
            'include_selected' => true,
            'show_option_none' => 'NONE',
            'orderby'          => 'display_name',
            'show'             => 'display_name',
            'order'            => 'ASC'
      ) );
  }

Ich bin mir sicher, dass Sie alle zusätzlichen bedingten Schecks für ausgewählte $ bemerken. Es könnte übertrieben sein, aber Probleme mit den Redakteuren beseitigt, die einen Autor nicht aus früheren veröffentlichten Beiträgen in keinen Fall wechseln konnten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top