PDA

View Full Version : سوال: جلوگیری از ورد به فایل در افزونه ی وردپرس



ravand
جمعه 10 مرداد 1393, 19:54 عصر
سلام
من در حال یادگیری ساخت افزونه وردپرس هستم.
یه فایل در افزونه ایجاد کردم. که یک لینک داخلش هست این لینک در بخش مدیریت زیر منوها نمایش داده میشه وقتی روش کلیک میکنم یک فایل دیگه که داخل پوشه ی افزونه هست نمایش داده میشه این فایل رو من میخوام کاری بکنم که کسی به غیر از مدیر که لوگین میشه کس دیگه نتونه ببین.
مثلا من میرم به این ادرس:

http://localhost/wordpress/wp-content/plugins/ravandi/mo.php
اگه مدیر باشم و لوگین کرده باشم بتونم فایل mo.php رو ببینم ولی اگه مدیر نباشم نتونم ببینم.
متشکرم.

ravand
یک شنبه 12 مرداد 1393, 14:40 عصر
من فکر میکنم دوستان منظور منو درست متوجه نشدن. بیشتر توضیح میدم:
من یک پوشه به نام ravandi داخل پوشه ی plugins ایجاد کردم.
بعد داخل این پوشه ی ravandi دو فایل به نام های ravandi.php و mo.php دارم.
محتوای فایل ravandi.php ایناست:


<?php
/*Plugin Name: ravandi
Plugin URI: http://site.ir
Description: توضیحات پلاگین
Version: 1.0
Author: نام نویسنده
Author URI: http://site.ir
*/
function tabe(){
echo '<a href="/wordpress/wp-content/plugins/ravandi/mo.php" target="_blank"><img src="/wordpress/wp-content/plugins/ravandi/icon.png">عنوان</a>';
}
add_filter('adminmenu','tabe');
?>
محتوای فایل mo.php هم کدهای php هست که قراره اجرا بشه. مثلا برای آزمایش امدم اینو نوشتم:


<?php
echo "متن مورد نظر";
?>


من میخوام وقتی در قسمت مدیریت روی لینک عنوان کلیک میشه و فایل mo.php باز میشه . کسی غیر از مدیر نتونه این " متن مورد نظر" رو ببینه.

DR.HTML
دوشنبه 13 مرداد 1393, 11:57 صبح
جناب راوند بنده خواستم یه بار جواب شمارو بدم یهویی اینترنتم قطع شدش فکر نمیکردم این موضوع بی جواب بمونه به هر حال
شما باید از توابع ورد پرس استفاده کنید راههای زیادیم هست چندتا من براتون مثال میزنم
تابع

is_admin()
حالا این تابع بر خلاف اسمش کاربرو چک نمیکنه که مدیره یا نه ؟ ! میاد چکک میکنه توی داشبرد مدیریتی وردپرس هست یا نه مثلا وقتی میخواین کاربرایی که لاگین کردن توی پنل مدیریتی ببیننش

تابع دوم

is_super_admin()

این تابع دقیقا چک میکنه کاربر سوپر ادمین هست یا نه (مفهوم سوپر ادمین با ادمین خالی فرق داره :لبخند: همونطور که میدونید )

مثال وردپرس


<?php
//Removes the "Edit" menu for users who are not Super Admins of a multisite network
if ( !is_super_admin() ) {
add_action( 'admin_init', 'my_remove_edit_menu' );
}
function my_remove_edit_menu() {
remove_menu_page('edit.php');
}
?>


current_user_can('manage')
این تابع میاد تعیین میکنه کاربر چقدر دسترسی داره مثلا ارگومان Editor یا administrator ّهش میتونید بدید مقدار true و false ّبرگردونه البته با این تابع میتونید کاربر جاریو بگیرید

$user = wp_get_current_user();

ravand
دوشنبه 13 مرداد 1393, 12:26 عصر
متشکرم
اینترنت بدجور قاطی کرده منم امدم این جا جواب شما رو بدم سایت باز نشد!
من از این توابع قبلا استفاده کردم.
ولی مشکل اینه که اینا اخطار میدن. اینطوری که معلومه باید قبل از این دستورات من یه دستوری بذارم.
مثلا یه همچین اخطاری به من داد:

Fatal error: Call to undefined function is_super_admin() in F:\xampp\htdocs\wordpress\wp-content\plugins\ravandi\mo.php on line 3
مثلا توی فایل mo.php میخوام با این دستور is_admin() شرط بذارم بگم اگه قسمت مدیریت هست یه متنی رو نمایش بده. اگه نیست که هیچی رو نمایش نده. ولی اخطار میده.
اینم بگم که کل فایل من فقط همینه. و چیز دیگه نیست.

DR.HTML
دوشنبه 13 مرداد 1393, 19:25 عصر
خوب شما خودتون استاد هستید وقتی undefined میده یعنی تابع تعریف نشده احتمالا پیوست های اولیه برای پلاگین نویسیو رو ندارید چون 100% خود سیستم قادر به تشخیص توابع نیست

ravand
دوشنبه 13 مرداد 1393, 19:31 عصر
خوب شما خودتون استاد هستید وقتی undefined میده یعنی تابع تعریف نشده احتمالا پیوست های اولیه برای پلاگین نویسیو رو ندارید چون 100% خود سیستم قادر به تشخیص توابع نیست
خب منم که از همون اول گفتم. من دنبال این دستورات قبل از این تابع هستم.
خیلی ساده هم توضیح دادم.
گفتم من یه فایل ایجاد کردم که میخوام کسی جز مدیر نتونه این فایل رو ببینه. یعنی قبل از این دستوراتی که گفتید باید چی بنویسم؟ که این اخطار رو نده؟
این
پیوست های اولیه برای پلاگین نویسی چی هست؟
والله من توی سایت ها چیزی که دیدم همین مثال بود. که بهتون دادم.
میشه کمی بیشتر توضیح بدید؟
متشکرم.

DR.HTML
دوشنبه 13 مرداد 1393, 19:43 عصر
جناب راوند البته بنده فراموش کردم بگم این تابع جایگزین تابع دیگه ای شده ممکنه سیستم شما هنوز از همونتابع استفاده میکنه فایل bp-links-classes.php چک کنید ببینید is_site_admin() هست یا is_super_Admin()

بعضی وقتها قبل اینکه فایل پلاگین اصلی وردپرس لود بشه ما پلاگین خودمونو لود میکنیم ه باعث بروز همین مشکلاتی میشه از این تابع باید قبلش استفاده کنید که درصورت لود پلاگین اجرا بشه


add_action( 'plugins_loaded', 'your plugin ' );

این تابع پلاگین رو لود میکنه

لینک توضیحات وردپرس (http://codex.wordpress.org/Plugin_API/Action_Reference/plugins_loaded)

ravand
دوشنبه 13 مرداد 1393, 19:58 عصر
این فایل
bp-links-classes.php رو که گفتید هر جای وردپرس گشتم پیدا نکردم. میشه بگید کجاشه؟
ببینید . من الان توی پوشه ی plugin دو تا فایل دارم. یکی ravandi.php که محتواش ایناست:


<?php/*Plugin Name: ravandiPlugin URI: http://site.irDescription: توضیحات پلاگینVersion: 1.0Author: نام نویسندهAuthor URI: http://site.ir*/function tabe(){ echo '<a href="/wordpress/wp-content/plugins/ravandi/mo.php" target="_blank"><img src="/wordpress/wp-content/plugins/ravandi/icon.png">عنوان</a>';}add_filter('adminmenu','tabe');?>
و دیگری mo.php که محتواش شد اینا:


<?php add_action( 'plugins_loaded', '/wordpress/wp-content/plugins/ravandi/ravandi.php' );
if(is_admin()){
echo "وارد شد";}
?>

یه همچین اخطاری به من داد:

Fatal error: Call to undefined function add_action() i
متشکرم.

DR.HTML
سه شنبه 14 مرداد 1393, 00:19 صبح
از این تابع استفاده کردید ؟
add_action( 'plugins_loaded', 'your plugin ' );


ببخشید اسم فایل رو اشتباهی گذاشته بودم پوشنه اینکلود فایل ms-deprecated.php

ravand
سه شنبه 14 مرداد 1393, 07:53 صبح
من رفتم اینجا:

F:\xampp\htdocs\wordpress\wp-includes
فایل
ms-deprecated.php رو دیدم. هر دو تا تابع
is_site_admin() و is_super_Admin() وحود داشت.



از این تابع استفاده کردید ؟



1

add_action( 'plugins_loaded', 'your plugin ' );






در پست قبلی که بهتون گفتم ازش استفاده کردم.
باید به جای این your plugin چی قرار بدم؟ من ادرس فایل اصلی افزونه ام رو که ایجاد کردم رو دادم.

DR.HTML
سه شنبه 14 مرداد 1393, 11:19 صبح
توی your plugin اسم پلاگینتون رو بزارید
جناب راوند ببینید من اینسری خودم پلاگینتونو نصب کردم دقیق متوجه منظورتون شدم (عذر میخوام باید اول اینکارو میکردم )

ببینید کلا بیس کار شما اشتباست شما دارید ازتوی پلاگینتون یه لینک میدید به یه فایل که مال وردپرس نیست ! و طبیعتا فانکشنی اونجا شناخته شده نیست برای ا ینکه پلاگینها درست کار کنن باید از توی پنل خود وردپرس باز بشن حتی من خیلی تحقیق کردم هیچ راهی برای اینکار ارائه نشده ! شما دارید از پنل میاید بیرون که نباید اینکار بشه درصورتی که اینکار میکنید باید فایلهای خود وردپرسو اینکلود کنید مثل functions.php . option.php . ms-deprecated.php ;که عاقلانه نیست بنده خودم هنوز پلاگین وردپرسیو ندیدم که از پنل بیاد بیرون البته بازم یه سری فانکشن هستن که میان و نتایجو توی صفحات دیگه نشون میدن اما بازم داخل خود وردپرسه !

البته یه راهی هست که شما تایید کنید کاربر مدیره توی Ravandi.php به این مثال توجه کنید ! م از سشن استفاده کردم
<?php
/*Plugin Name: ravandi
Plugin URI: http://site.ir
Description: ??????? ??????
Version: 1.0
Author: ??? ???????
Author URI: http://site.ir
*/
session_start();
function tabe(){
echo '<a href="/wp/wp-content/plugins/ravandi/mo.php" target="_blank"><img src="/wordpress/wp-content/plugins/ravandi/icon.png">?????</a>';

echo '<a href="/wp/wp-content/plugins/ravandi/mo.php" target="_blank"><img src="/wordpress/wp-content/plugins/ravandi/icon.png">ar</a>';
}
if(is_admin())
$_SESSION['test']='test';

add_filter('adminmenu','tabe');


?>


<?php
session_start();
echo $_SESSION['test'];
?>

این الان کاریو که شما میخواین انجام میده اما بازم میگم داره کارشو توی محیط پنل وردپرس انجام میده و متغیرو به فایل mo میده شما هرکاری میخواین بکنید باید توی فایل ravandi انجام بدید بعد نتیجرو به اونیکی بفرستید تنها راهیه که حداقل من به ذهنم میرسه

ضمناا برای استفاده از super_Admin باید پپلایگنها لود بشن این مثالو دقت کنید
http://wordpress.stackexchange.com/questions/92517/fatal-error-call-to-undefined-function-wp-get-current-user

موفق باشید

ravand
سه شنبه 14 مرداد 1393, 13:54 عصر
خیلی ممنون که تا اینجا جواب منو دادید.
کاش میشد میتونستیم پسورد کاربر رو میدادیم به سشن. نه اینکه خودمون یه پسوردی انتخاب کنیم.
من چون توی ساخت افزونه مبتدی ام. برای همین از لینکی که دادید چیزی سر درنیاوردم. شما میتونی یه مثال ساده بنویسی که توی خود فایل ravandi.php باشه؟ بعد من بیام روی همون لینک عنوان کلیک بکنم. و یه صفحه یا یه چیزی توی همین مایه ها باز بشه؟ خیلی برام عجیبه! که واقعا چطوری این کار رو انجام میدن؟ هر چی سرچ زدم از هر کی توی هر انجمنی هم پرسیدم جواب درستی نگرفتم.
الان من یه پلاگین وردپرس نصب کردم. لینکش رفت توی بخش تنظیمات. بعد من وقتی روش کلیک کردم یه همچین آدرسی برام باز شد:

http://localhost/wordpress/wp-admin/options-general.php?page=rwpm_option
اگه همینم برام ایجاد بشه من راضی ام.
متشکرم.

DR.HTML
سه شنبه 14 مرداد 1393, 17:03 عصر
جناب راوند ببینید همین ادرسی که دادید بازم داره میاد پلاگینو از توی خود ادمین پنل باز میکنه Wp-admin رو ببینید .

ضمنن میتونید برای استفاده از سشن های مختلف میتونید از get_Current_user استفاده کنید و یوزر جاریو بگیرید .

و در نهایت نمیدونم از چه منبعی اموزش میبینید و نمیدونم تموم شده یا نه ام اپیشنهادم اینه اگر تموم نشده تا پایان اموزشو پیش ببرید و اگر هم تموم شده منبع دیگهای مخصوصا از خود سایت wordpress استفاده کنید تا نتونید از اون استفاده کنید نمیتونید پلاگین وردپرس بنویسید