自定义快捷代码破坏我的页面

时间:2012-07-06 作者:Jiri Krewinkel

好的,我正在尝试创建一个名为chapter的wordpress短代码,即。[chapter]text[/chapter].

它首先检查输入的内容是否已经在数据库中,如果没有,它会将其添加到数据库中,并将计数添加到另一个表中。然后将其输出到div中

这是我的密码

function chapters( $atts, $content ) {
    $postid = get_post($my_id);

    $result_chaptertitle = mysql_query("SELECT * FROM ltd_chapters_titles WHERE chaptertitle=\'$content\' AND postid=\'$postid\'");
    $num_rows_chaptertitle = mysql_num_rows($result_chaptertitle);

    $result_chaptercount = mysql_query("SELECT * FROM ltd_chapters WHERE postid=\'$postid\'");
    $num_rows_chaptercount = mysql_num_rows($result_chaptercount);

    if ($num_rows_chaptertitle == 0) {
        mysql_query("INSERT INTO ltd_chapters_titles (postid, chaptertitle) VALUES (\'$postid\',\'$content\')");
    }

    if ($num_rows_chaptercount == 0) {
        mysql_query("INSERT INTO ltd_chapters (postid, chapter) VALUES (\'$postid\', 1)");
    } else {
        mysql_query("UPDATE ltd_chapters SET chapter=chapter+1 WHERE postid=\'$postid\'");
    }

    $chaptercount = mysql_query("SELECT chapter FROM table WHERE postid=\'$postid\'");

    mysql_query("UPDATE ltd_chapters SET count=\'$chaptercount\' WHERE postid=\'$postid\' AND chaptertitle=\'$content\'");

    return \'<div id="chapter\'.$chaptercount.\'"><h3>\'.$content.\'</h3></div>\';

}
add_shortcode(\'chapter\', \'chapters\');
当我在一篇文章中应用这一点时,文章的全部内容不会显示在页面上,之后的所有内容也不会呈现出来(因此没有页脚等)the_content(); 虽然应该是封闭的

有谁能告诉我我做错了什么?我对PHP很陌生

2 个回复
SO网友:Dougal Campbell

$my_id 变量应该来自短代码上的属性?E、 g。[chapter my_id="123"]Lorum ipsum...[/chapter]

如果是,在chapters() 函数,则需要从传入的数组中检索属性。类似于:

extract( shortcode_atts( array(
    \'foo\' => \'something\',
    \'bar\' => \'something else\',
), $atts ) );
该数组中的值是默认值,如果您的$attr (来自内容中的shortcode标记)。

否则,我们需要更多地了解在哪里$my_id 首先要做好准备。如果您只是想获取包含短代码的当前帖子的帖子ID,那么可以尝试以下操作:

global $post;
$my_id = $post->ID;
最后,作为一种最佳实践,您可能需要阅读$wpdb 接口,并使用核心数据库访问功能。它将帮助您的代码经得起未来的考验。

SO网友:TheDeadMedic

无变量$my_id 在线【3】,$postid 将默认为查询中当前的post对象,很可能无法使用对象$postid 作为字符串,通常是致命错误,我希望代码能说明问题,但我强烈建议您提高对WordPress和;PHP-查看手册,阅读博客,如果合适的话可以买一本书!

function chapters( $atts, $content )
{
    // We need access to some variables outside the function, so globalise them.
    global $wpdb, $post;

    $chapter_title = $wpdb->get_row(
        $wpdb->prepare(
            \'SELECT * FROM ltd_chapters_titles WHERE chaptertitle = %s AND postid= %d\',
            $content, $post->ID
        )
    );

    if ( ! $chapter_title ) {
        // Make use of all the handy methods $wpdb has to offer!
        $wpdb->insert( \'ltd_chapters_titles\',
            array( \'chaptertitle\' => $content, \'postid\' => $post->ID ),
            array( \'%s\', \'%d\' )
        );
    }

    // For sanity to inject straight into string rather than prepare()
    $post_id = absint( $post->ID );

    if ( $wpdb->get_var( "SELECT postid FROM ltd_chapters WHERE postid = $post_id" ) ) {
        $wpdb->query( "UPDATE ltd_chapters SET chapter=chapter+1 WHERE postid = $postid" );
    } else {
        $wpdb->insert( \'ltd_chapters\',
            array( \'chapter\' => 1, \'postid\' => $post->ID ),
            array( \'%d\', \'%d\' )
        );
    }

    $chapter = $wpdb->get_var( "SELECT chapter FROM ltd_chapters WHERE postid = $post_id" );
    $wpdb->update( \'ltd_chapters\',
        array( \'count\', $count ),
        array( \'postid\' => $post_id ),
        \'%s\',
        \'%d\'
    );

    return sprintf( \'<div id="chapter%d"<h3>%s</h3></div>\', $chapter, $content );
}
要有信心,不要放弃!

结束

相关推荐

CURRENT_SHORTCODE()-检测当前使用的短码

在插件类中,我想为公共数据提供简单的字段:电子邮件、电话号码、Twitter等。该列表可以扩展。看到了吗plugin Public Contact Data 有关详细信息,请访问GitHub。为了保持使用简单,我还想提供易于键入的短代码:[public_email][public_phone][public_something]</唯一的区别是第二部分。我不想对短代码进行进一步的讨论,因为它们容易出错。所以我注册了one 插件类中所有字段的快捷码处理程序:foreach ( $this->fi