progpars

سوال / نوشتن افزونه

43 پست در این موضوع قرار دارد


add_action('wp_head','link');
function link()
{
echo '<a href="http://www.progpars.com">salam</a>';
}

من به فرض کدی مینویسم برای پلاگین سپس تابع رو در قالبم فراخوانی میکنم :


<?php link(); ?>

اما سوال :

وقتی افزونه رو فعال میکنیم جایی که ما تابع رو فراخوندیم لینک Salam میاد ولی وقتی افزونه رو غیر فعال میکنیم به جای salam با پیغام خطا مواجه میشم میخوام بدونم چه دستوری باید بنویسم در صورت غیر فعال سازی افزونه اخطاری نشون نده یا جاش بنویسه افزونه غیر فعال ...

به اشتراک گذاری این پست


لینک به پست
if( function_exists('link') ){ link();}

به اشتراک گذاری این پست


لینک به پست

آقا مرتضی کد کلیش به این شکل : ؟


if( function_exists('link') )
{
link();
}
add_action('wp_head','link');
function link()
{
echo '<a href="http://www.progpars.com">salam</a>';
}

آیا قبل از شروع کد نویسی فانکشن شما رو مینویسیم که اگر افزونه غیر فعال بود die شه ...

بعد یه مورد دیگه تو function_exists پارامترش که نام تابعمونه که هیچی محتویات فانکشن چرا باید نام تابع باشه ؟

به اشتراک گذاری این پست


لینک به پست

وقتی شما اکشنی رو اعمال میکنید دیگه نیازی به استفاده از تابع نیست ، خود اکشن اعمال میشه .

به اشتراک گذاری این پست


لینک به پست

شما شرط رو نباید داخل افزونه بزارید.

باید وقتی در پوسته میخواد فراخوانی بشه شرط وجودی تابع رو بررسی کنید.

به اشتراک گذاری این پست


لینک به پست

بابا داش مرتضی ، وقتی اکشن رو اعمال کرده چه نیازی به فراخوانی اون تابع هست ؟ !

به اشتراک گذاری این پست


لینک به پست

درسته رضا جان اکشنش نیازی نداره.

من فقط یادآوری کردم که این تابع داخل خود افزونه کاربردی نداره.

به اشتراک گذاری این پست


لینک به پست

اگر من نخوام این شرط رو داخل قالب استفاده کنم چی ؟ و فقط <?php link(); ....

ویرایش شده در توسط progpars

به اشتراک گذاری این پست


لینک به پست

توی این کدی که دادید که اصلا نیازی به این مورد نیست.

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

شاید کد شما چیز دیگه ایی باشه. باید بیشتر توضیح بدید یا کدتون رو بزارید تا بشه بهتر کمک کرد.

به اشتراک گذاری این پست


لینک به پست

ببینید من فقط میخوام بدونم افزونه هایی مثل صفحه بندی که یک فانکشن میده که باید تو قالب گذاشته بشه . در صورتی که افزونه غیر فعال شد کدی که توی قالب گذاشتیم جاش اروری نده که شما دستور شرطی رو داید برام جا نیوفتاد !

ویرایش شده در توسط progpars

به اشتراک گذاری این پست


لینک به پست

بیایید بررسی کنیم وردپرس با افزونه ها در حالت های مختلف چه برخوردی میکنه .

در حالتیکه افزونه غیرفعال هست ، فایل افزونه بعنوان یک فایل متنی فقط برای گرفتن اطلاعات نویسنده و ... خونده میشه .

اما وقتی افزونه رو فعال میکنید یه سری کارها اتفاق می افته مثلاً یک اکشن انجام میشه و در فرآیند فعال بودن افزونه یک اکشن دیگه .

این دستور


add_action('wp_head','link');
function link()
{
echo '<a href="http://www.progpars.com">salam</a>';
}

دقیقاً مثل این میمونه که شما داخل تابع wp_header دستور


echo '<a href="http://www.progpars.com">salam</a>';

رو قرار بدید ، پس دیگه نیازی به فراخوانی تابع نیست توی پوسته یا هر جایی که فکر میکنید .

امیدوارم اینو متوجه شده باشید .

مورد بعدی اینکه یک سری اطلاعات توسط یک تابع پردازش میشه و اون تابع نیازی نداره بعنوان اکشن اعمال بشه .

شما مثلاً توی افزونه بنویسید .


function sayHi()
{
echo 'Hi i am here !';
}

حالا هر جا خواستید میتونید از تابع sayHi استفاده کنید اما به شرطی که این تابع موجود باشه ، شما این تابع رو توی فایل یک افزونه نوشتید و شرط لازم اینه که برای درست کارکردن این تابع ، اون افزونه موجود و فعال باشه .

حالا اگر اون افزونه غیرفعال شد ، خطای پارسر نبود تابع رو میبینید برای حل این مشکل میبایست قبل از اینکه تابع رو استفاده کنید ، چک کنید آیا وجود داره یا خیر . (همانطور که آقا مرتضی گفتن)


if(function_exists('sayHi'))
{
sayHi();
}

به اشتراک گذاری این پست


لینک به پست

اقا رضا مرسی از توضیحاتتون متوجه شدم فقط یک چیز دیگه میخوام بدونم :

من یک فانکشن برای پلاگینم اضافه میکنم :


function name()
{
echo "mahdi";
}

این کد هم که برای پوسته :


<?php
if (function_exists('name')) {
name();
}
?>

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


<?php name();?>

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

به فرض اکشنی که بر روی تابع wp_header اعمال میشه یعنی:


add_action('wp_head','link');

اگر تابع wp_header در پوسته نباشه چیزی اعمال نمیشه . در کل ارتباطش رو باتوابع متوجه نشدم .

به اشتراک گذاری این پست


لینک به پست

ببینید در هر صورت شما دارید تابع رو در پوسته فراخوانی میکنید پس مجبورید همونجا وجودش رو بررسی کنید.

در مورد اکشن هم شما دارید روی یک تابع اصلی وردپرس اعمال می کنید. اینکه در وردپرس باشه یا خیر رو نمیتونید شما بررسی کنید و چون این تابع اصلی وردپرس هست بهرحال این اکشن اجرا میشه.

ارتباطش با افزونه در این هست که شما این کد رو استفاده کردید. میتونید استفاده نکنید. بستگش به کد شما داره.

معمولا در 90 درصد افزونه نویسی ها اکشن و فیلترها استفاده میشن.

به اشتراک گذاری این پست


لینک به پست

پس افزونه ای مثل wp-pagenavi که تابع رو توی پوسته به کار میبره اون به چه شکلی هست دستور شرطیی به کار نبرده در پوسته !

به اشتراک گذاری این پست


لینک به پست

منوظرتون این شکلی هست؟

<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>

استفاده میشه

به اشتراک گذاری این پست


لینک به پست

http://wp-persian.com/plugins/wp-pagenavi/#installation

و :


<?php wp_pagenavi(); ?>

حق باشماست تو این افزونه و راهتمای نصبشم پس باید این تابع رو بگه چون در صورت غیر فعال سازی افزونه خطای پارسر نبودن تابع رو میده

به هر تشکر من فک میکردم امکان این هست که همچین شرطی رو در خود کدهای افزونه به کار برد

به اشتراک گذاری این پست


لینک به پست

خب فکر کنم متوجه شدید دیگه که اونم چک میکنه .

اما اگه بخواید کد کوتاهتری بنویسید اینجوری بنویسید .


<?php ! function_exists('sayHi') or sayHi(); ?>

یا از کلک رشتی استفاده کن که البته پیشنهاد نمیکنم .


<?php @sayHi(); ?

به اشتراک گذاری این پست


لینک به پست

برای نوشتن کدهای جاوا اسکریپت در فایل افزونه به چه شکل هست ؟ کتابخانه جی کوئری که نیاز نیست پیوست بشه ؟


<script type="text/jscript">
$(document).ready(function(e) {
//dastorat
});
</script>

مثلاً واسه دیتالایف انجین :


echo <<< HTML
<script type="text/jscript">
$(document).ready(function(e) {
//dastorat
});
</script>
HTML;

به اشتراک گذاری این پست


لینک به پست

سوال دیگه ای هم که دارم وقتی کوئری میگیریم :


$wpdb->query("SELECT user_login FROM wp_users

تو پیشوند جداول مثلاً wp_jadval اینجا جای wp پیش فرض PREFIX نداره چون شاید پیشوند جداول عوض بشه و دیگه نشه سلکت کرد !

یک همچین چیزی :


$wpdb->query("SELECT user_login FROM ".PREFIX."_users

به اشتراک گذاری این پست


لینک به پست

در مورد کدهای جاوااسکریپت :

دوست عزیز وردپرس و دیتالایف جفتشون با php نوشته شدن پس سینتکس پی اچ پی برای جفتشون صادقه ً

برای کوئری ، بله ولی select ها رو با get_result میگیرن نه با query

به اشتراک گذاری این پست


لینک به پست

در مورد جاوا که تابعی رو پیدا کردم :


wp_enqueue_script(java.js);

در مورد پیشوند جداول هم خواستم بدونم که ثابتش کجا تعریف شده که ببینم با حروف کوچیک هست یا بزرگ !

در مورد کوئری ها هم خواستم بدونم برای مابقی دستورات دیتابیس inserto ,delete,update باید از چه تابعی استفاده کرد .

تشکر بابت راهنماییتون

ویرایش شده در توسط progpars

به اشتراک گذاری این پست


لینک به پست
در مورد پیشوند جداول هم خواستم بدونم که ثابتش کجا تعریف شده که ببینم با حروف کوچیک هست یا بزرگ !

$table_prefix

در مورد کوئری ها هم خواستم بدونم برای مابقی دستورات دیتابیس inserto ,delete,update باید از چه تابعی استفاده کرد .


$wpdb->query("UPDATE....
$wpdb->query("Delete from...
$wpdb->query("INSERT INTO....

به اشتراک گذاری این پست


لینک به پست

خوب تا به اینجا کد نویسی من به این شکل شد :


function lastuser()
{
global $wpdb;

$tabale = $wpdb->prefix ."users";

$queryuser = $wpdb->get_result("SELECT user_login FROM $tabale WHERE ORDER BY user_login DESC LIMIT 10");

while($row = $wpdb->get_row())
{
echo $row['user_login'];
}
}

تو کوئری فک نمیکنم مشکلی باشه مشکل تو حلقست فک کنم !

تابع get_row !

تو دیتالایف که ما اینجوری مینویسیم وردپرس رو نمیدونم تابعش رو !

مرسی - راهنمایی ؟

به اشتراک گذاری این پست


لینک به پست

به جای


while($row = $wpdb->get_row())
{
echo $row['user_login'];
}

بنویس


foreach($queryuser as $row)
{
echo $row->user_login;
}

توی کوئری هم where گذاشتی ، یا یه شرطی بذار یا برش دار .

یه کمی هم تر تمیز کوئری بنویس ;)



SELECT `user_login` FROM `{$table}` WHERE 1=1 ORDER BY `user_login` DESC LIMIT 10

بعدم اون tabale نیست و table :P

به اشتراک گذاری این پست


لینک به پست

رضا جان چرا {$table} رو داخل } گذاشتی ؟

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری