Benutzer sollen nur eigene Seiten bearbeiten dürfen

  • Hi at all,
    als erstes wolle ich mal "Hallo" sagen, da ich frisch angemeldet bin.
    Ich habe die ganze Zeit das Forum durchforstet um eine Antwort auf meine Frage zu finden, leider ohne Erfolg. Ich habe diverse plug-ins versucht wie Post-Level, Post restriction, Role Manager aber auch die konnten mir nicht weiterhelfen.

    Es geht um folgendes.
    Ich möchte, dass die angemeldeten User nur Ihre eigene Seite bearbeiten können und nicht die Seiten eines anderen Users.

    Ist dies möglich?


    mfg
    Fox

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Mit Bastelei ist es möglich...warte mal ein paar Minuten, dann editiere ich entsprechendes hier in den Beitrag.

    Öffne die Datei /wp-admin/admin-functions.php
    Suche dort diesen Code:

    PHP
    <td><?php if ( current_user_can('edit_pages') ) { echo "<a href='post.php?action=edit&amp;post=$id' class='edit'>" . __('Edit') . "</a>"; } ?></td>
        <td><?php if ( current_user_can('edit_pages') ) { echo "<a href='" . wp_nonce_url("post.php?action=delete&amp;post=$id", 'delete-post_' . $id) .  "' class='delete' onclick=\"return deleteSomething( 'page', " . $id . ", '" . sprintf(__("You are about to delete the &quot;%s&quot; page.\\n&quot;OK&quot; to delete, &quot;Cancel&quot; to stop."), js_escape(get_the_title()) ) . "' );\">" . __('Delete') . "</a>"; } ?></td>


    (Bei WP 2.0.4 ist es ab Zeile 645)
    und ersetze sie mit

    PHP
    <td><?php global $user_login; if ($user_login == get_the_author_login()) { ?>
        <?php if ( current_user_can('edit_pages') ) { echo "<a href='post.php?action=edit&amp;post=$id' class='edit'>" . __('Edit') . "</a>"; } ?><?php } else { ?>(Bearbeiten)<?php } ?></td>
        <td><?php global $user_login; if ($user_login == get_the_author_login()) { ?><?php if ( current_user_can('edit_pages') ) { echo "<a href='" . wp_nonce_url("post.php?action=delete&amp;post=$id", 'delete-post_' . $id) .  "' class='delete' onclick=\"return deleteSomething( 'page', " . $id . ", '" . sprintf(__("You are about to delete the &quot;%s&quot; page.\\n&quot;OK&quot; to delete, &quot;Cancel&quot; to stop."), js_escape(get_the_title()) ) . "' );\">" . __('Delete') . "</a>"; } ?><?php } else { ?>(L&ouml;schen)<?php } ?></td>

    Dann das gleiche Spielchen in der Datei /wp-admin/edit-pages.php
    Dort muss dieser Code (ab Zeile 54) ersetzt werden:

    PHP
    <td><?php if ( current_user_can('edit_pages') ) { echo "<a href='post.php?action=edit&amp;post=$post->ID' class='edit'>" . __('Edit') . "</a>"; } ?></td>
        <td><?php if ( current_user_can('edit_pages') ) { echo "<a href='" . wp_nonce_url("post.php?action=delete&amp;post=$post->ID", 'delete-post_' . $post->ID) . "' class='delete' onclick=\"return deleteSomething( 'page', " . $id . ", '" . sprintf(__("You are about to delete the &quot;%s&quot; page.\\n&quot;OK&quot; to delete, &quot;Cancel&quot; to stop."), js_escape(get_the_title('','',0))) . "' );\">" . __('Delete') . "</a>"; } ?></td>


    Und zwar mit dem gleichen neuen Code, wie er in der ersten Datei angewandt wird.


    Allerdings kann ein Autor immer noch, wenn er die ID der anderen Seite weiß und diese direkt ins Adressfeld eingibt, andere Seiten bearbeiten.
    An einer Lösung bastel' ich noch.

    "Eine gut gestellte Frage ist schon halb beantwortet."

    Einmal editiert, zuletzt von jottlieb (29. September 2006 um 21:19)

  • das wäre wirklich super. Suche nämlich schon seit Stunden danach....

    Edit: Danke hat super geklappt. Ist das momentan die einzige Möglichkeit? Wieso wurde es nicht "offiziell" implementiert?
    Gibt es auch eine möglichkeit, das der Usere z.B. nur diese eine Möglichkeit hat? Also das er nur seine Seiten sieht und auch bearbeiten kann? Weil momentan kann der User auch neue Seiten erstellen etc.

  • Warum es das nicht gibt, kann ich dir nicht sagen...

    Aber weiter geht's.

    Zuerst: Erstelle eine Kopie der /wp-admin/edit-page-form.php und nenne sie edit-page-form-old.php

    Dann öffne die /wp-admin/page-new.php und ersetze

    PHP
    include('edit-page-form.php');


    mit

    PHP
    include('edit-page-form-old.php');


    sonst kannst du nach folgenden Codenänderungen keine Seiten mehr erstellen

    Öffne dann die edit-page-form.php und suche nach:


    Sollte ab ~ Zeile 178 zu finden sein.
    Ersetze es gegen:


    Anschließend noch ganz am Ende der Datei, das:

    PHP
    <?php if ('edit' == $action) :
    	$delete_nonce = wp_create_nonce( 'delete-page_' . $post_ID ); ?>
    	<input name="deletepost" class="button" type="submit" id="deletepost" tabindex="10" value="<?php _e('Delete this page') ?>" <?php echo "onclick=\"if ( confirm('" . sprintf(__("You are about to delete this page \'%s\'\\n  \'Cancel\' to stop, \'OK\' to delete."), js_escape($post->post_title) ) . "') ) { document.forms.post._wpnonce.value = '$delete_nonce'; return true;}return false;\""; ?> />
    <?php endif; ?>


    mit

    PHP
    <?php if ($user_ID == $post->post_author) { ?>
    <?php if ('edit' == $action) :
    	$delete_nonce = wp_create_nonce( 'delete-page_' . $post_ID ); ?>
    	<input name="deletepost" class="button" type="submit" id="deletepost" tabindex="10" value="<?php _e('Delete this page') ?>" <?php echo "onclick=\"if ( confirm('" . sprintf(__("You are about to delete this page \'%s\'\\n  \'Cancel\' to stop, \'OK\' to delete."), js_escape($post->post_title) ) . "') ) { document.forms.post._wpnonce.value = '$delete_nonce'; return true;}return false;\""; ?> />
    <?php endif; ?>
    <?php } else { ?>
    (Darfst du nicht)
    <?php } ?>


    ersetzen.

    "Eine gut gestellte Frage ist schon halb beantwortet."

  • Zu deinem Nachtrag: Ohne die Änderungen an der page-new.php kann dann KEINER mehr Seiten erstellen, auch nicht du als admin.
    Ich probiere mal schnell was, dann kann ich dir evtl. auch dafür was anbieten, dass nur Admins seiten erstellen können.

    "Eine gut gestellte Frage ist schon halb beantwortet."

  • Okay.
    Ersetze in der page-new.php
    das

    PHP
    <?php
    if ( current_user_can('edit_pages') ) {
    	$action = 'post';
    	$post = get_default_post_to_edit();
    	$post->post_status = 'static';
    
    
    	include('edit-page-form-old.php');
    }
    ?>


    mit dem:


    Dann können NUR Admins (soweit ich das getestet habe) neue Seiten erstellen
    Denke aber daran, dass du beim Erstellen der Seite, gleich in der rechten Box den zukünftigen Autor einträgst, damit er dann auch Änderungen an der Seite vornehmen kann.

    Das Problem bisher ist dann auch noch, dass du auch nicht die Seiten der anderen Benutzer ändern kannst.
    Was man aber auch noch beheben könnte.

    "Eine gut gestellte Frage ist schon halb beantwortet."

    Einmal editiert, zuletzt von jottlieb (29. September 2006 um 21:56)

  • OK, habe alle Änderungen so durchgeführt wie du es beschrieben hast, allerdings sehe ich als "normaler user" immernoch die anderen seiten und ich kann immernoch seiten erstellen..... !?!?!

    Edit: Mein Fehler, habe die Datei zwar bearbeitet aber noch net hochgeladen.... seiten erstellen funktioniert jetzt nicht mehr...!!! Danke!

  • So, damit du auch als Admin andere Seiten bearbeiten kannst, musst du an der geänderten edit-page-form.php nochmals Änderungen vornehmen:

    ersetzen mit

    sowie

    PHP
    <?php if ($user_ID == $post->post_author) { ?> 
    <?php if ('edit' == $action) : 
        $delete_nonce = wp_create_nonce( 'delete-page_' . $post_ID ); ?> 
        <input name="deletepost" class="button" type="submit" id="deletepost" tabindex="10" value="<?php _e('Delete this page') ?>" <?php echo "onclick=\"if ( confirm('" . sprintf(__("You are about to delete this page \'%s\'\\n  \'Cancel\' to stop, \'OK\' to delete."), js_escape($post->post_title) ) . "') ) { document.forms.post._wpnonce.value = '$delete_nonce'; return true;}return false;\""; ?> /> 
    <?php endif; ?> 
    <?php } else { ?> 
    (Darfst du nicht) 
    <?php } ?>


    mit

    "Eine gut gestellte Frage ist schon halb beantwortet."

  • mastermind
    Das habe ich auch gedacht, aber nachdem ich User erstellt hatte, konnten die entweder nur lesen oder halt alle Beiträge editieren.

    Mein anliegen ist es eigentlich, das User nur ihre eigenen Beiträge und Seiten bearbeiten können. Alles andere soll für den User gesperrt sein. Und das geht von Haus aus irgendwie nicht. Auch mit den von mir erwähnten Plug-Ins ist es nicht möglich das so einzustellen.
    PS: Kann ich den Tellerrand irgendwie aus dem Menü bekommen? Also bei allen Usern!

  • In der /wp-admin/menu.php das löschen, damit der Link zum Tellerrand nicht mehr angezeigt wird:

    PHP
    $menu[0] = array(__('Dashboard'), 'read', 'index.php');

    (Zeile 7)

    Um nach deinem anderen Anliegen zu schauen, habe ich gerade keine Zeit.

    Soll auch beim Login kein Tellerrand erscheinen, musst du in wp-login.php (root) Zeile 170 die URL anpassen.

    "Eine gut gestellte Frage ist schon halb beantwortet."

  • Vielen Danke!!!

    PS: Habe es nun selbstständig (bin so stolz auf mich :-) ) geschafft, das nur Admins Beiträge einstellen können und die anderen User nicht.

    öffne die post.php und suche folgendes

    und ersetze durch

  • Vielleicht hilft Restrict-Page-Editing-Plugin.
    Der download-link ist nicht mehr da - hier ist das plugin:

    Nun kann nur noch der jeweilige Autor seine eigenen Seiten bearbeiten. Aber der admin kann alles, die Befugnis auch fremde Seiten bearbeiten zu können ist mit dem role-manager einstellbar.

    tschüß [size=24][color=olive]n[/color][/size]epf

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!