WordPress.org

Ready to get started?Download WordPress

Forums

Help! - I'm creating my first plugin (8 posts)

  1. boldt
    Member
    Posted 6 years ago #

    It is obvious very difficult to get other plugins to do what I want, so now I'm going to create my own.

    My plugin shall show a list of recent comments - including comments to images given in the built-in [gallery].

    So far I have now made this function:

    function bald-comment($no-comment,$exerpt-length)
    {
    // define no-comment and exerpt-length if not typed
    	if ($no-comment =='')
    		$nocomment= 10 else $nocomment=$no-comment;
    	if ($exerpt-length=='')
    		$exerpt=50 else $exerpt=$exerpt-length;  
    
    // Open Database the wordpress way
    // not using mysql_connect("server", "username", "password") or die(mysql_error());
    
    // Get data  FROM comments is not the wordpress way?
    	$query = sprintf("SELECT comment_ID, comment_post_ID, comment_author, comment_content, comment_approved FROM comments ORDER BY comment_ID DESC LIMIT 10 WHERE comment_approved='1'");
    
    // show data myblog address the wordpress way? 
    
    	while($row = mysql_fetch_assoc($query))
    	{
    		$tring='<a href="'.myblog.'/?p='.$row[comment_post_ID]142.'#comment-'.$row[comment_ID].'">'.$row[comment_author].'</a>: ';
    
    		if ($exerpt=0)
    			{$tring.=$row[comment_content];}
    		else
    			{$tring.=substr($row[comment_content],0,$exerpt).'...';}
    		$tring.= '<br />';
    
    		echo $tring;
    	}
    }

    Now I have 3 questions:

    1) How do I open the WP database correct?
    2) http://codex.wordpress.org/Writing_a_Plugin says: "Do not hardcode the WordPress database table prefix (usually "wp_") into your plugins. Be sure to use the $wpdb->prefix variable instead. "
    How do I do that?
    3) Maybe others would like to use my plugin so I don't want to hardcode the address, what is the address of my weblog wordpress style?

    kind regards

    Mikael Boldt

  2. The approved method is through the wpdb class:

    Function Reference/wpdb Class

    If you use that, you don't need to know about the table prefix.

    For the address, you'll probably want to look at:

    Template Tags/get bloginfo

    (I'm not a coder, but I have managed to throw together a plugin, and even a widget)

  3. boldt
    Member
    Posted 6 years ago #

    Thank you.
    Now I have added input from the mentioned pages plus some intro.

    Now my plugin looks like this:

    /*
    Plugin Name: bald-commentlist
    Plugin URI: http://wordpress.org/support/topic/188525
    Description: This plugin shows an excerpt of the recent comments given in the blog with a link to the post and the name of the commenteer.
    Version: 0.1
    Author: Boldt
    Author URI: none
    */
    
    /*
    		Copyright 2008  Boldt  (email : none)
    
        This program is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation; either version 2 of the License, or
        (at your option) any later version.
    
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
    
        You should have received a copy of the GNU General Public License
        along with this program; if not, write to the Free Software
        Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    */
    
    /*
    	Template Tag: Displays the most recently commented posts.
    		e.g.: <?php bald_comments(10, 50); ?>
    	this example will show an exerpt of the latest 10 comments, the exerpt is 50 letters
    */
    
    ?>
    
    function bald-comment($no-comment,$exerpt-length)
    {
    // define no-comment and exerpt-length if not typed
    	if ($no-comment =='')
    		$nocomment= 10 else $nocomment=$no-comment;
    	if ($exerpt-length=='')
    		$exerpt=50 else $exerpt=$exerpt-length;  
    
    // Open Database the wordpress way
    // not using mysql_connect("server", "username", "password") or die(mysql_error());
    
    // Get data  FROM comments is not the wordpress way
    $rows= $wpdb->query("SELECT comment_ID, comment_post_ID, comment_author, comment_content, comment_approved FROM comments ORDER BY comment_ID DESC LIMIT 10 WHERE comment_approved='1'");
    
    // show data
    
    	foreach ($rows as $row)
    	{
    		$tring='<a href="'.get_bloginfo ('url').'/?p='.$row[comment_post_ID]142.'#comment-'.$row[comment_ID].'">'.$row[comment_author].'</a>: ';
    
    		if ($exerpt=0)
    			{$tring.=$row[comment_content];}
    		else
    			{$tring.=substr($row[comment_content],0,$exerpt).'...';}
    		$tring.= '<br />';
    
    		echo $tring;
    	}
    }

    Later this week I will try out the plugin (unfortunately I have a job for bread and butter - this is only icing on the cake)

    kind regards

    Mikael Boldt

  4. boldt
    Member
    Posted 6 years ago #

    Now I have corrected some minor errors and my plugin looks now like this:

    <?php
    /*
    Plugin Name: bald-commentlist
    Plugin URI: http://wordpress.org/support/topic/188525
    Description: This plugin shows an excerpt of the recent comments given in the blog with a link to the post and the name of the commenteer.	How to use the plugin: put this in your template: <?php bald_comments(10, 50); ?>
    Version: 0.2
    Author: Boldt
    Author URI: none
    */
    
    /*
    		Copyright 2008  Boldt  (email : none)
    
        This program is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation; either version 2 of the License, or
        (at your option) any later version.
    
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
    
        You should have received a copy of the GNU General Public License
        along with this program; if not, write to the Free Software
        Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    */
    
    function bald_comments($no_comment,$exerpt_length)
    {
    // Set default if no_comment and exerpt_length are not defined
    	if ($no_comment=='')
    		{$nocomment=10;} else {$nocomment=$no-comment;}
    	if ($exerpt_length=='')
    		{$exerpt=50;} else {$exerpt=$exerpt-length;} 
    
    // Get data
    	$rows= $wpdb->query("SELECT comment_ID, comment_post_ID, comment_author, comment_content, comment_approved FROM comments ORDER BY comment_ID DESC LIMIT 10 WHERE comment_approved='1'");
    
    // show data
    	foreach ($rows as $row)
    	{
    		$tring='<a href="'.get_bloginfo ('url').'/?p='.$row[comment_post_ID].'#comment-'.$row[comment_ID].'">'.$row[comment_author].': </a>';
    
    		if ($exerpt=0)
    			{$tring.=$row[comment_content];}
    		else
    			{$tring.=substr($row[comment_content],0,$exerpt).'...';}
    		$tring.= '<br />';
    
    		echo $tring;
    	}
    }
    ?>

    But now I get following error message:

    Fatal error: Call to a member function query() on a non-object in /home/www/ronnespejder.dk/wp-content/plugins/bald-comments.php on line 38

    What is wrong?

  5. Lester Chan
    Member
    Posted 6 years ago #

    Add global $wpdb; Below function bald_comments($no_comment,$exerpt_length)

  6. boldt
    Member
    Posted 6 years ago #

    Done!

    but now I get this:

    Fatal error: Call to undefined function bald_comments() in /home/www/ronnespejder.dk/wp-content/themes/ddsPress/sidebar.php on line 83

  7. boldt
    Member
    Posted 6 years ago #

    Sorry forgot to active my plugin,

    anyway, now I get this:

    Warning: Invalid argument supplied for foreach() in /home/www/ronnespejder.dk/wp-content/plugins/bald-comments.php on line 42

  8. Lester Chan
    Member
    Posted 6 years ago #

    Your SQL query is wrong

    It should be:
    "SELECT comment_ID, comment_post_ID, comment_author, comment_content, comment_approved FROM $wpdb->comments WHERE comment_approved='1' ORDER BY comment_ID DESC LIMIT 10"

Topic Closed

This topic has been closed to new replies.

About this Topic