رفتن به مطلب

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


پست های پیشنهاد شده


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();
}
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

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...