【问题标题】:Displaying db table row that matches WP post-id显示与 WP po​​st-id 匹配的数据库表行
【发布时间】:2016-02-03 16:03:29
【问题描述】:

需要一些指导。我已经在 Wordpress 中建立了一个排球俱乐部网站,我们已经请求了我在 Google 表单/电子表格中捕获的球员资料数据,保存为 .csv,然后导入到一个名为“资料”的自定义表格中。 http://goo.gl/05tu3O

我正在尝试将代码添加到播放器模板文件中,以根据 WP po​​st-id 的匹配在 html 表中显示数据。 http://goo.gl/5bvwzV

我确定了所有播放器页面的 post-id 并将它们包含在名为“post_id”的表的第一列中,并将其设置为 Primary。目标是,例如,如果您打开 postid-1566 的玩家页面,则应显示配置文件表中 post_id 为 1566 的行。

由于 SELECT * 查询,我现在获得了每个人的个人资料数据。我正在尝试将查询的语法更改为 DISTINCT,以便它在配置文件表中查找与您所在的播放器页面具有相同后 ID 号的特定行。

<?php
  global $wpdb;
//  $result = $wpdb->get_results( $wpdb->prepare ( "SELECT DISTINCT $wpdb->posts.ID FROM $wpdb->profiles" ) );
    $result = $wpdb->get_results( $wpdb->prepare ( "SELECT * FROM profiles" ) );

    foreach ( $result as $print )   {

      echo '<h6>Playing Experience </h6><p>' . $print->PlayingExperience.'</p>';
      echo '<h6>Previous Clubs </h6><p>' . $print->PreviousClubs.'</p>';
      echo '<h6>Athletic Awards & Accolades</h6><p>' . $print->AwardsAccolades.'</p>';
      echo '<h6>Fondest Volleyball Memory</h6><p>' . $print->FondestMemory.'</p>';
      echo '<h6>Best Finish</h6><p>' . $print->BestFinish.'</p>';
      echo '<h6>Online Video</h6><p>' . $print->OnlineVideo.'</p>';

      echo '<h3>Profile Details</h3>';

//      echo '[content_protector password="xxxxxxx" cookie_expires="0" identifier="xxx"]';
//      echo '[content_protector password=&quot;xxxxxxx&quot; cookie_expires=&quot;0&quot; identifier=&quot;xxx&quot;]';

// In case there is opening and closing shortcode.
//      echo do_shortcode( '[content_protector password="xxxxxxx" cookie_expires="0" identifier="xxx"] Private Info  [/content_protector]' );
      echo do_shortcode( '[content_protector password="xxxxxxx" cookie_expires="0" identifier="xxx"]' );
      echo '<h2>' . $print->FirstName.' ' . $print->LastName.' </h2>';
      echo '<table class="profile center">';
      echo '<tr><td>Team </td><td>' . $print->Team.'</td></tr>';
      echo '<tr><td>First Name </td><td>' . $print->FirstName.'</td></tr>';
      echo '<tr><td>Nickname </td><td>' . $print->Nickname.'</td></tr>';
      echo '<tr><td>Middle Name </td><td>' . $print->MiddleName.'</td></tr>';
      echo '<tr><td>Last Name </td><td>' . $print->LastName.'</td></tr>';
      echo '<tr><td>Height </td><td>' . $print->Height.'</td></tr>';
      echo '<tr><td>Position </td><td>' . $print->Position.'</td></tr>';
      echo '<tr><td>Birthday </td><td>' . $print->Birthday.'</td></tr>';
      echo '<tr><td>School </td><td>' . $print->School.'</td></tr>';
      echo '<tr><td>Grade </td><td>' . $print->Grade.'</td></tr>';
      echo '<tr><td>Class </td><td>' . $print->Class.'</td></tr>';
      echo '<tr><td>Commitment </td><td>' . $print->Commitment.'</td></tr>';
      echo '<tr><td>Standing Reach </td><td>' . $print->Reach.'</td></tr>';
      echo '<tr><td>Block Touch </td><td>' . $print->Block.'</td></tr>';
      echo '<tr><td>Approach Jump </td><td>' . $print->Approach.'</td></tr>';
      echo '<tr><td>GPA (Unweighted) </td><td>' . $print->GPA_Unweighted.'</td></tr>';
      echo '<tr><td>GPA (Weighted) </td><td>' . $print->GPA_Weighted.'</td></tr>';
      echo '<tr><td>Class Rank </td><td>' . $print->ClassRank.'</td></tr>';
      echo '<tr><td>ACT Scores </td><td>' . $print->ACT_Score.'</td></tr>';
      echo '<tr><td>SAT Scores </td><td>' . $print->SAT_Score.'</td></tr>';
      echo '<tr><td>Parents / Guardians </td><td>' . $print->Parents.'</td></tr>';
      echo '<tr><td>Parent 1 Email </td><td>' . $print->ParentEmail1.'</td></tr>';
      echo '<tr><td>Parent 2 Email </td><td>' . $print->ParentEmail2.'</td></tr>';
      echo '<tr><td>Address </td><td>' . $print->Address.'</td></tr>';
      echo '<tr><td>City, State, Zip </td><td>' . $print->City.', ' . $print->State.', ' . $print->Zip.'</td></tr>';
      echo '<tr><td>Your Cell # </td><td>' . $print->YourCell.'</td></tr>';
      echo '<tr><td>Parent 1 Cell # </td><td>' . $print->ParentCell1.'</td></tr>';
      echo '<tr><td>Parent 2 Cell # </td><td>' . $print->ParentCell2.'</td></tr>';
      echo '<tr><td>Home Phone </td><td>' . $print->HomePhone.'</td></tr>';
      echo '<tr><td>Interest in Beach Volleyball? </td><td>' . $print->BeachInterest.'</td></tr>';
      echo '<tr><td>Beach Volleyball experience? </td><td>' . $print->BeachExperience.'</td></tr>';
      echo '<tr><td>Next ACT/SAT date </td><td>' . $print->NextACTSATdate.'</td></tr>';
      echo '<tr><td>Favorite Subjects </td><td>' . $print->FavoriteSubjects.'</td></tr>';
      echo '<tr><td>Desired Area of Study </td><td>' . $print->DesiredMajor.'</td></tr>';
      echo '<tr><td>Desired Level of Play </td><td>' . $print->DesiredPlayingLevel.'</td></tr>';
      echo '<tr><td>State of College Preference </td><td>' . $print->CollegePreference.'</td></tr>';
      echo '<tr><td>Size of School </td><td>' . $print->SchoolSize.'</td></tr>';
      echo '<tr><td>Contacting schools? </td><td>' . $print->ContactingSchools.'</td></tr>';
      echo '</table>';
//      echo '[/content_protector]';
      echo do_shortcode( '[/content_protector]' );

  }
?>

不确定我是否以最佳方式接近这一点,但感觉我已经接近了。我认为解决方案在这个例子中的某个地方,但我无法让它工作。

$result = $wpdb->get_row( $wpdb->prepare ( "SELECT DISTINCT $wpdb->posts.ID FROM $wpdb->profiles WHERE post_id = $postid" ) );

也无法执行“content_protector”短代码的结束标记。我可以从 do_shortcode 开始,但是过去的所有内容都需要在该 [/content_protector] 内,并且将该行的后半部分添加到底部是行不通的。有什么建议么?有没有办法在短代码之间嵌套所有内容?

非常感谢您的任何建议!

【问题讨论】:

  • 当您通过帖子 ID 限制结果时,为什么需要 DISTINCT?个人资料表中的帖子 ID 不是唯一的吗?换句话说,SELECT * FROM profiles WHERE post_id = $postid 返回的记录多于 1 条吗?
  • 只是在尝试不同的东西。是的,帖子 ID 是唯一的……每个玩家只有一行。页面仍然以此呈现,但不返回任何内容。不过谢谢!
  • @devlin,你是对的......我只需要添加 $postid = get_the_ID();到顶部,它的工作原理!呜呼!现在我只需要让结束的 content_protector 短代码工作,这样我就可以通过密码隐藏这些个人数据。有什么想法吗?

标签: php html mysql wordpress


【解决方案1】:

选择 DISTINCT 对我来说没有意义。在您的个人资料表中,每个条目/行已经是唯一的,对吗?每排一名球员? DISTINCT 只会返回一次任何重复值。

我想你想要这样的东西

$print = $wpdb->get_row( $wpdb->prepare ( "SELECT * FROM $wpdb->profiles 
                                            WHERE post_id = %s," $postid) );

使用 $result 跳过并循环遍历每个结果。 get_row 的每个结果都应该包含整行玩家数据。而是通过每个玩家的 ID 循环并查询整行。

foreach ($postids as $postid){

    $print = $wpdb->get_row( $wpdb->prepare ( "SELECT * FROM $wpdb->profiles 
                                               WHERE post_id = %s," $postid) );
    // echo all those print lines
}

【讨论】:

  • 我正在考虑的这种方法是假设您以某种方式获取要为其显示数据的玩家的 $postid(s)。 postid 是否会在您以前拥有的数组中?或者在每次页面加载时,您是否使用要显示的播放器 ID 填充 $postid 变量?
  • 是的,每个条目/行都是唯一的,每行一个玩家。这些建议不会呈现页面,只会呈现白屏。看起来它应该工作。不确定你的问题,但我倾向于后者。我是一名设计师/网站管理员,只是想完成这项工作,所以请原谅我的无知。如果有帮助,我可以将列的名称从 post_id 更改为其他名称。非常感谢您的建议!
  • 检查错误日志以查看 PHP 错误的内容。如果需要,请在 wp-config.php 中设置以显示类似的错误。 ini_set('display_errors',1); error_reporting(E_ALL|E_STRICT);
  • $wpdb-&gt;prepare ( "SELECT * FROM $wpdb-&gt;profiles WHERE post_id = %s," $postid) 是您正在寻找的。这应该返回 $postid 等于玩家的 post_id 的特定行的每一列。这样您就可以 -> 为姓氏、中间名、学校等。问题是,您从哪里获得 ID?每个页面会只显示一个玩家吗?又名。你可以通过wordpress方法get_the_ID()link获取玩家ID
  • 说...解析错误:语法错误,意外的“$postid”(T_VARIABLE)。是的,这正是需要发生的事情。是的,每个页面都显示一个玩家。我读了一些关于 get_the_ID() 的东西,但不知道如何实现它。
【解决方案2】:

知道了!这行得通...

$postid = get_the_ID(); 
$result = $wpdb->get_results( $wpdb->prepare ( "SELECT * FROM profiles 
                                               WHERE post_id = $postid" ) ); 
foreach ( $result as $print ) {

在打开/关闭标签中间有很多代码的短代码技巧是:

$the_content = '<h2>' . $print->FirstName.' ' . $print->LastName.' </h2>';
$the_content .= '<table class="profile center">';
$the_content .= '<tr><td>Team </td><td>' . $print->Team.'</td></tr>';
$the_content .= '<tr><td>First Name </td><td>' . $print->FirstName.'</td></tr>';
$the_content .= '<tr><td>Nickname </td><td>' . $print->Nickname.'</td></tr>';
$the_content .= '<tr><td>Middle Name </td><td>' . $print->MiddleName.'</td></tr>';
$the_content .= '<tr><td>Last Name </td><td>' . $print->LastName.'</td></tr>';
...
$the_content .= '/<table>';
echo do_shortcode( '[content_protector password="xxxxxxx" cookie_expires="0" identifier="xxx"]' . $the_content . '[/content_protector]' );

感谢各位帮我找到解决方案。你摇滚!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 2022-08-15
    相关资源
    最近更新 更多